我正在将MySQL数据库从一个现在无法访问的服务器移动到一个新的服务器。转储包含的表又包含二进制blob,这似乎会导致MySQL命令行客户端出现问题。在尝试恢复数据库时,我收到以下错误:
ERROR at line 694: Unknown command '\''.我检查了出现错误的那一行,发现它是一个很大的insert语句(大约。长度为900k个字符),这似乎是将二进制blob插入到表中。
现在,我发现these two的问题似乎与我的问题有关。然而,这两个答案都没有解决我的问题。添加--default-character-set=utf8甚至--default-caracter-set=latin1不会改变任何东西,并且不可能使用--hex-dump创建转储,因为源数据库服务器不再可访问。
有没有办法通过MySQL命令行客户端恢复此备份?如果是,我需要做些什么?
如果您需要任何其他信息,请告诉我。
提前谢谢。
编辑:我使用的是MySQL 5.6.35。此外,除了上面列出的尝试之外,我已经尝试将max_allowed_packet系统变量增加到其最大值-在服务器和客户端上-但都无济于事。
发布于 2017-02-22 07:53:18
如果我没记错的话,您需要将my.cnf中的max_allowed_packet设置为足以容纳转储文件中最大的数据blob的值,然后重新启动MySQL服务器。
然后,可以使用如下所示的恢复命令:
mysql --max_allowed_packet=64M < your_dumpfile.sql更多信息请点击此处:[https://dev.mysql.com/doc/refman/5.6/en/server-system-variables.html#sysvar_max_allowed_packet]
发布于 2017-04-28 01:01:43
没有解决方案,只是确认我看到了包含长JSON字符串的"text“字段类型的相同行为。MySQLdump生成的SQL (备份)文件有一条INSERT语句,它将该特定文本字段的长度截断为“大约”64K (有许多转义引号/双引号和各种UTF-8字符)-而不会发出这样的截断发生的警告。
自然,由于JSON格式化字符串过早终止,恢复到JSON列失败。
在这种情况下,奇怪的是,备份表中的列被定义为文本,它实际上应该被限制为64KB。凭直觉,我将备份表的模式更改为MEDIUMTEXT。此后,MySQLdump不再在超过64K的INSERT语句中截断该字符串。
看起来好像MySQLdump不只是输出整个列,而是截断到它认为最大字符串长度应该基于模式信息的任何值,并且在截断时不会发出警告。
https://stackoverflow.com/questions/42379486
复制相似问题