MySQL mysqldump与XtraBackup全量、增量备份完整
【摘要】 一、核心对比:mysqldump vs XtraBackup1.2 适用场景(生产选型核心)mysqldump 适用场景小体量数据库(10G以内)、测试环境、个人学习环境备份需要跨版本、跨平台迁移(SQL文件通用性极强)需要精准备份单库、单表、指定数据的场景临时导出数据、数据核对、离线归档场景缺点致命:大库禁用,备份耗时久、恢复慢,无原生增量,无法满足生产高频备份需求XtraBackup 适...
一、核心对比:mysqldump vs XtraBackup
1.2 适用场景(生产选型核心)
mysqldump 适用场景
-
小体量数据库(10G以内)、测试环境、个人学习环境备份
-
需要跨版本、跨平台迁移(SQL文件通用性极强)
-
需要精准备份单库、单表、指定数据的场景
-
临时导出数据、数据核对、离线归档场景
缺点致命:大库禁用,备份耗时久、恢复慢,无原生增量,无法满足生产高频备份需求
XtraBackup 适用场景
-
生产环境中大型InnoDB数据库(10G以上、百G、TB级)
-
业务7*24小时不停机,需要无锁热备的核心业务
-
需要每日全量+每小时增量高频备份的场景
-
故障快速恢复场景,要求RTO(恢复时间)极短
核心优势:不影响业务、支持增量、备份恢复效率碾压mysqldump,是生产标准备份方案
二、mysqldump 全量备份 + 增量备份(binlog)完整实操
前置条件:MySQL开启binlog日志(生产默认开启),记录binlog日志路径
2.1 mysqldump 无锁全量备份(InnoDB专属)
核心参数说明
-
--single-transaction:InnoDB快照备份,全程无锁,不阻塞业务
-
--master-data=2:记录备份时刻binlog文件名、位置(增量恢复关键)
-
--flush-logs:刷新binlog,生成新日志文件,拆分备份前后日志
-
-q:快速导出,提升备份速度
全量备份命令(生产通用)
# 全库全量备份 mysqldump -uroot -p \ --single-transaction \ --master-data=2 \ --flush-logs \ --all-databases \ --quick \ --default-character-set=utf8mb4 \ > /data/backup/mysql_full_$(date +%F).sql # 单库全量备份(推荐业务使用) mysqldump -uroot -p \ --single-transaction \ --master-data=2 \ --flush-logs \ --quick \ --default-character-set=utf8mb4 \ test_db > /data/backup/testdb_full_$(date +%F).sql
2.2 mysqldump 增量备份(依赖binlog)
mysqldump无原生增量,增量备份本质是:全量备份后,截取新增binlog日志
操作步骤
-
查看全量备份SQL文件,获取备份起始binlog位置
grep -i "change master" /data/backup/testdb_full_2025-08-01.sql输出示例:CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000123', MASTER_LOG_POS=156; -
增量备份:导出该位置之后的所有binlog日志
mysqlbinlog --start-position=156 /var/lib/mysql/mysql-bin.000123 > /data/backup/mysql_inc_$(date +%F_%H%M).sql
2.3 mysqldump 备份恢复流程
-
停止业务,清空故障数据库(避免数据冲突)
-
恢复全量备份文件
mysql -uroot -p < /data/backup/testdb_full_2025-08-01.sql -
恢复增量binlog日志(补全全量备份后新增数据)
mysql -uroot -p < /data/backup/mysql_inc_2025-08-01_1400.sql -
校验数据,重启业务
三、XtraBackup 全量备份 + 增量备份完整实操
前置条件:安装 percona-xtrabackup 工具、MySQL InnoDB引擎、知晓数据库数据目录
工具说明:8.0版本用 xbkup,5.7版本用 innobackupex,下文以生产主流 2.4/8.0 通用语法为例
3.1 XtraBackup 全量备份(热备、无锁)
1. 执行全量备份命令
# 创建备份目录 mkdir -p /data/xtrabackup/full # 全量备份(自动适配MySQL,无锁热备) innobackupex --user=root --password=你的密码 /data/xtrabackup/full/ --no-timestamp
备份成功后,目录下会生成完整的数据库物理文件(ibd、frm、日志文件等)
2. 备份预处理(必须步骤!恢复必备)
作用:统一日志位点、回滚未提交事务、同步数据文件与日志,保证备份可用
innobackupex --apply-log /data/xtrabackup/full/
3.2 XtraBackup 增量备份(核心优势)
增量备份原理:对比上一次备份位点,只备份新增/修改的数据页,体积小、速度快
1. 第一次增量备份(基于全量备份)
mkdir -p /data/xtrabackup/inc1 # --incremental-basedir:指定上一次全量备份目录 innobackupex --user=root --password=你的密码 \ --incremental /data/xtrabackup/inc1 \ --incremental-basedir=/data/xtrabackup/full/ \ --no-timestamp
2. 第二次增量备份(基于上一次增量备份)
mkdir -p /data/xtrabackup/inc2 # 基于上一轮增量备份,持续叠加增量数据 innobackupex --user=root --password=你的密码 \ --incremental /data/xtrabackup/inc2 \ --incremental-basedir=/data/xtrabackup/inc1/ \ --no-timestamp
3. 增量备份预处理(分层合并,关键步骤)
规则:全量备份先apply,增量依次叠加合并,最后整体apply
# 1. 全量备份预处理(仅回滚未提交,不完成最终同步) innobackupex --apply-log --redo-only /data/xtrabackup/full/ # 2. 合并第一次增量到全量 innobackupex --apply-log /data/xtrabackup/full/ --incremental-dir=/data/xtrabackup/inc1/ # 3. 合并第二次增量到全量 innobackupex --apply-log /data/xtrabackup/full/ --incremental-dir=/data/xtrabackup/inc2/ # 4. 最终整体预处理,完成数据一致性同步 innobackupex --apply-log /data/xtrabackup/full/
3.3 XtraBackup 完整恢复步骤(生产标准)
注意:物理恢复会覆盖所有原数据,操作前务必确认!
-
停止MySQL服务
systemctl stop mysqld -
清空原数据库数据目录(避免文件冲突)
rm -rf /var/lib/mysql/* -
执行物理恢复(拷贝备份文件到数据目录)
innobackupex --copy-back /data/xtrabackup/full/ -
修复文件权限(必须!否则MySQL启动失败)
chown -R mysql:mysql /var/lib/mysql -
启动MySQL服务,校验数据
systemctl start mysqld
四、生产备份策略推荐(落地方案)
1. 小型业务/测试库(mysqldump)
-
每日凌晨1点:mysqldump全量备份
-
开启binlog,保留7天日志,用于任意时间点恢复
2. 中大型生产库(XtraBackup)
-
每周日凌晨:XtraBackup 全量备份
-
周一至周六:每4小时 增量备份
-
备份文件异地存储、定期校验备份可用性
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)