ITPub博客

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

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

原创 MySQL 作者:mfkqwyc86 时间:2026-09-16 11:17:31 0 删除 编辑

数据库教程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`;实例名、业务数据库名、业务账号统一使用`fgedudb`、`fgedudb`、`fgedu`。


风哥教程本文完整覆盖备份恢复理论体系、逻辑备份工具(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账号)

```bash

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。

```sql

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依赖该权限获取一致性快照信息。

```sql

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`,导入测试表与测试数据,模拟真实业务负载。

```sql

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文件

```bash

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系统库)

```bash

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表

```bash

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

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

```sql

DROP DATABASE fgedudb;

SHOW DATABASES;

```

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

```bash

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

```

登录校验数据:

```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,客户端版本必须支持。

```bash

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恢复命令示例:

```bash

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

```


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

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

```bash

#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工具:

```bash

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导出

```bash

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

```

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

```javascript

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导入:

```bash

mysqlsh -uroot -p'Root@Fgedu123' -S /fgedudb/fgedudb‑data/mysql.sock --js

```

```javascript

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完整全量备份

```bash

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增量备份实战

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

```sql

USE fgedudb;

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

```

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

```bash

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实例

```bash

systemctl stop mysql‑fgedudb

```

2.解压压缩备份集

```bash

cd /fgedudb/backup/full/xtra_full_20260915_110000

xtrabackup --decompress --target‑dir=.

```

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

```bash

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

```

4.叠加第一层增量备份

```bash

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,完成事务回滚,备份集达到可启动状态

```bash

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

```

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

```bash

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.启动实例校验数据

```bash

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包,在主机安装:

```bash

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`子命令执行镜像备份。

```bash

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

```bash

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

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

```bash

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`参数开启备份集压缩,降低存储空间占用。

```bash

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`设置备份加密口令;恢复备份时必须提供相同口令,否则无法打开备份镜像。

```bash

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

```

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


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

```bash

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`参数指定库名。

```bash

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镜像解压输出为目录):

```bash

mysqlbackup --backup‑image=./meb_full_20260915_120000.mbi \

--backup‑dir=./convert_dir_out image‑to‑backup‑dir

```

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

```bash

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增量镜像备份(基于全量备份)

```bash

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自动识别备份类型。

```bash

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. 将镜像转换为备份目录:

```bash

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

--backup‑dir=/fgedudb/backup/tmp/extract_out image‑to‑backup‑dir

```

2. 从备份目录拷贝`fgedudb/t_fgedu_biz.ibd`、`t_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位点。

```bash

cat /fgedudb/backup/full/xtra_full_20260915_110000/xtrabackup_binlog_info

```

输出示例:

```

fgedudb‑bin.000022     1567

```

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


2. 模拟业务持续写入,之后发生误操作,执行误删除表:

```sql

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`。


3. 使用全量+增量备份集恢复到备份结束时刻;此时数据只恢复到备份时刻,还缺少备份结束到误操作之前业务变更,还需要回放binlog。

4. 从binlog位点1567开始,回放binlog,截止时间设置为误操作之前`--stop‑datetime="2026‑09‑15 13:04:50"`。

```bash

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

```

5. 登录数据库校验,t_fgedu_biz表恢复,误DROP TABLE语句被跳过,完成PITR时间点恢复。


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

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

```bash

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执行业务库逻辑备份:

```bash

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

```

2. scp传输备份文件到目标主机fgedu‑net‑cn2:

```bash

scp fgedudb_migrate.sql root@fgedu‑net‑cn2:/fgedudb/backup/full/

```

3. 在目标主机MySQL9.7执行导入恢复:

```bash

mysql -uroot -p -S /fgedudb/fgedudb‑data/mysql.sock < /fgedudb/backup/full/fgedudb_migrate.sql

```

4. 校验库表、数据、存储过程、触发器完整性。


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

- MySQL8.4物理备份集,不能直接物理拷贝启动MySQL9.7实例,只能逻辑迁移。

- 同大版本异机物理恢复:两台主机MySQL版本完全一致;硬件架构一致;恢复完成修改my.cnf适配目标主机内存参数(64G内存8CPU),修改目录权限。


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

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


1. **备份工具自带校验**

- mysqlbackup提供`validate`子命令,直接校验image镜像文件内部完整性校验和,检查InnoDB页校验码是否损坏。

```bash

mysqlbackup --backup‑image=./meb_full_20260915_120000.mbi validate

```

2. **逻辑备份基础校验**:SQL备份文件执行语法检查,不实际导入数据。

```bash

mysql -u root -p --force --skip‑execute < backup.sql

```

3. **元数据校验**:备份集内检查表、存储过程、触发器、事件是否存在,统计行数和源实例做比对。

4. **定期异机恢复演练(最高等级验证)**:周期把备份集完整恢复到测试实例,核对业务数据行数、业务功能,这是唯一100%确认备份可用的方式。


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

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

保存脚本为`/fgedudb/scripts/mysql_meb_full_backup_97.sh`

```bash

#!/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}

```

赋予执行权限:

```bash

chmod +x /fgedudb/scripts/mysql_meb_full_backup_97.sh

```

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

```bash

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优先)。

2. **存储策略**:备份集不能只保存在数据库本机;至少两份副本,一份本地存储,一份异地对象存储。

3. **保留周期**:遵从业务数据合规要求;全量备份保留30天;binlog归档保留7‑30天,使用`binlog_expire_logs_seconds`参数控制binlog自动过期清理。

4. **监控体系**:备份任务执行状态监控、备份集磁盘空间监控、binlog归档状态监控;备份失败必须告警。

5. **定期演练**:每个季度至少执行一次完整异机恢复演练;恢复演练文档记录归档。

6. MySQL8.4升级到MySQL9.7项目:升级前必须同时做一份物理备份+一份逻辑备份;逻辑备份作为兜底,防止物理备份跨版本无法恢复。

7. 权限管理:备份账号密码、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持续异地归档。生成备份文件不等于备份有效,异机恢复演练是验证备份可靠性最重要手段。


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


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9664900/viewspace-3182529/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
风哥Oracle,MySQL,PostgreSQL,Linux,大数据,国产数据库,中间件等教程

注册时间:2010-10-26

  • 博文量
    68
  • 访问量
    405998