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


11

我正在尝试导入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开关有关,但是我已经尝试过了,但是没有用。有谁知道这可能是什么?

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


任何反馈?[需要注释15个字符]
MihaiLimbăşan,2009年

Answers:


23

阅读问题标题中的错误消息后,我的本能是建议增加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手册中的数据包太大


1
是的,我只是尝试使用命令行开关。我认为它起作用的原因是,当我将它设置为较小值时,它给最大允许数据包带来了很小的错误。我将在星期一尝试您的建议。谢谢
杰里米·法兰西

不用客气-我几乎可以肯定这会起作用。不幸的是,就像过去50年来编写的许多其他软件(好的,大多数)一样,如果您还不熟悉开发人员的思维方式,则MySQL的错误消息往往会令人感到迷惑和误导:)。
MihaiLimbăşan,2009年

很高兴听到这个消息-玩得开心。
MihaiLimbăşan,2009年

非常非常棒。我也遇到了同样的问题,来到这里问这个问题!解决了。@Mihai-无论您获得什么报酬;这还不够:)
史蒂文·埃弗斯

当我们将MySQL从本地主机转移到远程服务器后,当遇到此错误时,此解决方案对我们有帮助。非常感谢你!
Lea Cohen

1

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

sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION. 

如果SQL版本等于5.7.5或更高版本,则必须使用以下选项。

sql_mode=TRADITIONAL

/etc/my.cnf中也有两个max_allowed_pa​​cket参数,另一个是mysqldump。请注意相同。

max_allowed_pa​​cket = <1G>

我的安装在CentOS7上。


0

您是否可以从Linux框中访问Windows服务器上的MySQL实例?

如果是这样,您是否可以在Linux框中运行命令,并使用-h开关连接到Windows框中的服务器?

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

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


0

MySQL日志怎么说?

如果服务器上存在无法纠正的错误,有时会在客户端上报告此错误。这可以指示数据库表的磁盘损坏。


-1

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

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

哦-可能不是,因为似乎导入失败。
布伦特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.