我正在使用 mysql 5.0.5 版本并尝试转储我的数据,以便为版本升级做准备,但出现错误。
我跑:
./mysqldump -u root -p --add-drop-table --all-databases > /data/all_db_dump.mysql
并得到:
mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `abc` at row: 408640
我回顾了一些类似的问题并找到了一些建议:
- 运行
--skip-extended-insert
- 没有帮助 - 运行
--hex-blob
- 没有帮助 - 配置
max_allowed_packet
为 1024M - 没有帮助(我有 4 GB RAM) - 配置
net_read_timeout
为 7200 - 没有帮助 - 配置
net_write_timeout
为 7200 - 没有帮助
对于以上所有内容,都会出现相同的错误。
我在转储数据时监视了服务器的内存,没有发现任何问题。可能是什么问题?
考虑到您已经在 GLOBAL 级别而不是会话级别设置了超时、数据包和其他变量,我能想到的其他选项很少。
选项 1:验证表损坏
分析和修复表“abc”以验证 myisam 引擎是否损坏。(如果可能,还可以考虑将表迁移到 innodb)识别表损坏的另一种方法是从这些表中选择数据(行:408640),您应该会收到错误消息,否则 MySQL 也可能会关闭。
关于您要实现的目标的建议(以防您无法使 mysqldump 工作):
您也可以通过就地升级方法升级 MySQL。步骤如下:
停止 MySQL 服务器(使用 innodb_fast_shutdown=0)并复制完整的 datadir 文件夹作为备份(替代 mysqldump,以防出现任何问题)
将 MySQL 二进制文件 (/basedir/bin/) 升级(替换)为您要升级到的版本的二进制文件
像往常一样启动 MySQL 服务器并执行 mysql_upgrade
笔记 :
如果您的数据量太大,就地升级比逻辑转储快得多
将 Ie 5.0 升级到 5.6 时不要跳过主要版本相反,您必须执行 5.0 -> 5.5 -> 5.6
还有一件事,当你使用 mysqldump 转储时,你需要生成 .sql 文件而不是 .mysql 文件(all_db_dump.sql)