首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用二进制blobs恢复MySQL转储

问使用二进制blobs恢复MySQL转储
EN

Stack Overflow用户
提问于 2017-02-22 06:48:42
回答 2查看 3K关注 0票数 0

我正在将MySQL数据库从一个现在无法访问的服务器移动到一个新的服务器。转储包含的表又包含二进制blob,这似乎会导致MySQL命令行客户端出现问题。在尝试恢复数据库时,我收到以下错误:

代码语言:javascript
复制
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系统变量增加到其最大值-在服务器和客户端上-但都无济于事。

EN

回答 2

Stack Overflow用户

发布于 2017-02-22 07:53:18

如果我没记错的话,您需要将my.cnf中的max_allowed_packet设置为足以容纳转储文件中最大的数据blob的值,然后重新启动MySQL服务器。

然后,可以使用如下所示的恢复命令:

代码语言:javascript
复制
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]

票数 0
EN

Stack Overflow用户

发布于 2017-04-28 01:01:43

没有解决方案,只是确认我看到了包含长JSON字符串的"text“字段类型的相同行为。MySQLdump生成的SQL (备份)文件有一条INSERT语句,它将该特定文本字段的长度截断为“大约”64K (有许多转义引号/双引号和各种UTF-8字符)-而不会发出这样的截断发生的警告。

自然,由于JSON格式化字符串过早终止,恢复到JSON列失败。

在这种情况下,奇怪的是,备份表中的列被定义为文本,它实际上应该被限制为64KB。凭直觉,我将备份表的模式更改为MEDIUMTEXT。此后,MySQLdump不再在超过64K的INSERT语句中截断该字符串。

看起来好像MySQLdump不只是输出整个列,而是截断到它认为最大字符串长度应该基于模式信息的任何值,并且在截断时不会发出警告。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42379486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档