尝试导入大型转储文件时出现“MySQL 服务器已消失”

尝试导入大型转储文件时出现“MySQL 服务器已消失”

我正在尝试导入 MySQL 转储文件。

该文件是在 Linux 服务器上创建的,我正尝试在 Windows 上导入

我登录命令行并运行:

SOURCE c:/dump.sql

但这似乎引发了一些字符集问题(特别是智能引号和其他非标准标点符号)。

有人建议我运行:

mysql -u username -d dbase < c:\dump.sql

当我尝试这个时我收到错误

ERROR 2006 (HY000) at line 149351: MySQL server has gone away

谷歌搜索了一下,发现这与 max_allowed_pa​​cket 开关有关,但我试过了,没有用。有人知道这可能是什么吗?

如果有人对字符集问题有建议,这也会有所帮助。

答案1

读完问题标题中的错误消息后,我的第一反应是建议增加 max_allowed_pa​​cket。您提到您尝试过“那个开关”,但没有起作用。您能确认您已正确修改了服务器的配置文件吗?您的措辞听起来像是您尝试将其用作 mysql.exe 客户端命令行上的命令行开关,这不会导致服务器改变行为。

因此,简而言之,您应该尝试找到并编辑服务器当前正在使用的 my.cnf 文件。在部分中,[mysqld]将 max_allowed_pa​​cket 设置更改为类似

[mysqld]
max_allowed_packet=32M

更改配置后,不要忘记重新启动服务器。

我使用了 32M(一个大得离谱的值)作为示例。由于您的查询似乎非常大,您应该尝试这个值(或者如果您有足够的 RAM,甚至可以尝试 64M)以查看它是否有效。

另一个选择是让服务器保持原样,并改变用于生成 SQL 转储的客户端的行为。告诉它将单个查询的大小限制在 1 MB 以下 - 这也应该可以解决问题。

有关详细信息,请参阅B.1.2.10. 数据包太大在 MySQL 手册中。

答案2

在 MySQL 5.7.24 上,这是由于 MySQL 5.6 的配置太旧

sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION. 

如果 SQL 版本为 5.7.5 或更高版本,则以下选项是必需的。

sql_mode=TRADITIONAL

有两个 max_allowed_pa​​cket 参数在 /etc/my.cnf 中,另一个用于 mysqldump。请注意这一点。

最大允许数据包=<1G>

我的安装是在CentOS7上。

答案3

您能从 Linux 机器访问 Windows 服务器上的 MySQL 实例吗?

如果是这样,您可以在 Linux 机器上运行该命令吗?-h 开关连接到 Windows 机器上的服务器?

mysql -u username -d dbase -h <windows host> < dump.sql

可能会解决你的字符集问题,因为您使用原始机器上的 Linux 客户端进行导入。(只是猜测)

答案4

你的账户有密码吗?也许你需要添加 -p 开关:

mysql -u username -p -d dbase < c:\dump.sql

相关内容