我正尝试将从托管公司获得的 MySQL 转储文件导入到我的 Windows 开发机器中,但遇到了问题。
我从命令行导入它,但出现一个非常奇怪的错误:
错误 2005 (HY000) 在第 3118 行:未知 MySQL 服务器主机“╖?*á±dÆ╦N╪Æ·h^ye"π╩i╪ Z+-$▼₧╬Y.∞┌|↕╘l∞/l╞⌂î7æ▌X█XE.ºΓ[ ;╦ï♣éµ♂º╜┤║].♂┐φ9dë╟█'╕ÿG∟═0à¡úè♦╥↑ù♣♦¥'╔NÑ' (11004)
我附上了屏幕截图,因为我假设二进制数据会丢失……
我不太清楚问题是什么,但有两个潜在问题:一是文件大小(2 GB),虽然不是特别大,但也不是特别小;二是这些表格中有许多 JPG 图像(这就是为什么文件大部分是 2 GB 大的原因)。
另外,转储是在 Linux 机器上进行的,我将其导入 Windows,不确定这是否会加剧问题(我知道不应该如此)
现在,我认为二进制垃圾就是为什么文件中的图像可能有问题的原因,但是我过去能够从同一家托管公司导入类似的转储,所以我不确定可能是什么问题。
此外,考虑到它的大小,尝试查看此文件(特别是第 3118 行)几乎是不可能的(我不太擅长使用 grep、sed 等 Linux 命令行工具)。
文件可能已损坏,但我不太清楚如何检查。我下载的是 .gz 文件,我用 WinRar 对其进行了“测试”,它显示文件看起来没问题(我假设 gz 有某种 CRC)。如果您能想到更好的测试方法,我很乐意尝试。
知道可能发生了什么事/如何解决这个错误吗?
我并不是特别在意数据,因为我只想将其作为开发人员的副本,所以如果我必须丢失一些记录,我也可以接受,只要模式保持完好无损。
谢谢!
丹尼尔
答案1
因此我总是使用mysqldump --hex-blob
。
使用此开关重新转储对 blob 进行编码的数据库,它就会起作用。
您可以尝试使用 windows mysql 客户端 IDE(如 sqlyog 或 mysql 管理员)导入它。它曾经对我有用过。
答案2
您不一定需要使用 --hex-blob 选项。我刚刚自己解决了这个问题,问题是我需要将 --max_allowed_packet 设置为足够大的值,以容纳我将加载的最大数据 blob。您的恢复命令应该类似于:
mysql -u user -h hostname --max_allowed_packet=32M dbname < dumpfile.sql
如果您使用 --hex-blob 选项,您将显著增加备份的大小 - 增加 2 倍或更多。注意:要恢复使用上述命令恢复的相同数据,需要在 my.ini(cnf) 中设置 --max_allowed_packet=64M 并重新启动服务器,以及在命令行上将其设置为 64M 以恢复使用 --hex-blob 选项创建的转储。
答案3
由于文件较大,可能仍然会出现问题,因此请确保将 max-allowed-packet 设置为某个高值(mysql 命令的参数)。
答案4
我在从包含二进制数据的 Linux 服务器恢复转储文件时遇到了类似的问题。错误如下ERROR 1064 (42000) at line 551: You have an error in your SQL syntax;
该转储文件可以成功导入Linux服务器,但不能导入Windows。
我尝试使用--hex-blob
选项,--max_allowed_packet
甚至使用管道而不是 .sql 文件传输数据,但没有成功。
我最终通过使用 MySQL Workbench 解决了这个问题,生成的命令如下
Running: mysql.exe --defaults-file="c:\users\admini~1\appdata\local\temp\tmp1fzxkx.cnf" --protocol=tcp --host=localhost --user=root --port=3306 --default-character-set=utf8 --comments --database=platform < "E:\\direcotory\\dump.sql"
然后我尝试--default-character-set=utf8
从命令行进行操作,成功了。希望这对某些人有帮助。