数据库教程FGMT39‑MySQL8.4/9.7数据库备份恢复综合项目

举报
风哥数据库教程 发表于 2026/09/15 11:17:58 2026/09/15
【摘要】 数据库教程FGMT39‑MySQL8.4/9.7数据库备份恢复综合项目 前言数据是业务系统最核心资产,备份与恢复是DBA的核心岗位职责。MySQL8.4为LTS长期支持版本,MySQL9.7为新一代LTS版本,两个版本在认证插件、系统字典、备份工具行为、系统变量上存在不少差异。风哥教程本文以fgedu‑net‑cn1(MySQL8.4实例)、fgedu‑net‑cn2(MySQL9.7实例)...

数据库教程FGMT39‑MySQL8.4/9.7数据库备份恢复综合项目

前言

数据是业务系统最核心资产,备份与恢复是DBA的核心岗位职责。MySQL8.4为LTS长期支持版本,MySQL9.7为新一代LTS版本,两个版本在认证插件、系统字典、备份工具行为、系统变量上存在不少差异。风哥教程本文以fgedu‑net‑cn1(MySQL8.4实例)、fgedu‑net‑cn2(MySQL9.7实例)两台主机作为实验环境,硬件规格统一8CPU、64GB内存,所有数据路径统一为/fgedudb;实例名、业务数据库名、业务账号统一使用fgedudbfgedudbfgedu

风哥教程本文完整覆盖备份恢复理论体系、逻辑备份工具(mysqldump、mysqlpump、mydumper、MySQL Shell Dump)、物理备份工具(XtraBackup、mysqlbackup企业备份工具)、全量备份、增量备份、压缩备份、加密备份、部分备份、时间点PITR恢复、异机恢复、数据迁移、备份校验、生产自动化备份脚本、故障演练、备份策略设计;案例各占50%分别演示MySQL8.4、MySQL9.7环境,同时梳理两个版本之间备份恢复的兼容性差异。

风哥教程本文面向数据库DBA、运维工程师、数据库架构师、云计算工程师,学习完成之后,能够独立完成生产环境备份方案设计、备份实施、恢复演练、故障数据抢救工作。

本文内容大纲

  1. MySQL备份恢复基础理论、备份分类与业务RPO/RTO指标
  2. MySQL8.4与MySQL9.7备份恢复关键差异点
  3. 备份账号权限规划、主机目录环境准备(fgedu‑net‑cn1、fgedu‑net‑cn2)
  4. 逻辑备份实战:mysqldump(MySQL8.4案例)
  5. 逻辑备份实战:mysqlpump、mydumper(MySQL9.7案例)
  6. MySQL Shell Dump工具逻辑导出导入综合实战
  7. 物理备份实战:Percona XtraBackup全备、增量、压缩、恢复(MySQL8.4案例)
  8. 物理备份实战:mysqlbackup企业备份工具安装、image镜像备份、目录备份(MySQL9.7案例)
  9. mysqlbackup压缩备份、加密备份、部分备份、image与目录格式转换实战
  10. mysqlbackup增量备份、单表选择性恢复实战
  11. 增量备份恢复实战,结合binlog实现时间点PITR恢复(8.4、9.7双版本)
  12. 异机恢复、数据库迁移完整实操案例
  13. 备份校验、备份有效性验证方法论
  14. 生产自动化备份shell脚本、定时任务规划
  15. 典型故障场景恢复演练:误删库、误删表、误更新数据
  16. 生产环境备份策略方案设计、备份运维规范
  17. 风哥针对本文总结

一、MySQL备份恢复基础理论、备份分类与业务RPO/RTO指标

备份的本质是生成数据副本,用于硬件故障、人为误操作、数据损坏、勒索病毒、版本升级失败等场景下的数据恢复。评估备份体系两大核心指标RPO(恢复点目标)、RTO(恢复时间目标)。

  • RPO:故障发生后最多允许丢失多少数据;例如RPO=5分钟,代表最多允许丢失5分钟业务数据,依赖binlog持续归档。
  • RTO:故障发生之后业务恢复的时间窗口,不同备份工具RTO差异巨大,物理备份恢复速度远快于逻辑备份。

1.1 备份大类划分

逻辑备份

逻辑备份导出SQL语句或者文本数据,保存表结构、数据、存储过程、触发器、事件;备份输出为可读SQL文件。

优点:跨版本、跨平台兼容性强,恢复粒度灵活,可以单库单表恢复;不需要和原实例硬件架构一致。
缺点:备份恢复消耗CPU,大库速度慢;恢复时需要重新执行SQL,生成索引;大库场景RTO较高。
代表工具:mysqldump、mysqlpump、mydumper、MySQL Shell dump util。

物理备份

直接复制InnoDB、MyISAM底层数据文件、redo log、undo log、系统字典文件,属于块级备份。

优点:备份恢复速度快,适合TB级大数据库;备份期间SQL解析开销低。
缺点:多数情况下MySQL大版本之间不能直接混用物理备份集;对操作系统、MySQL版本有约束;恢复需要完整替换数据目录。
代表工具:Percona XtraBackup开源工具、mysqlbackup(MySQL企业版MEB)。

1.2 按照备份数据范围划分

  1. 全量备份:实例全部数据完整复制;每次备份完整数据集,占用存储空间大,恢复基底。
  2. 增量备份:只备份从上一次备份(无论全备/增备)之后发生变更的数据页;备份集体积小;恢复需要依次叠加全量+所有增量备份集。
  3. 差异备份:备份自上一次全量备份之后所有变更数据页;只需要全量+最后一份差异备份即可恢复,管理复杂度低于增量。

1.3 按照备份执行时数据库状态

  1. 热备份(Online Hot Backup):数据库正常读写业务不中断,InnoDB支持热备,业务DML可以正常执行;XtraBackup、mysqlbackup属于热备工具。
  2. 温备份:备份过程短暂获取全局读锁,不阻塞读,阻塞写;mysqldump --single‑transaction属于InnoDB温备,不锁InnoDB表,MyISAM表仍然会锁表。
  3. 冷备份(Offline Cold Backup):数据库实例完全停止之后复制数据文件;业务必须停机,适合测试环境,极少用于生产OLTP业务。

1.4 binlog二进制日志的角色

无论逻辑备份还是物理备份,全量备份只能恢复到备份完成时刻;想要实现时间点恢复PITR,必须开启binlog并且持续归档binlog文件。全量备份+binlog归档组合,才是生产完整的备份体系,缺一不可。

风哥 itpux‑com

1.5 MySQL8.4与MySQL9.7备份恢复关键差异

风哥梳理两个版本对于备份恢复影响较大变更点,实操过程必须重点关注:

  1. 认证插件:MySQL8.4已经移除mysql_native_password;MySQL9.7同样不再支持,所有备份账号必须使用caching_sha2_password;老旧备份客户端不支持会直接报认证失败。
  2. 系统字典:MySQL8.4、9.7使用统一数据字典,物理备份不能跨大版本直接恢复;8.4物理备份集不能直接拷贝到9.7实例启动,反之亦然,只能使用逻辑备份做跨版本迁移。
  3. 复制语法:废弃master/slave关键字,改为source/replica;备份集内部记录binlog位置信息字段名称发生变化。
  4. 系统变量废弃:expire_logs_days废弃,统一使用binlog_expire_logs_seconds;备份脚本、配置文件需要适配。
  5. mysqlbackup工具版本必须和MySQL服务大版本严格匹配:mysqlbackup8.4用于MySQL8.4;mysqlbackup9.7用于MySQL9.7,不可混用。
  6. 权限变化:物理备份账号必须授予BACKUP_ADMIN权限,缺少该权限会造成mysqlbackup备份失败。
  7. MySQL9.7加强数据字典校验,恢复完成后建议执行实例完整性校验。

二、备份账号权限规划、主机目录环境准备

实验环境两台主机fgedu‑net‑cn1(MySQL8.4)、fgedu‑net‑cn2(MySQL9.7),硬件8CPU/64G内存;所有备份文件统一存放路径/fgedudb/backup,区分全量目录、增量目录、binlog归档目录、备份临时目录。

2.1 创建操作系统目录(两台主机均执行root账号)

mkdir -p /fgedudb/backup/full
mkdir -p /fgedudb/backup/incr
mkdir -p /fgedudb/backup/binlog_arch
mkdir -p /fgedudb/backup/tmp
chown -R mysql:mysql /fgedudb/backup
chmod 750 -R /fgedudb/backup
ls -ld /fgedudb/backup/*

2.2 创建数据库备份账号backup_admin(MySQL8.4 fgedu‑net‑cn1)

MySQL8.4已经无mysql_native_password,默认使用caching_sha2_password。

CREATE USER 'backup_admin'@'localhost' IDENTIFIED BY 'Backup@Fgedu123';
GRANT SELECT, BACKUP_ADMIN, RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backup_admin'@'localhost';
FLUSH PRIVILEGES;
SHOW GRANTS FOR backup_admin@localhost;

2.3 创建数据库备份账号backup_admin(MySQL9.7 fgedu‑net‑cn2)

MySQL9.7同样需要BACKUP_ADMIN权限,物理备份工具mysqlbackup依赖该权限获取一致性快照信息。

CREATE USER 'backup_admin'@'localhost' IDENTIFIED BY 'Backup@Fgedu123';
GRANT SELECT, BACKUP_ADMIN, RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backup_admin'@'localhost';
FLUSH PRIVILEGES;

风哥教程 113257174

2.4 业务测试数据准备,用于后续备份恢复演练

两台实例分别创建业务库fgedudb,导入测试表与测试数据,模拟真实业务负载。

CREATE DATABASE IF NOT EXISTS fgedudb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci;
USE fgedudb;
CREATE TABLE t_fgedu_biz(
id BIGINT AUTO_INCREMENT PRIMARY KEY,
biz_name VARCHAR(200),
create_time DATETIME
)ENGINE=InnoDB;
INSERT INTO t_fgedu_biz(biz_name,create_time) VALUES
('order_biz_01',NOW()),
('pay_biz_02',NOW()),
('user_biz_03',NOW());
SELECT * FROM fgedudb.t_fgedu_biz;

三、逻辑备份实战:mysqldump(MySQL8.4 fgedu‑net‑cn1案例)

mysqldump是MySQL原生自带逻辑备份工具,生成SQL文本备份集,适合中小库、跨版本迁移、单库单表恢复场景;MySQL8.4环境完整演示全套参数。

3.1 mysqldump关键参数说明

  • --single‑transaction:InnoDB一致性快照,依靠MVCC获取备份快照,不锁InnoDB表;MyISAM仍然会锁表。
  • --master‑data=2:以注释方式记录备份时刻binlog文件名与position,用于后续PITR时间点恢复。
  • --routines --events --triggers:备份存储过程、事件、触发器,很多运维人员容易遗漏该参数。
  • --flush‑logs:备份完成刷新binlog,开启新binlog文件,方便归档。
  • --skip‑tz‑utc:避免时区导致时间字段恢复异常。

3.2 MySQL8.4实例全实例逻辑备份,输出压缩sql文件

cd /fgedudb/backup/full
mysqldump -u backup_admin -p'Backup@Fgedu123' -S /fgedudb/fgedudb‑data/mysql.sock \
--all‑databases --single‑transaction --master‑data=2 --routines --events --triggers \
--flush‑logs --skip‑tz‑utc --force | gzip > fgedudb_all_$(date +%Y%m%d_%H%M%S).sql.gz
ls -lh /fgedudb/backup/full

3.3 仅备份业务库fgedudb(不备份mysql系统库)

cd /fgedudb/backup/full
mysqldump -u backup_admin -p'Backup@Fgedu123' -S /fgedudb/fgedudb‑data/mysql.sock \
--databases fgedudb --single‑transaction --master‑data=2 --routines --triggers --events \
--skip‑tz‑utc > fgedudb_db_$(date +%Y%m%d_%H%M%S).sql

3.4 单表备份演练,备份t_fgedu_biz表

mysqldump -u backup_admin -p'Backup@Fgedu123' -S /fgedudb/fgedudb‑data/mysql.sock \
fgedudb t_fgedu_biz > /fgedudb/backup/full/fgedudb_t_fgedu_biz.sql

3.5 mysqldump备份集恢复操作实战MySQL8.4

模拟故障,删除业务库,执行恢复演练:

DROP DATABASE fgedudb;
SHOW DATABASES;

解压备份集并且执行恢复:

cd /fgedudb/backup/full
gunzip fgedudb_all_20260915_100000.sql.gz
mysql -u root -p -S /fgedudb/fgedudb‑data/mysql.sock < fgedudb_all_20260915_100000.sql

登录校验数据:

USE fgedudb;
SELECT * FROM t_fgedu_biz;

网上搜索风哥教程可以学习全套数据库教程

四、逻辑备份实战:mysqlpump、mydumper(MySQL9.7 fgedu‑net‑cn2案例)

mysqlpump为MySQL官方并行逻辑导出工具;mydumper为开源第三方高性能逻辑备份工具,支持多线程导出、元数据分离、压缩、过滤,大库场景性能优于mysqldump;本节主机fgedu‑net‑cn2 MySQL9.7实例。

4.1 mysqlpump并行备份MySQL9.7全实例

mysqlpump支持–parallel‑schemas多库并行导出,注意MySQL9.7账号认证为caching_sha2_password,客户端版本必须支持。

cd /fgedudb/backup/full
mysqlpump -u backup_admin -p'Backup@Fgedu123' -S /fgedudb/fgedudb‑data/mysql.sock \
--all‑databases --parallel‑schemas=4 --routines --events --triggers \
--master‑data=2 --skip‑tz‑utc --compress‑output > fgedudb_pump_all_$(date +%Y%m%d_%H%M%S).sql.zst
ls -lh /fgedudb/backup/full

参数说明:--parallel‑schemas=4开启4个并行线程导出不同数据库;--compress‑output输出压缩备份文件。

mysqlpump恢复命令示例:

mysql -uroot -p -S /fgedudb/fgedudb‑data/mysql.sock < fgedudb_pump_all_20260915_101000.sql.zst

4.2 mydumper工具安装与MySQL9.7备份实战

mydumper需要提前编译安装依赖库,适用于大库多线程逻辑备份。

#mydumper备份,4线程,输出目录模式
cd /fgedudb/backup/full
mydumper -u backup_admin -p 'Backup@Fgedu123' -S /fgedudb/fgedudb‑data/mysql.sock \
--threads=4 --all‑databases --routines --events --triggers --use‑savepoints \
--output‑dir=./mydumper_fgedudb_$(date +%Y%m%d_%H%M%S)
ls -ld mydumper_fgedudb_*

mydumper恢复使用myloader工具:

myloader --directory=./mydumper_fgedudb_20260915_102000 \
-u root -p'Root@Fgedu123' -S /fgedudb/fgedudb‑data/mysql.sock --threads=4

mydumper输出为目录结构,每个表的表结构、数据分开保存;恢复时可以选择只恢复某一个数据库或者某一张表,恢复粒度灵活。

风哥数据库教程 itpux‑com

五、MySQL Shell Dump工具逻辑导出导入综合实战

MySQL Shell内置dump工具是官方新一代逻辑备份工具,支持多线程、压缩、进度记录、断点续导、直接导出到对象存储,同时兼容MySQL8.4与MySQL9.7,是官方推荐的逻辑迁移工具。分别演示8.4导出,9.7导入跨版本迁移场景。

5.1 在fgedu‑net‑cn1 MySQL8.4执行实例dump导出

mysqlsh -u backup_admin -p'Backup@Fgedu123' -S /fgedudb/fgedudb‑data/mysql.sock --js

进入mysqlsh JS交互模式执行导出全部实例:

util.dumpInstance("/fgedudb/backup/full/shell_dump_all", {
  threads:4,
  compression:"zstd",
  includeSchemas:["fgedudb"],
  consistency:true,
  showProgress:true
})

导出完成,备份集存放在/fgedudb/backup/full/shell_dump_all目录。

5.2 将备份集拷贝至fgedu‑net‑cn2 MySQL9.7主机,执行loadDump导入

把整个shell_dump_all目录传输到9.7主机/fgedudb/backup/full/,在MySQL9.7主机执行mysqlsh导入:

mysqlsh -uroot -p'Root@Fgedu123' -S /fgedudb/fgedudb‑data/mysql.sock --js
util.loadDump("/fgedudb/backup/full/shell_dump_all",{
    threads:4,
    compression:"zstd",
    showProgress:true
})

导入完成登录MySQL9.7校验fgedudb.t_fgedu_biz表数据,完成跨版本逻辑迁移。MySQL Shell dump非常适合8.4迁移升级到9.7业务场景,规避物理备份版本不兼容问题。

上51CTO搜索风哥可以学习全套数据库教程

六、物理备份实战:Percona XtraBackup全备、增量、压缩、恢复(MySQL8.4 fgedu‑net‑cn1案例)

Percona XtraBackup是开源InnoDB物理热备份工具,不依赖MySQL企业授权;本节在MySQL8.4实例fgedu‑net‑cn1操作;注意XtraBackup大版本必须匹配MySQL版本,使用XtraBackup 8.4版本。

6.1 XtraBackup完整全量备份

cd /fgedudb/backup/full
xtrabackup --defaults‑file=/etc/my‑fgedudb.cnf \
--user=backup_admin --password='Backup@Fgedu123' \
--backup --target‑dir=./xtra_full_$(date +%Y%m%d_%H%M%S) \
--parallel=8 --compress
ls -lh ./xtra_full_*

参数说明:--parallel=8适配8CPU主机并行读取数据文件;--compress开启qpress压缩备份集。

6.2 XtraBackup增量备份实战

基于上面全量备份做第一次增量备份,模拟业务产生新数据:

USE fgedudb;
INSERT INTO t_fgedu_biz(biz_name,create_time) VALUES('incr_test_04',NOW());

执行增量备份,--incremental‑basedir指向全量备份目录:

cd /fgedudb/backup/incr
xtrabackup --defaults‑file=/etc/my‑fgedudb.cnf \
--user=backup_admin --password='Backup@Fgedu123' \
--backup --target‑dir=./xtra_incr_01_$(date +%Y%m%d_%H%M%S) \
--incremental‑basedir=/fgedudb/backup/full/xtra_full_20260915_110000 \
--parallel=8 --compress

6.3 XtraBackup恢复完整演练MySQL8.4

模拟数据库实例损坏,实例停止,执行恢复流程。
1.停止MySQL实例

systemctl stop mysql‑fgedudb

2.解压压缩备份集

cd /fgedudb/backup/full/xtra_full_20260915_110000
xtrabackup --decompress --target‑dir=.

3.对全量备份执行prepare(只apply‑log‑only,回滚事务不完成undo,用于叠加增量)

xtrabackup --prepare --apply‑log‑only --target‑dir=/fgedudb/backup/full/xtra_full_20260915_110000

4.叠加第一层增量备份

xtrabackup --prepare --apply‑log‑only --target‑dir=/fgedudb/backup/full/xtra_full_20260915_110000 \
--incremental‑dir=/fgedudb/backup/incr/xtra_incr_01_20260915_111000

5.最后一次prepare,去掉apply‑log‑only,完成事务回滚,备份集达到可启动状态

xtrabackup --prepare --target‑dir=/fgedudb/backup/full/xtra_full_20260915_110000

6.清空原数据目录,copy‑back恢复数据文件

rm -rf /fgedudb/fgedudb‑data/*
xtrabackup --copy‑back --target‑dir=/fgedudb/backup/full/xtra_full_20260915_110000
chown -R mysql:mysql /fgedudb/fgedudb‑data

7.启动实例校验数据

systemctl start mysql‑fgedudb
mysql -uroot -p -S /fgedudb/fgedudb‑data/mysql.sock
USE fgedudb;
SELECT * FROM t_fgedu_biz;

七、物理备份实战:mysqlbackup企业备份工具安装、image镜像备份、目录备份(MySQL9.7 fgedu‑net‑cn2案例)

mysqlbackup(MySQL Enterprise Backup,简称MEB)是Oracle官方企业级物理备份工具,需要企业授权许可,支持image单文件镜像备份、目录备份、压缩、加密、增量、部分备份、备份校验、云存储直接备份,本节主机fgedu‑net‑cn2运行MySQL9.7,使用对应9.7版本mysqlbackup工具。

7.1 mysqlbackup工具部署安装

下载对应MySQL9.7版本mysqlbackup rpm包,在主机安装:

cd /fgedudb/mysql‑soft
rpm -ivh mysql‑enterprise‑backup‑9.7.0‑1.el8.x86_64.rpm
which mysqlbackup

工具默认安装路径/opt/mysql/meb‑9.7/bin/mysqlbackup,添加操作系统环境变量。

7.2 mysqlbackup两种备份模式说明

  1. backup‑to‑image(image镜像单文件备份):全部备份内容打包为单个.mbi镜像文件,便于传输、存储、异地归档;支持压缩加密,生产环境推荐优先使用image模式。
  2. backup(目录备份模式):直接生成目录,内部存放各个数据文件、redo log、元数据文件;不需要解压镜像,恢复操作可以直接操作目录,适合本地快速备份调试。

7.3 MySQL9.7 image镜像全量备份实战

--backup‑dir指定临时工作目录;--backup‑image输出镜像文件;backup‑to‑image子命令执行镜像备份。

cd /fgedudb/backup/full
mysqlbackup --defaults‑file=/etc/my‑fgedudb.cnf \
--user=backup_admin --password='Backup@Fgedu123' \
--backup‑dir=/fgedudb/backup/tmp \
--backup‑image=./meb_full_$(date +%Y%m%d_%H%M%S).mbi \
backup‑to‑image
ls -lh *.mbi

7.4 mysqlbackup目录模式全量备份实战MySQL9.7

cd /fgedudb/backup/full
mysqlbackup --defaults‑file=/etc/my‑fgedudb.cnf \
--user=backup_admin --password='Backup@Fgedu123' \
--backup‑dir=./meb_dir_full_$(date +%Y%m%d_%H%M%S) \
backup
ls -ld ./meb_dir_full_*

7.5 mysqlbackup image镜像备份恢复实战MySQL9.7

停止实例,清空数据目录,从镜像文件恢复:

systemctl stop mysql‑fgedudb
rm -rf /fgedudb/fgedudb‑data/*
mysqlbackup --defaults‑file=/etc/my‑fgedudb.cnf \
--datadir=/fgedudb/fgedudb‑data \
--backup‑image=/fgedudb/backup/full/meb_full_20260915_120000.mbi \
--backup‑dir=/fgedudb/backup/tmp \
copy‑back‑and‑apply‑log
chown -R mysql:mysql /fgedudb/fgedudb‑data
systemctl start mysql‑fgedudb

copy‑back‑and‑apply‑log一步完成镜像解压、redo log apply、文件拷贝到datadir,简化恢复操作。

八、mysqlbackup压缩备份、加密备份、部分备份、image与目录格式转换实战

本节继续fgedu‑net‑cn2 MySQL9.7主机演示MEB高级功能。

8.1 mysqlbackup开启压缩的image全备

增加--compress参数开启备份集压缩,降低存储空间占用。

cd /fgedudb/backup/full
mysqlbackup --defaults‑file=/etc/my‑fgedudb.cnf \
--user=backup_admin --password='Backup@Fgedu123' \
--backup‑dir=/fgedudb/backup/tmp \
--compress \
--backup‑image=./meb_compress_full_$(date +%Y%m%d_%H%M%S).mbi \
backup‑to‑image

8.2 mysqlbackup加密备份实战

生产重要业务,备份文件本身也需要加密,使用--encrypt‑password设置备份加密口令;恢复备份时必须提供相同口令,否则无法打开备份镜像。

cd /fgedudb/backup/full
mysqlbackup --defaults‑file=/etc/my‑fgedudb.cnf \
--user=backup_admin --password='Backup@Fgedu123' \
--backup‑dir=/fgedudb/backup/tmp \
--encrypt‑password='Fgedu#MebEncrypt2026' \
--backup‑image=./meb_encrypt_full_$(date +%Y%m%d_%H%M%S).mbi \
backup‑to‑image

重要提醒:加密口令必须安全保管,如果丢失口令,整个备份镜像将永久无法恢复,口令不要存放在数据库主机本地明文文件。

加密备份恢复示例,恢复时增加--encrypt‑password参数:

mysqlbackup --defaults‑file=/etc/my‑fgedudb.cnf \
--datadir=/fgedudb/fgedudb‑data \
--encrypt‑password='Fgedu#MebEncrypt2026' \
--backup‑image=/fgedudb/backup/full/meb_encrypt_full_20260915_122000.mbi \
--backup‑dir=/fgedudb/backup/tmp \
copy‑back‑and‑apply‑log

8.3 mysqlbackup部分备份(partial备份),只备份fgedudb业务库

partial部分备份,只备份指定业务库,不备份实例全部库;适用于实例多业务库,只需要保护其中部分业务数据场景,使用--include‑databases参数指定库名。

cd /fgedudb/backup/full
mysqlbackup --defaults‑file=/etc/my‑fgedudb.cnf \
--user=backup_admin --password='Backup@Fgedu123' \
--backup‑dir=/fgedudb/backup/tmp \
--include‑databases='fgedudb' \
--backup‑image=./meb_partial_fgedudb_$(date +%Y%m%d_%H%M%S).mbi \
backup‑to‑image

8.4 image镜像与备份目录格式互相转换

image转备份目录(把mbi镜像解压输出为目录):

mysqlbackup --backup‑image=./meb_full_20260915_120000.mbi \
--backup‑dir=./convert_dir_out image‑to‑backup‑dir

备份目录打包生成image镜像:

mysqlbackup --backup‑dir=./meb_dir_full_20260915_114000 \
--backup‑image=./convert_out.mbi backup‑dir‑to‑image

九、mysqlbackup增量备份、单表选择性恢复实战

mysqlbackup支持增量与差异两种增量备份模式,增量备份记录自上一次备份的变更页;差异备份记录自上一次全量备份的变更页。本章节操作主机fgedu‑net‑cn2 MySQL9.7。

9.1 mysqlbackup增量镜像备份(基于全量备份)

cd /fgedudb/backup/incr
mysqlbackup --defaults‑file=/etc/my‑fgedudb.cnf \
--user=backup_admin --password='Backup@Fgedu123' \
--backup‑dir=/fgedudb/backup/tmp \
--incremental‑base‑image=/fgedudb/backup/full/meb_full_20260915_120000.mbi \
--backup‑image=./meb_incr_01_$(date +%Y%m%d_%H%M%S).mbi \
backup‑to‑image

参数--incremental‑base‑image指定基准备份镜像文件。

9.2 增量备份恢复流程

恢复顺序:先恢复全量镜像,再叠加增量镜像,不需要额外增加--incremental标记,新版本MEB自动识别备份类型。

systemctl stop mysql‑fgedudb
rm -rf /fgedudb/fgedudb‑data/*
#恢复全量
mysqlbackup --defaults‑file=/etc/my‑fgedudb.cnf \
--datadir=/fgedudb/fgedudb‑data \
--backup‑image=/fgedudb/backup/full/meb_full_20260915_120000.mbi \
--backup‑dir=/fgedudb/backup/tmp copy‑back‑and‑apply‑log
#叠加增量备份
mysqlbackup --defaults‑file=/etc/my‑fgedudb.cnf \
--datadir=/fgedudb/fgedudb‑data \
--backup‑image=/fgedudb/backup/incr/meb_incr_01_20260915_123000.mbi \
--backup‑dir=/fgedudb/backup/tmp copy‑back‑and‑apply‑log

chown -R mysql:mysql /fgedudb/fgedudb‑data
systemctl start mysql‑fgedudb

9.3 mysqlbackup单表恢复实战(导出单表空间)

当只需要恢复某一张InnoDB表,可以使用备份镜像提取单表ibd与sdi元数据文件,实现单表恢复,不需要完整还原整个实例。

  1. 将镜像转换为备份目录:
mysqlbackup --backup‑image=/fgedudb/backup/full/meb_full_20260915_120000.mbi \
--backup‑dir=/fgedudb/backup/tmp/extract_out image‑to‑backup‑dir
  1. 从备份目录拷贝fgedudb/t_fgedu_biz.ibdt_fgedu_biz.sdi到目标实例数据目录,执行IMPORT TABLESPACE导入表空间,完成单表恢复。

十、增量备份恢复实战,结合binlog实现时间点PITR恢复(8.4、9.7双版本)

无论物理备份还是逻辑备份,备份集只能恢复到备份结束时间;想要恢复到故障发生的任意时间点,必须依靠binlog二进制日志,也就是PITR Point‑in‑Time Recovery时间点恢复。

10.1 MySQL8.4 fgedu‑net‑cn1 XtraBackup+binlog PITR演练

  1. 确认实例开启binlog,记录全量备份完成时刻对应的binlog文件与position位置。XtraBackup备份目录内部文件xtrabackup_binlog_info记录备份时刻binlog位点。
cat /fgedudb/backup/full/xtra_full_20260915_110000/xtrabackup_binlog_info

输出示例:

fgedudb‑bin.000022     1567

代表全备完成时刻binlog文件fgedudb‑bin.000022,位点1567。

  1. 模拟业务持续写入,之后发生误操作,执行误删除表:
USE fgedudb;
INSERT INTO t_fgedu_biz(biz_name,create_time) VALUES('pitr_test_05',NOW());
DROP TABLE t_fgedu_biz;

业务误删表时间点为2026‑09‑15 13:05:00

  1. 使用全量+增量备份集恢复到备份结束时刻;此时数据只恢复到备份时刻,还缺少备份结束到误操作之前业务变更,还需要回放binlog。
  2. 从binlog位点1567开始,回放binlog,截止时间设置为误操作之前--stop‑datetime="2026‑09‑15 13:04:50"
mysqlbinlog --start‑position=1567 --stop‑datetime="2026‑09‑15 13:04:50" \
/fgedudb/fgedudb‑log/binlog/fgedudb‑bin.000022 > /fgedudb/backup/tmp/pitr_recover.sql
mysql -uroot -p -S /fgedudb/fgedudb‑data/mysql.sock < /fgedudb/backup/tmp/pitr_recover.sql
  1. 登录数据库校验,t_fgedu_biz表恢复,误DROP TABLE语句被跳过,完成PITR时间点恢复。

10.2 MySQL9.7 fgedu‑net‑cn2 mysqlbackup+binlog PITR演练

mysqlbackup备份镜像内部元数据记录备份时刻binlog信息,可以使用list‑image查看镜像内部元数据信息:

mysqlbackup --backup‑image=/fgedudb/backup/full/meb_full_20260915_120000.mbi list‑image

获取备份对应的binlog文件名与position。物理备份恢复完成之后,同样使用mysqlbinlog工具回放binlog实现时间点恢复,操作逻辑与8.4保持一致。

重要运维规范:生产环境binlog不能只保存在数据库本机;需要定时归档binlog到异地存储;如果本机磁盘损坏,本机binlog丢失,PITR时间点恢复将无法完成。

十一、异机恢复、数据库迁移完整实操案例

异机恢复是备份验证最重要手段,只在原机器恢复不能验证备份有效性,必须定期把备份集恢复到另外一台主机,确认备份可用。下面演示场景:fgedu‑net‑cn1 MySQL8.4,使用mysqldump逻辑备份,拷贝到fgedu‑net‑cn2 MySQL9.7异机恢复,完成数据库迁移。

  1. 在源主机fgedu‑net‑cn1执行业务库逻辑备份:
cd /fgedudb/backup/full
mysqldump -u backup_admin -p'Backup@Fgedu123' -S /fgedudb/fgedudb‑data/mysql.sock \
--databases fgedudb --single‑transaction --routines --triggers --events > fgedudb_migrate.sql
  1. scp传输备份文件到目标主机fgedu‑net‑cn2:
scp fgedudb_migrate.sql root@fgedu‑net‑cn2:/fgedudb/backup/full/
  1. 在目标主机MySQL9.7执行导入恢复:
mysql -uroot -p -S /fgedudb/fgedudb‑data/mysql.sock < /fgedudb/backup/full/fgedudb_migrate.sql
  1. 校验库表、数据、存储过程、触发器完整性。

物理备份异机恢复注意点:

  • MySQL8.4物理备份集,不能直接物理拷贝启动MySQL9.7实例,只能逻辑迁移。
  • 同大版本异机物理恢复:两台主机MySQL版本完全一致;硬件架构一致;恢复完成修改my.cnf适配目标主机内存参数(64G内存8CPU),修改目录权限。

十二、备份校验、备份有效性验证方法论

备份文件生成不等于备份可用,大量生产故障发生:备份脚本执行返回0,但是备份集损坏,真正故障的时候无法恢复。风哥整理4个层级备份校验手段。

  1. 备份工具自带校验
  • mysqlbackup提供validate子命令,直接校验image镜像文件内部完整性校验和,检查InnoDB页校验码是否损坏。
mysqlbackup --backup‑image=./meb_full_20260915_120000.mbi validate
  1. 逻辑备份基础校验:SQL备份文件执行语法检查,不实际导入数据。
mysql -u root -p --force --skip‑execute < backup.sql
  1. 元数据校验:备份集内检查表、存储过程、触发器、事件是否存在,统计行数和源实例做比对。
  2. 定期异机恢复演练(最高等级验证):周期把备份集完整恢复到测试实例,核对业务数据行数、业务功能,这是唯一100%确认备份可用的方式。

十三、生产自动化备份shell脚本、定时任务规划

风哥给出MySQL9.7 mysqlbackup镜像全量备份shell脚本示例,适配路径/fgedudb,脚本包含日志输出、备份过期清理、备份validate校验。
保存脚本为/fgedudb/scripts/mysql_meb_full_backup_97.sh

#!/bin/bash
BACKUP_ROOT="/fgedudb/backup"
FULL_DIR="${BACKUP_ROOT}/full"
TMP_DIR="${BACKUP_ROOT}/tmp"
LOG_FILE="${BACKUP_ROOT}/backup.log"
DATE=$(date +%Y%m%d_%H%M%S)
MYSQL_CFG="/etc/my‑fgedudb.cnf"
BK_USER="backup_admin"
BK_PWD="Backup@Fgedu123"
MEB_BIN="/opt/mysql/meb‑9.7/bin/mysqlbackup"

mkdir -p ${FULL_DIR} ${TMP_DIR}
echo "===== Start MEB full backup ${DATE} =====" >> ${LOG_FILE}

#执行mysqlbackup image全备
${MEB_BIN} --defaults‑file=${MYSQL_CFG} --user=${BK_USER} --password=${BK_PWD} \
--backup‑dir=${TMP_DIR} --backup‑image=${FULL_DIR}/meb_full_${DATE}.mbi \
backup‑to‑image 2>>${LOG_FILE}

BK_RET=$?
if [ ${BK_RET} -eq 0 ];then
    echo "backup success, start validate backup image" >> ${LOG_FILE}
    ${MEB_BIN} --backup‑image=${FULL_DIR}/meb_full_${DATE}.mbi validate >>${LOG_FILE} 2>&1
else
    echo "backup failed return code ${BK_RET}" >> ${LOG_FILE}
    exit ${BK_RET}
fi

#清理超过30天旧全量备份镜像
find ${FULL_DIR} -maxdepth 1 -type f -name "meb_full_*.mbi" -mtime +30 -exec rm -rf {} \;

echo "===== End MEB full backup ${DATE} =====" >> ${LOG_FILE}

赋予执行权限:

chmod +x /fgedudb/scripts/mysql_meb_full_backup_97.sh

配置crontab定时任务,每天凌晨2点执行全量备份:

crontab -e
0 2 * * * /fgedudb/scripts/mysql_meb_full_backup_97.sh >/dev/null 2>&1

运维要点:脚本必须监控备份返回码;生产接入监控系统,如果备份执行失败产生告警通知DBA,不能依靠crontab执行成功就代表备份成功。

十四、典型故障场景恢复演练:误删库、误删表、误更新数据

场景1:业务人员执行drop database fgedudb误删业务库

处理流程:

  1. 立刻断开业务写入,避免binlog继续大量生成;
  2. 使用最近一份全量备份恢复实例到备份完成时间;
  3. 从备份对应的binlog位点开始回放binlog,停止时间设置在drop语句执行之前;
  4. 导出已经恢复的业务库,迁移回业务实例;
  5. 业务校验。

场景2:误update不带where条件,大批量数据被错误更新

  1. 立刻抓现场,不要重启数据库,保留完整binlog;
  2. 通过binlog解析找到错误update的时间点;
  3. 全量备份恢复基底,回放binlog截止错误SQL执行之前;
  4. 将正确数据导出,回写生产实例。

注意:不要直接在生产实例执行恢复操作;优先恢复到独立测试实例,校验确认数据无误之后再导出数据回写生产,避免二次人为故障。

十五、生产环境备份策略方案设计、备份运维规范

风哥结合MySQL8.4、MySQL9.7生产项目经验,整理备份策略设计要点:

  1. 备份工具选型原则
  • TB级大OLTP库:优先物理备份(XtraBackup开源、mysqlbackup企业);每周一次全量,每日增量;配合binlog归档实现PITR。
  • 中小库、跨版本迁移需求:逻辑备份(MySQL Shell dump优先)。
  1. 存储策略:备份集不能只保存在数据库本机;至少两份副本,一份本地存储,一份异地对象存储。
  2. 保留周期:遵从业务数据合规要求;全量备份保留30天;binlog归档保留7‑30天,使用binlog_expire_logs_seconds参数控制binlog自动过期清理。
  3. 监控体系:备份任务执行状态监控、备份集磁盘空间监控、binlog归档状态监控;备份失败必须告警。
  4. 定期演练:每个季度至少执行一次完整异机恢复演练;恢复演练文档记录归档。
  5. MySQL8.4升级到MySQL9.7项目:升级前必须同时做一份物理备份+一份逻辑备份;逻辑备份作为兜底,防止物理备份跨版本无法恢复。
  6. 权限管理:备份账号密码、mysqlbackup加密口令严格保管,禁止明文存放在脚本,优先使用环境变量传入密码。

风哥针对本文总结

风哥教程本文完整覆盖MySQL8.4与MySQL9.7备份恢复综合项目内容,从备份恢复理论体系、RPO/RTO指标、逻辑备份工具mysqldump、mysqlpump、mydumper、MySQL Shell Dump,到物理备份XtraBackup、mysqlbackup企业备份工具;实操包含全量备份、增量备份、压缩备份、加密备份、部分备份、image镜像备份、目录备份、镜像格式转换、单表空间恢复;并且完整演示PITR时间点恢复、异机恢复、数据库迁移、备份校验、自动化shell脚本、crontab定时任务、典型故障场景演练、生产备份策略规范。

MySQL8.4与MySQL9.7已经移除mysql_native_password认证插件,所有备份账号必须使用caching_sha2_password;物理备份集不能直接跨大版本启动实例,跨版本迁移优先逻辑备份方案。物理备份速度快适合TB级大库;逻辑备份兼容性强,适合迁移、单库单表粒度恢复。无论物理还是逻辑全量备份,想要实现任意时间点恢复,必须依赖binlog持续异地归档。生成备份文件不等于备份有效,异机恢复演练是验证备份可靠性最重要手段。

自动化备份脚本需要增加状态监控告警,不能只依靠定时任务执行完成;加密备份的加密口令必须独立保管,口令丢失则备份集永久不可恢复。生产数据库故障发生之后,优先恢复到独立测试实例校验,确认数据正确再回写业务环境,最大限度降低人为二次故障风险。掌握本套风哥教程全部实操内容,可以独立完成MySQL8.4/9.7生产环境备份方案设计、部署实施、故障数据抢救,是DBA岗位核心必备技能,也为主从复制、MGR高可用架构打下坚实基础。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。