在 Windows 中导入包含二进制 BLOB 的大型 MySQL 转储文件时出错

Dan*_*ola 14 mysql binary import

我正在尝试将我从托管公司获得的 MySQL 转储文件导入我的 Windows 开发机器,但我遇到了问题。

我正在从命令行导入它,但出现了一个非常奇怪的错误:

ERROR 2005 (HY000) at line 3118: Unknown MySQL server host '??*á±dÆ?N?Æ·h^ye"??i? Z+-$???Y.??|??l?/l ??î7æ?X?XE.º?[;?ï?éµ?º???].???9dë??'?ÿG??0à¡úè???ù??¥'?NÑ' (11004) )

替代文字

我附上截图是因为我假设二进制数据会丢失......

我不太确定问题是什么,但两个潜在的问题是文件的大小 (2 Gb),它不是特别大,但也不是特别小,另一个是这些表中的许多都有其中的 JPG 图像(这就是为什么文件在大多数情况下是 2Gb 大的原因)。
此外,转储是在 Linux 机器中进行的,我正在将其导入 Windows,不确定这是否会增加问题(我知道不应该)

现在,二进制垃圾就是我认为文件中的图像可能有问题的原因,但我过去能够从同一托管公司导入类似的转储,所以我不确定可能是什么问题。

此外,考虑到它的大小,试图查看这个文件(尤其是第 3118 行)是不可能的(我对 Linux 命令行工具如 grep、sed 等不是很方便)。

该文件可能已损坏,但我不确定如何检查它。我下载的是一个 .gz 文件,我用 WinRar“测试”了它,它说它看起来不错(我假设 gz 有某种 CRC)。如果你能想到更好的方法来测试它,我很乐意尝试。

任何想法可能会发生什么/如何克服这个错误?

我对数据并不是特别感兴趣,因为我只想将其作为开发人员的副本,所以如果我不得不丢失一些记录,我可以接受,只要模式保持完美。

谢谢!
丹尼尔

Pau*_*aul 19

出于这个原因,我总是使用mysqldump --hex-blob.

使用此开关重新转储对 blob 进行编码的数据库,它将起作用。

您可以尝试使用 Windows mysql 客户端 IDE(如 sqlyog 或 mysql 管理员)导入它。它对我有用过一次。


Bob*_*b C 7

您不一定需要使用 --hex-blob 选项。我刚刚自己解决了这个问题,问题是我需要将 --max_allowed_pa​​cket 设置为足够大的值以容纳我将加载的最大数据 blob。您的恢复命令应该类似于:

mysql -u user -h hostname --max_allowed_packet=32M dbname < dumpfile.sql
Run Code Online (Sandbox Code Playgroud)

如果您使用 --hex-blob 选项,您将显着增加备份的大小 - 2 倍或更多。注意:要恢复我使用上述命令恢复的相同数据,需要在 my.ini(cnf) 中设置 --max_allowed_pa​​cket=64M 并重新启动服务器以及在命令行上将其设置为 64M 以恢复创建的转储--hex-blob 选项。