我正在尝试导入 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_packet 开关有关,但我试过了,没有用。有人知道这可能是什么吗?
如果有人对字符集问题有建议,这也会有所帮助。
答案1
读完问题标题中的错误消息后,我的第一反应是建议增加 max_allowed_packet。您提到您尝试过“那个开关”,但没有起作用。您能确认您已正确修改了服务器的配置文件吗?您的措辞听起来像是您尝试将其用作 mysql.exe 客户端命令行上的命令行开关,这不会导致服务器改变行为。
因此,简而言之,您应该尝试找到并编辑服务器当前正在使用的 my.cnf 文件。在部分中,[mysqld]
将 max_allowed_packet 设置更改为类似
[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_packet 参数在 /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