我正在尝试导入 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 开关有关,但我已经尝试过,但没有奏效。有谁知道这可能是什么?
如果有人对字符集问题有任何建议也会有所帮助。
阅读问题标题中的错误消息后,我的第一反应是建议增加 max_allowed_packet。你提到你尝试过“那个开关”它并没有奏效。你能确认你已经正确修改了服务器的配置文件吗?您的措辞听起来像是您尝试将其用作 mysql.exe 客户端命令行上的命令行开关,这不会导致服务器改变行为。
因此,简而言之,您应该尝试找到并编辑您的服务器当前正在使用的 my.cnf 文件。在该
[mysqld]
部分中,将 max_allowed_packet 设置更改为类似更改配置后不要忘记重新启动服务器。
我以 32M(一个可笑的大值)为例。由于您的查询似乎很大,您应该尝试这个值(如果您有足够的 RAM,甚至可以尝试 64M)来查看它是否有效。
另一种选择是让服务器保持原样并更改用于生成 SQL 转储的客户端的行为。告诉它将单个查询的大小限制在 1 MB 以下 - 这也应该可以解决问题。
有关详细信息,请参阅B.1.2.10。MySQL 手册中的数据包太大。
在 MySQL 5.7.24 上,这是由于 MySQL 5.6 的旧配置
如果 SQL 版本相同 5.7.5 或更高版本,则以下选项是强制性的。
sql_mode=TRADITIONAL
/etc/my.cnf 中还有两个 max_allowed_packet 参数,另一个是 mysqldump 的。请注意相同。
max_allowed_packet=<1G>
我的安装是在 CentOS7 上。
你能从 linux 机器上访问 windows 服务器上的 MySQL 实例吗?
如果是这样,您可以在 linux 机器上运行命令,使用-h 开关连接到 windows 机器上的服务器吗?
这可能会解决您的字符集问题,因为您在原始机器上使用 Linux 客户端进行导入。(只是猜测)
MySQL 日志说什么?
如果服务器上出现无法纠正的错误,有时会在客户端上报告此错误。这可以指示数据库表的磁盘损坏。
你的账户有密码吗?也许您需要添加 -p 开关: