mysql数据迁移过程如何降低性能影响_采用增量备份与多线程同步

夜枫酱_1572

夜枫酱_1572

2026-03-26

559人浏览

原创

mysqldump全量备份导致cpu和io突增,应加--single-transaction(innodb)、ionice或pv限流、避开高峰;增量用mysqlbinlog按时间或position解析row格式binlog;多线程同步需按库分发并禁用外键检查;续传推荐gtid或持久化position。

mysql数据迁移过程如何降低性能影响_采用增量备份与多线程同步

mysqldump 做全量备份时 CPU 和 IO 突增怎么办

直接用 mysqldump 拉全库,尤其在业务高峰期,会抢光磁盘 IO 和 CPU 资源,导致主库响应变慢甚至超时。它默认单线程、全表锁(对 MyISAM)或长事务(对 InnoDB),不是“安静干活”的类型。

  • --single-transaction(仅 InnoDB)避免锁表,但会拉长事务视图,可能拖慢其他长查询
  • --skip-lock-tables 配合 --single-transaction,别单独用——否则可能丢数据
  • 限制 IO:Linux 下用 ionice -c2 -n7 降级调度优先级,或 pv -L 20m 控制输出流速(需管道接入)
  • 避开高峰:全量备份尽量选凌晨低峰,且提前确认 binlog 位置(SHOW MASTER STATUS),为后续增量对齐打基础

如何从 binlog 拉出指定时间段的增量 SQL

mysqlbinlog 解析,不是“导出就完事”,时间点、GTID、格式三者不匹配就会跳过或报错。

  • 先确认 binlog 格式是 ROWSELECT @@binlog_format),STATEMENT 模式下部分语句无法精确重放
  • --start-datetime--stop-datetime 最直观,但注意时区——必须和 MySQL 服务器时区一致(查 SELECT @@system_time_zone
  • 更稳的方式是用 --start-position / --stop-position,位置号来自 SHOW BINLOG EVENTS 或上一次全量备份记录的 Position
  • 加上 --base64-output=DECODE-ROWS -v 可读性高,但体积大;线上用建议去掉 -v,只保留 --base64-output=DECODE-ROWS 防乱码

多线程同步时为什么数据会乱序或重复

MySQL 原生不支持多线程回放 binlog,所谓“多线程同步”本质是分库/分表后并行导入,一旦跨表关联或存在外键约束,顺序一乱,INSERT 就失败或数据错位。

MySQL
MySQL

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

下载
  • 按库拆分最安全:mysqlbinlog ... | grep "^USE `db1`" -A 1000 | mysql -u... db1 这类手动切分要谨慎,grep 容易截断语句
  • 推荐用 mydumper + myloader:它按表导出,myloader -t 4 启 4 线程导入,且自动处理建表顺序和外键禁用
  • 别对单表开多线程——即使表很大,myloader 对单表仍是串行执行,强行拆分 insert 会导致主键冲突或唯一键报错
  • 所有线程共用同一个目标库时,务必在导入前执行 SET FOREIGN_KEY_CHECKS=0SET UNIQUE_CHECKS=0,导入完成再恢复

增量同步中断后怎么续传不丢不重

靠人工记 position 或 datetime 续传极不可靠,错一位、差一秒,轻则漏数据,重则主从不一致。真正能落地的是用 GTID + mysqlbinlog --exclude-gtids 或专用工具状态追踪。

  • 如果开了 GTID(gtid_mode=ON),用 mysqlbinlog --exclude-gtids="aaa-bbb-ccc:1-100" 跳过已处理事务,比位置更鲁棒
  • 但注意:GTID 不跨集群复制,若迁移目标是新实例且未开启 GTID,就别依赖它——得老实用 position
  • 每次增量同步完成后,把最新 position 写入一个独立小表(如 meta.sync_position)或本地文件,下次启动前读取,而不是靠日志里找最后一行
  • 不要用 mysqlbinlog --to-last-log 直接追到末尾——万一 binlog 切了,它会报错退出,必须配合 --read-from-remote-server 动态连接读取

真正麻烦的不是命令怎么写,而是全量和增量之间那个“时间窗口”怎么卡准:备份结束时刻的 binlog position 必须和第一个增量起始点严丝合缝,差一条,就可能丢用户刚提交的订单。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

相关标签:

mysql

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

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

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

2023.06.20

1933

6

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

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

2023.06.21

1199

5

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

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

2023.07.18

695

5

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

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

2023.07.19

2532

5

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

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

2023.07.25

4148

4

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

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

2023.08.08

979

3

sqlserver和mysql区别
sqlserver和mysql区别

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

2023.08.11

4411

4

mysql忘记密码
mysql忘记密码

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

2023.08.14

3982

7

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

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

2023.08.16

5134

11

热门下载

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

精品课程

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

共1课时 | 171人学习

使用phpenv集成环境安装极致CMS
使用phpenv集成环境安装极致CMS

共2课时 | 274人学习