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

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

该文件是在Linux服务器上创build的,我试图在Windows上导入

我login到命令行并运行:

SOURCE c:/dump.sql 

但是,这似乎已经抛出了一些字符集问题(特别是智能报价和其他非标准的标点符号)。

有人build议我运行:

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

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

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

有点谷歌searchbuild议,这是与max_allowed_pa​​cket开关,但我已经尝试过,它没有奏效。 有没有人知道这可能是什么?

如果任何人有关于字符集问题的build议也会有所帮助。

在阅读问题标题中的错误信息之后,我的第一个直觉是build议增加max_allowed_pa​​cket。 你提到你尝试过“切换”它并没有奏效。 你能确认你已经正确地修改了服务器的configuration文件吗? 你的措辞使得它听起来像你已经尝试使用它作为mysql.exe客户端命令行上的命令行开关,这不会导致服务器改变行为。

所以,简而言之,你应该尝试做的是find并编辑你的服务器当前使用的my.cnf文件。 在[mysqld]部分中,将max_allowed_pa​​cket设置更改为类似的内容

 [mysqld] max_allowed_packet=32M 

不要忘记在更改configuration后重新启动服务器。

我用32M(一个可笑的大数值)作为例子。 由于你的查询似乎很有用,你应该试试这个值(或者,如果你有足够的内存,甚至可能是64M)来查看它是否工作。

另一个select是保持服务器不变,并改变用于生成SQL转储的客户端的行为。 告诉它将单个查询的大小限制在1MB以下 – 这也应该是个诀窍。

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

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

如果是这样,你可以运行命令在Linux的盒子上,用-h开关连接到Windows盒子上的服务器?

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

可能会解决您的字符集问题 ,因为您正在使用原始框上的Linux客户端来执行导入。 (只是一个猜测)

MySQL日志说什么?

有时,如果服务器上存在无法纠正的错误,则会在客户端上报告此错误。 这可能是数据库表损坏的一个指标。

您的帐户是否有密码? 也许你需要添加-p开关:

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