加速mysql备份和恢复


链接:https://www.zhihu.com/question/20334428/answer/110981915
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

使用mysqldump备份时一般会会加上--single-transaction参数,这里假设你是加了这个参数。

一 加速备份
1 加了single-transaction参数 备份时 需要先flush table with read lock 这个过程中会有一个锁表的过程,如果有事务或语句正在执行,没有结束,那么备份进程会一直等待,并且阻塞别的事务,那么也会影响业务。所以要先确认备份的时候没有大的事务在运行。
具体 single-transaction的加锁可以参考 我的博客:mysqldump备份时加single-transaction会不会加锁
2 mysqldump是单进程的,没有办法并行,但现在机器的瓶颈多是出现在IO方面,可以使用更了的IO设备加快速度
3 mysqldump时如果空间够的话,不要边压缩边备份

二 加速恢复
1 关闭binlog:不写入Binlog会大大的加快数据导入的速度
2 innodb_flush_log_at_trx_commit=0
3 更好的配置

建议:
一 如果非要使用逻辑备份,可以考虑mysqldumper, mysqlpump(5.7)这两个工具去备份,这两个在备份的时候支持并行操作,mysqldumper还可以对单表进行恢复,在只需要恢复单表的情况下,恢复速度会大大加快
二 使用物理备份 xtrabackup (open source),MEB(oracle提供,收费): 他们的备份原理是基于mysql crash recover, 备份速度 是和逻辑备份的相差不太大。但是恢复速度却有很大的提升。

逻辑备份 备出来的是sql语句文件,恢复时需要一条一条的执行sql,所以恢复很慢。
而物理备份和还原的速度 相当于直接copy文件,所以恢复的时候性能有很大的提升
并且这两个软件还支持并行,效果更好。

逻辑备份最大的优点是 备份好的文件经压缩后占用空间较小,最大缺点恢复太慢
物理备份可以很快的恢复,但是备份好的文件压缩后占用空间比逻辑备份要大。



mysqldump --all-databases --master-data=2 --single-transaction --quick -R --events -uroot > /tmp/full.sql

通过根踪可以看到:
8 Connect root@localhost on
8 Query
8 Query
8 Query FLUSH TABLES
8 Query FLUSH TABLES WITH READ LOCK
8 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
8 Query START TRANSACTION
8 Query SHOW VARIABLES LIKE 'gtid\_mode'
8 Query SHOW MASTER STATUS
8 Query UNLOCK TABLES

从红色部分可以看出,还是会加锁的,在这个过程中,别的session同样不能进行dml, 只是加锁的时间很短。


使用single-transaction时要求:
1 只对支持事务的存储引擎有效果
2 不能执行ddl操作,因为 ddl操作会改变字典表,而字典表多数是myisam的
3 事务隔离级别为 RR

mysqldump备份时,加和不加single-transaction的区别:
通过打开general_log可以看到过程:
1 加single-transaction时,是通过START TRANSACTION 的方式来实现的。
  里面同时有很多savepoint,
2 不加single-trsnsaction是通过在整个过程中锁表实现数据一致性的。


 
左图为加single-transaction,右图未加:

mysqldump备份时加single-transaction会不会加锁


<think>好的,用户的问题是关于MySQL的并发备份快速恢复的最佳实践。我需要先理解这两个概念。并发备份应该是指同时进行多个备份任务,或者备份过程中允许其他操作继续进行,而快速恢复则涉及如何高效地将备份数据还原。首先,回顾之前提供的引用内容。引用1提到MySQL备份方法分为逻辑备份物理备份,工具包括mysqldump、MySQL EnterpriseBackup等。引用23详细说明了逻辑备份物理备份恢复方法,比如使用mysql命令导入sql文件,或者用xtrabackup进行物理恢复。引用4解释了全量增量备份的区别。用户现在需要的是并发备份快速恢复的方案。首先,逻辑备份mysqldump通常是单线程的,可能无法并发,但物理备份工具如xtrabackup支持多线程。例如,xtrabackup的--parallel选项可以加速备份。此外,可能还需要考虑备份时的锁机制,比如是否允许读写操作,避免长时间锁定影响业务。关于并发备份,可能需要分步骤:选择支持并发的工具,配置并行参数,结合全量增量备份策略以减少备份时间。对于快速恢复,物理备份通常比逻辑备份快,因为直接复制文件,而不是执行SQL语句。此外,并行恢复可能通过工具的多线程功能实现,比如mysqlpump导入时使用--parallel-schemas选项。另外,用户可能需要考虑备份压缩网络传输优化,比如使用管道压缩或分流,减少备份文件大小传输时间。还有,备份验证恢复测试的重要性,确保备份有效,并且恢复过程可靠。需要确认是否有其他因素影响,比如存储类型(SSDvs HDD),网络带宽,数据库大小等。可能还要提到分布式备份策略,将备份存储在不同节点,提高容灾能力。最后,整理步骤:1.选择支持并发的备份工具;2.配置并行参数压缩;3.使用物理备份加速恢复;4.结合全量增量备份;5.定期测试恢复流程。同时,结合引用中的工具最佳实践,如xtrabackup、mydumper等,确保回答有依据。</think>### MySQL并发备份与快速恢复最佳实践 #### 一、并发备份实现方案 1. **物理备份工具选择** - **Percona XtraBackup**:支持多线程并行备份(`--parallel`参数),直接复制数据文件,备份期间允许读写操作[^3]。 示例命令: ```bash xtrabackup --backup --parallel=4 --target-dir=/path/to/backup ``` - **MySQL Enterprise Backup**:提供多线程压缩并行备份功能,适合企业级高并发场景[^1]。 2. **逻辑备份优化** - **mydumper**:替代单线程的`mysqldump`,支持表级并发导出(`-t`参数指定线程数)[^3]。 示例命令: ```bash mydumper -u root -p password -B mydb -t 8 -o /backup_dir ``` - **mysqlpump**(MySQL 5.7+):支持并行导出多个数据库或表(`--parallel-schemas`参数)[^3]。 3. **增量备份结合全量备份** - 使用`xtrabackup`执行全量备份后,定期通过`--incremental`参数生成增量备份,减少备份时间[^4]。 示例增量命令: ```bash xtrabackup --backup --incremental --target-dir=/inc_backup --incremental-basedir=/full_backup ``` #### 二、快速恢复优化策略 1. **物理备份恢复加速** - **并行复制数据文件**:通过`xtrabackup`的`--parallel`参数加速恢复: ```bash xtrabackup --prepare --apply-log-only --target-dir=/full_backup xtrabackup --copy-back --parallel=4 --target-dir=/full_backup ``` - **直接替换数据目录**:物理备份文件可直接替换MySQL数据目录(需停机)[^2]。 2. **逻辑备份恢复优化** - **并发导入**:使用`myloader`(与`mydumper`配套)多线程导入数据: ```bash myloader -u root -p password -d /backup_dir -t 8 ``` - **管道压缩解压**:结合压缩工具减少I/O耗时: ```bash gunzip < backup.sql.gz | mysql -u root -p mydb ``` 3. **分布式存储加速** -备份文件存储在SSD或分布式文件系统(如NFS、Ceph),提升读写速度[^4]。 #### 三、关键实践建议 1. **备份验证与监控** - 定期执行恢复测试,验证备份完整性。 - 监控备份任务耗时资源占用(CPU、I/O)。 2. **混合备份策略** - 每日全量备份 + 每小时增量备份,平衡存储成本与恢复速度[^4]。 3. **锁机制控制** - 使用`xtrabackup`的`--lock-ddl-per-table`参数避免DDL冲突[^3]。 #### 四、示例流程 ```bash # 并发全量备份 xtrabackup --backup --parallel=8 --target-dir=/backup_full # 增量备份 xtrabackup --backup --incremental --target-dir=/backup_inc1 --incremental-basedir=/backup_full # 并行恢复 xtrabackup --prepare --apply-log-only --target-dir=/backup_full xtrabackup --prepare --apply-log-only --target-dir=/backup_full --incremental-dir=/backup_inc1 xtrabackup --copy-back --parallel=8 --target-dir=/backup_full ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值