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

Jer*_*nch 15 mysql

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

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

我登录到命令行并运行:

SOURCE c:/dump.sql
Run Code Online (Sandbox Code Playgroud)

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

有人建议我运行:

mysql -u username -d dbase < c:\dump.sql
Run Code Online (Sandbox Code Playgroud)

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

ERROR 2006 (HY000) at line 149351: MySQL server has gone away
Run Code Online (Sandbox Code Playgroud)

一些谷歌搜索表明这与 max_allowed_pa​​cket 开关有关,但我已经尝试过,但没有奏效。有谁知道这可能是什么?

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

Mih*_*şan 27

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

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

[mysqld]
max_allowed_packet=32M
Run Code Online (Sandbox Code Playgroud)

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

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

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

有关更多详细信息,请参见B.1.2.10。MySQL手册中的数据包太大