mysql如何解决迁移过程中网络抖动导致的失败_使用断点续传工具

千枫酱_4671

千枫酱_4671

2026-04-27

1066人浏览

原创

MySQL迁移断点续传最稳方案是mydumper+myloader:mydumper按表切分并记录快照位点,myloader通过--resume跳过已成功导入的非空表,但需人工或自动化校验数据一致性。

mysql如何解决迁移过程中网络抖动导致的失败_使用断点续传工具

MySQL 迁移中断后,mysqldump 本身不支持断点续传

直接用 mysqldump + mysql 管道或分步导入时,网络抖动导致连接重置,会直接失败——因为 mysqldump 输出的是单一流式 SQL,没有事务边界标记,也没校验位点。重连后无法知道“最后成功执行到哪条 INSERT”。强行续跑会重复写入或跳过数据。

用 mydumper + myloader 实现表级断点续传

mydumper 把库拆成多个文件(每张表一个 .sql,外加 metadata 记录快照位点),myloader 支持 --resume 参数跳过已成功导入的表。这是目前 MySQL 生态中落地最稳的断点方案。

  • mydumper -h src -u user -p pass -B db1 -o /backup/db1/ --chunk-filesize=64:按大小切分大表,避免单文件过大拖慢恢复
  • 迁移中途失败后,检查 /backup/db1/ 下哪些 .sql 文件对应的目标表已存在且行数匹配(可查 information_schema.tables)
  • 重试时加 myloader -h dst -u user -p pass -B db1 -d /backup/db1/ --resume --threads=4,它会自动跳过目标库中已存在的非空表
  • 注意:--resume 只判断表是否存在且非空,不校验数据一致性;大表建议配合 --chunk-filesize 和 --enable-binlog 避免主从延迟突增

网络层加固:用 mosh 或 tmux + ssh -o ServerAliveInterval=30

单纯靠应用层续传不够,得先减少中断频次。SSH 默认超时机制对长时 dump 不友好,容易因 TCP idle 被中间设备断连。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • 不用裸 ssh,改用 ssh -o ServerAliveInterval=30 -o ServerAliveCountMax=3 user@host,主动保活
  • 进远程终端后先启 tmux,再跑 mydumper;断线重连后 tmux attach 即可继续看日志,进程其实没丢
  • mosh 不适用 MySQL 迁移场景——它不支持端口转发,无法穿透跳板机连内网 DB,且不保证 TCP 顺序,不适合传输大 SQL 流

真正关键的不是“怎么续”,而是“怎么知道续对了”

断点续传最大的坑是误判成功状态:比如某张表导入一半失败,但目标库已建好空表,myloader --resume 就会跳过它,导致数据丢失。必须人工核验或加自动化检查。

  • 每次运行 myloader 前,用 ls /backup/db1/*.sql | sed 's/\.sql$//' | xargs -I{} mysql -h dst -Nse "SELECT COUNT(*) FROM db1.{}" 扫一遍目标表行数,和源库 SELECT table_rows FROM information_schema.tables 对比
  • 对关键表,导出前在源库打 FLUSH TABLES WITH READ LOCK + SHOW MASTER STATUS,记录 binlog 位置;恢复后用 pt-table-checksum 做行级比对
  • mydumper 的 metadata 文件里有 Started dump at: 时间戳,但它不等于 GTID 或 binlog 位点,不能直接用于主从追平

断点续传能救流程,但救不了数据一致性。网络抖动只是表象,背后往往是没做限流、没压测、没校验的迁移准备。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.20

2433

6

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

2023.06.21

1479

5

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.18

875

5

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.19

3432

5

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.25

5908

4

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

2023.08.08

1279

3

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.11

6171

4

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

2023.08.14

5322

7

mysql事务隔离级别
mysql事务隔离级别

mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

2023.08.16

7174

11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL vs MySQL
PostgreSQL vs MySQL

共1课时 | 193人学习