数据库教程FGMT38‑MySQL物理备份恢复实战2之MySQLBackup
## 前言
MySQL Enterprise Backup(简称mysqlbackup)是MySQL企业版专属的物理热备份工具,支持在线热备份,备份过程不阻塞InnoDB读写业务,支持全量、增量、差异、压缩、加密、部分备份,支持image单镜像文件、目录备份两种存储格式,同时支持异机恢复、数据迁移、结合binlog实现时间点PITR恢复。mysqlbackup分为8.4与9.7两个LTS版本,二者在权限模型、加密算法、认证插件、TDE透明加密、云存储支持方面存在差异,本套风哥教程对半分配MySQL8.4、MySQL9.7实操案例。大量DBA混淆mysqlbackup与XtraBackup,对image与directory格式、apply‑log准备阶段、增量合并、部分备份、加密备份、异机迁移流程理解不足,出现备份不可用、恢复失败、业务数据丢失事故。风哥 itpux‑com
本套风哥教程面向MySQL DBA、运维工程师、容灾迁移实施人员;实验主机`fgedu‑net‑cn1`,硬件规格**64G内存,8颗CPU**;数据库实例名`fgedudb`,业务测试用户名`fgedu`;软件、备份根目录统一使用`/fgedudb`;覆盖mysqlbackup工具原理、安装部署、image镜像全备、目录格式全备、压缩备份、AES加密备份、增量/差异备份、image与directory格式互相转换、部分表空间备份恢复、并行调优、备份校验、自动化备份脚本、异机恢复、数据迁移、结合binlog时间点恢复,分别提供MySQL8.4、MySQL9.7对半的完整实操脚本。风哥教程本文分为前言与大纲、核心理论知识、实战操作演练、风哥针对本文总结四大模块;实战包含大量可直接复制Shell、SQL脚本,读者可以在测试主机完整复现全部备份恢复实验。网上搜索风哥教程可以学习全套数据库教程
### 内容大纲
1. mysqlbackup工具整体综述,MySQL8.4、MySQL9.7版本差异,实验主机硬件环境规划,物理备份与逻辑备份优缺点对比
2. 核心理论:mysqlbackup热备份工作流程;image镜像格式、directory目录格式;apply‑log准备阶段;全量、增量、差异备份原理;压缩、AES‑256加密;部分备份TTS可传输表空间;备份校验;并行备份参数;备份元数据文件;8.4与9.7版本变更、权限模型、兼容性约束
3. 适配64G内存8CPU服务器的mysqlbackup关键参数;备份存储规划;备份恢复风险点汇总
4. 实战1:mysqlbackup工具安装部署,分别MySQL8.4、MySQL9.7环境部署,备份管理员账号授权
5. 实战2:image单镜像格式完整全量备份恢复(MySQL8.4案例)
6. 实战3:directory目录格式全量备份两套实操案例(MySQL9.7案例)
7. 实战4:全量备份开启压缩参数实操,分别8.4、9.7对半演示
8. 实战5:AES‑256加密备份、解密恢复实操(MySQL8.4案例)
9. 实战6:image与directory格式互相转换实操(MySQL9.7案例)
10. 实战7:增量备份、差异备份完整实操,增量备份合并准备流程,模拟故障恢复
11. 实战8:部分备份与单表空间恢复实操,TTS可传输表空间
12. 实战9:备份校验验证实操,并行备份优化参数配置(适配64G‑8CPU硬件)
13. 实战10:生产自动化备份shell脚本编写,定时任务落地
14. 实战11:mysqlbackup异机恢复、数据库迁移完整流程
15. 实战12:mysqlbackup结合binlog实现PITR时间点恢复(8.4/9.7分别演示)
16. mysqlbackup高频故障模拟:备份损坏、apply‑log准备失败、加密密钥丢失、跨大版本备份恢复失败
17. 上线验收检查清单,生产环境最佳实践,故障排查
## 一、核心理论知识
本章节为本套风哥教程理论基础,理解mysqlbackup物理热备份底层工作流程,区分image镜像格式、directory目录格式,掌握全量/增量/差异备份原理,理清apply‑log准备阶段作用,熟悉MySQL8.4、MySQL9.7版本之间的差异,规避备份恢复过程中数据丢失风险。风哥教程 113257174
### 1.1 mysqlbackup工具定位
mysqlbackup是MySQL企业版自带物理热备份工具,属于物理备份,直接复制InnoDB ibd、ibdata1、redo undo日志文件,**备份阶段数据库实例保持在线,业务读写不阻塞**;区别mysqldump、mysqlpump逻辑备份,逻辑备份读取表数据生成SQL,大库备份恢复速度慢;mysqlbackup物理备份速度取决于IO性能,TB级数据库备份恢复效率远高于逻辑备份。
>重要许可说明:mysqlbackup仅MySQL企业版授权可用,社区版MySQL不可直接使用该工具。
四大核心业务场景:
1. **TB级数据库全量热备份**:生产7×24业务,不需要停机;
2. **增量/差异定期备份**:减少备份磁盘占用,缩短备份窗口;
3. **数据库克隆、异机迁移、搭建主从复制从库**;
4. **故障恢复,结合binlog完成PITR时间点恢复**。
### 1.2 mysqlbackup两种备份存储格式
1. **image镜像单文件格式(backup‑to‑image)**:把全部备份内容打包成单个后缀`.mbi`镜像文件;优点便于传输、归档、对象存储保存;支持直接流输出stdout;支持S3对象存储;缺点恢复前需要解压镜像。
2. **directory目录格式(backup)**:备份生成一堆原始数据文件,目录结构近似datadir;优点不需要解压,可直接执行apply‑log准备;缺点文件数量多,归档传输管理复杂。
格式互转命令:`image‑to‑backup‑dir`镜像转目录;`backup‑dir‑to‑image`目录打包成镜像。网上搜索风哥教程可以学习全套数据库教程
### 1.3 mysqlbackup完整备份‑恢复工作阶段
1. **备份阶段**:在线读取InnoDB数据页,拷贝数据文件,同时拷贝myisam、元数据、binlog信息;记录备份结束时刻LSN日志序列号。
2. **apply‑log准备阶段**:备份得到的数据文件存在未提交事务、脏页,需要执行apply‑log,回放备份期间产生的redo日志,把备份集处理成一致性可恢复状态;**image镜像需要先extract解压到临时目录再执行apply‑log**;directory目录备份直接对目录执行apply‑log。
>⚠关键点:没有执行apply‑log的备份集**不能直接用于恢复**。
3. **copy‑back恢复阶段**:将准备完成的一致性备份集复制回MySQL datadir,覆盖原有数据;恢复前必须关闭MySQL实例。
### 1.4 备份类型区分
1. **全量Full备份**:拷贝全部InnoDB数据页;基准备份,增量备份必须依赖一份全量备份。
2. **Incremental增量备份**:记录自上一次备份(无论全量/增量)之后变更的数据页;备份体积小;恢复时需要按顺序合并全量+全部增量链。
3. **Differential差异备份**:记录自最近一次**全量备份**之后变更的数据页;不依赖中间增量,恢复只需要全量+一份差异备份。
### 1.5 压缩与AES‑256加密
1. 压缩:支持zlib、LZ4压缩算法;`‑‑compress`开启压缩;LZ4压缩CPU开销更低,适合64G 8CPU服务器。
2. 加密:AES‑256加密备份镜像;使用`‑‑encrypt‑password`设置密码;**密钥密码丢失备份完全不可恢复,没有后门**。风哥数据库教程 itpux‑com
### 1.6 TTS部分备份原理
Transportable Tablespaces可传输表空间部分备份;只备份指定库、指定表的ibd表空间文件;适合单库、单表的快速备份恢复;限制:需要导出导入元数据`.cfg`文件;系统库mysql不适合做部分备份;不支持跨操作系统字节序。
### 1.7 MySQL8.4与MySQL9.7关键版本差异
1. 认证插件:MySQL8.4默认禁用mysql_native_password,还可以手动开启;MySQL9.7彻底移除mysql_native_password,仅支持caching_sha2_password;mysqlbackup连接账号必须使用sha2密码。
2. 工具版本强绑定:mysqlbackup 8.4只能备份恢复MySQL8.4实例;mysqlbackup9.7只能备份恢复MySQL9.7实例;**禁止跨大版本混用工具**。
3. 云存储支持:MySQL9.7对S3对象存储支持增强,支持直接备份到对象存储,8.4仅基础支持。
4. 并行参数优化:9.7默认并行线程自适应检测CPU,8.4需要手动指定`‑‑threads`。
5. 权限:9.7新增细化`BACKUP_ADMIN`权限,废弃部分SUPER权限依赖。
### 1.8 关键参数(适配64G内存,8CPU服务器)
– `‑‑threads=8`备份恢复并行线程,匹配8CPU;
– `‑‑compress‑algorithm=lz4`;
– `‑‑incremental‑base=history:last_backup`读取mysql.backup_history元数据表自动定位上一次备份LSN;
– `‑‑backup‑image`指定镜像文件路径;
– `‑‑backup‑dir`临时工作目录;
– `‑‑validate`备份完成校验完整性;
– `‑‑skip‑unused‑pages`跳过InnoDB未使用数据页,缩减备份体积。
### 1.9 风险点汇总
1. apply‑log阶段没有执行直接copy‑back恢复,数据库启动崩溃;
2. 加密备份密码丢失,备份永久失效;
3. 增量备份链断裂,中间备份文件丢失,整条增量链全部不可用;
4. mysqlbackup工具版本与MySQL实例版本不匹配,备份恢复报错;
5. 部分TTS备份,缺少cfg元数据文件,表空间导入失败;
6. 恢复时MySQL实例没有完全关闭,copy‑back覆盖正在运行的数据文件,数据彻底损坏。
网上搜索风哥教程可以学习全套数据库教程
## 二、实战操作演练
>环境说明:
实验主机`fgedu‑net‑cn1`,硬件规格64G内存8CPU;两套软件环境:MySQL8.4、MySQL9.7;根目录`/fgedudb`;
MySQL8.4软件目录`/fgedudb/mysql84`,datadir`/fgedudb/mysql84/data`;
MySQL9.7软件目录`/fgedudb/mysql97`,datadir`/fgedudb/mysql97/data`;
备份工作根目录`/fgedudb/meb_backup`;业务库`fgedudb`,业务用户`fgedu`;
mysqlbackup工具分别配套对应数据库版本;操作系统用户mysql。
>对半分配案例:8.4案例:实战2、5、12上半部分;9.7案例:实战3、6、12下半部分;其余实战混合演示两个版本差异。
#### 2.0 通用前置操作
创建备份目录,设置权限
“`bash
mkdir -p /fgedudb/meb_backup/{full,incr,diff,temp,encrypt,partial}
chown -R mysql:mysql /fgedudb/meb_backup
chmod 700 /fgedudb/meb_backup
“`
### 实战1:mysqlbackup工具安装部署,备份管理员账号授权
#### MySQL8.4环境部署
“`bash
#上传mysqlbackup‑8.4.13‑linux‑x86_64.tar.xz至/fgedudb
cd /fgedudb
tar -Jxvf mysqlbackup‑8.4.13‑linux‑x86_64.tar.xz -C /fgedudb/mysql84 –strip‑components=1
ln -s /fgedudb/mysql84/bin/mysqlbackup /usr/local/bin/mysqlbackup84
“`
登录MySQL8.4,创建备份管理员账号
“`sql
CREATE USER meb_back@’localhost’ IDENTIFIED BY ‘fgedudb’;
GRANT BACKUP_ADMIN,RELOAD,PROCESS,REPLICATION CLIENT ON *.* TO meb_back@’localhost’;
FLUSH PRIVILEGES;
“`
#### MySQL9.7环境部署
“`bash
cd /fgedudb
tar -Jxvf mysqlbackup‑9.7.0‑linux‑x86_64.tar.xz -C /fgedudb/mysql97 –strip‑components=1
ln -s /fgedudb/mysql97/bin/mysqlbackup /usr/local/bin/mysqlbackup97
“`
MySQL9.7创建备份账号(9.7不再支持mysql_native_password)
“`sql
CREATE USER meb_back@’localhost’ IDENTIFIED BY ‘fgedudb’;
GRANT BACKUP_ADMIN,RELOAD,PROCESS,REPLICATION CLIENT ON *.* TO meb_back@’localhost’;
FLUSH PRIVILEGES;
“`
>验证工具版本
“`bash
mysqlbackup84 –version
mysqlbackup97 –version
“`
### 实战2:image镜像格式全量备份恢复(MySQL8.4案例)
image镜像单文件备份,backup‑to‑image命令;`‑‑threads=8`适配8CPU。
#### 2.2.1 MySQL8.4执行全量image备份
“`bash
mysqlbackup84 \
‑‑user=meb_back ‑‑password=’fgedudb’ \
‑‑host=localhost ‑‑port=3306 \
‑‑backup‑image=/fgedudb/meb_backup/full/full_84.mbi \
‑‑backup‑dir=/fgedudb/meb_backup/temp \
‑‑threads=8 \
‑‑skip‑unused‑pages \
backup‑to‑image
“`
备份完成后镜像文件`/fgedudb/meb_backup/full/full_84.mbi`生成。
#### 2.2.2 模拟数据库故障,关闭MySQL8.4实例
“`bash
systemctl stop mysqld84
#备份原有data目录作为回退
mv /fgedudb/mysql84/data /fgedudb/mysql84/data_bak
mkdir /fgedudb/mysql84/data
chown mysql:mysql /fgedudb/mysql84/data
“`
#### 2.2.3 镜像恢复,copy‑back‑and‑apply‑log,自动解压+apply‑log+复制回datadir
“`bash
mysqlbackup84 \
‑‑backup‑image=/fgedudb/meb_backup/full/full_84.mbi \
‑‑backup‑dir=/fgedudb/meb_backup/temp_restore \
‑‑datadir=/fgedudb/mysql84/data \
copy‑back‑and‑apply‑log
“`
恢复完成,启动实例,校验数据
“`bash
chown -R mysql:mysql /fgedudb/mysql84/data
systemctl start mysqld84
systemctl status mysqld84
#登录校验业务库fgedudb
/fgedudb/mysql84/bin/mysql -umeb_back -S /fgedudb/mysql84/mysql.sock
show databases;
“`
### 实战3:directory目录格式全量备份两套案例(MySQL9.7案例)
>目录备份生成原始数据文件集合;两种用法,直接backup;或者backup‑and‑apply‑log备份同时执行apply‑log。
#### 2.3.1 MySQL9.7目录全量备份(不做apply‑log,备份后需要单独准备)
“`bash
mysqlbackup97 \
‑‑user=meb_back ‑‑password=’fgedudb’ \
‑‑host=localhost ‑‑port=3307 \
‑‑backup‑dir=/fgedudb/meb_backup/full/full_97_dir \
‑‑threads=8 \
‑‑skip‑unused‑pages \
backup
“`
>备份结束目录`full_97_dir`,此时备份集未准备,执行apply‑log:
“`bash
mysqlbackup97 \
‑‑backup‑dir=/fgedudb/meb_backup/full/full_97_dir \
apply‑log
“`
#### 2.3.2 MySQL9.7 backup‑and‑apply‑log,备份同时完成apply‑log准备
“`bash
mysqlbackup97 \
‑‑user=meb_back ‑‑password=’fgedudb’ \
‑‑host=localhost ‑‑port=3307 \
‑‑backup‑dir=/fgedudb/meb_backup/full/full_97_dir_ready \
‑‑threads=8 \
‑‑skip‑unused‑pages \
backup‑and‑apply‑log
“`
#### 2.3.3 directory目录备份copy‑back恢复
停止MySQL9.7实例
“`bash
systemctl stop mysqld97
mv /fgedudb/mysql97/data /fgedudb/mysql97/data_bak
mkdir /fgedudb/mysql97/data
chown mysql:mysql /fgedudb/mysql97/data
“`
copy‑back恢复
“`bash
mysqlbackup97 \
‑‑backup‑dir=/fgedudb/meb_backup/full/full_97_dir_ready \
‑‑datadir=/fgedudb/mysql97/data \
copy‑back
“`
修改权限启动实例
“`bash
chown -R mysql:mysql /fgedudb/mysql97/data
systemctl start mysqld97
“`
风哥数据库教程 itpux‑com
### 实战4:全量备份开启压缩参数实操,8.4与9.7对半演示
MySQL8.4使用zlib压缩做image备份;MySQL9.7使用LZ4压缩做directory备份。
MySQL8.4压缩image备份
“`bash
mysqlbackup84 \
‑‑user=meb_back ‑‑password=’fgedudb’ \
‑‑backup‑image=/fgedudb/meb_backup/full/full_84_compress.mbi \
‑‑backup‑dir=/fgedudb/meb_backup/temp \
‑‑threads=8 \
‑‑compress \
‑‑compress‑algorithm=zlib \
‑‑skip‑unused‑pages \
backup‑to‑image
“`
MySQL9.7 LZ4压缩目录备份
“`bash
mysqlbackup97 \
‑‑user=meb_back ‑‑password=’fgedudb’ \
‑‑backup‑dir=/fgedudb/meb_backup/full/full_97_lz4 \
‑‑threads=8 \
‑‑compress \
‑‑compress‑algorithm=lz4 \
‑‑skip‑unused‑pages \
backup‑and‑apply‑log
“`
### 实战5:AES‑256加密备份解密恢复实操(MySQL8.4案例)
>⚠生产务必保管加密密码,密码丢失备份完全不可恢复。
加密备份,输出加密image镜像
“`bash
mysqlbackup84 \
‑‑user=meb_back ‑‑password=’fgedudb’ \
‑‑backup‑image=/fgedudb/meb_backup/encrypt/full_84_enc.mbi \
‑‑backup‑dir=/fgedudb/meb_backup/temp \
‑‑encrypt‑password=’FgEdU@2026#BK’ \
‑‑threads=8 \
backup‑to‑image
“`
解密恢复,恢复时提供加密密码
“`bash
systemctl stop mysqld84
mv /fgedudb/mysql84/data /fgedudb/mysql84/data_bak
mkdir /fgedudb/mysql84/data
chown mysql:mysql /fgedudb/mysql84/data
mysqlbackup84 \
‑‑backup‑image=/fgedudb/meb_backup/encrypt/full_84_enc.mbi \
‑‑backup‑dir=/fgedudb/meb_backup/temp_dec \
‑‑datadir=/fgedudb/mysql84/data \
‑‑encrypt‑password=’FgEdU@2026#BK’ \
copy‑back‑and‑apply‑log
chown -R mysql:mysql /fgedudb/mysql84/data
systemctl start mysqld84
“`
网上搜索风哥教程可以学习全套数据库教程
### 实战6:image与directory格式互相转换实操(MySQL9.7案例)
1. image镜像解压转换为directory目录 `image‑to‑backup‑dir`
“`bash
mysqlbackup97 \
‑‑backup‑image=/fgedudb/meb_backup/full/full_97.mbi \
‑‑backup‑dir=/fgedudb/meb_backup/temp_conv_dir \
image‑to‑backup‑dir
“`
2. directory目录打包转换为image镜像 `backup‑dir‑to‑image`
“`bash
mysqlbackup97 \
‑‑backup‑dir=/fgedudb/meb_backup/full/full_97_dir \
‑‑backup‑image=/fgedudb/meb_backup/full/full_97_pack.mbi \
backup‑dir‑to‑image
“`
### 实战7:增量备份、差异备份完整实操
>说明:增量备份`‑‑incremental`;差异备份`‑‑differential`;`‑‑incremental‑base=history:last_backup`自动读取mysql.backup_history表获取上一次备份LSN。
以MySQL9.7环境演示,先执行一份全量directory备份作为基准:
“`bash
mysqlbackup97 \
‑‑user=meb_back ‑‑password=’fgedudb’ \
‑‑backup‑dir=/fgedudb/meb_backup/full/base_full_97 \
‑‑threads=8 \
backup‑and‑apply‑log
“`
#### 7.1 增量备份(incremental)
“`bash
mysqlbackup97 \
‑‑user=meb_back ‑‑password=’fgedudb’ \
‑‑incremental \
‑‑incremental‑base=history:last_backup \
‑‑backup‑dir=/fgedudb/meb_backup/incr/incr_01 \
‑‑threads=8 \
backup
“`
业务写入测试数据,再次执行第二份增量备份
“`bash
mysqlbackup97 \
‑‑user=meb_back ‑‑password=’fgedudb’ \
‑‑incremental \
‑‑incremental‑base=history:last_backup \
‑‑backup‑dir=/fgedudb/meb_backup/incr/incr_02 \
‑‑threads=8 \
backup
“`
#### 7.2 增量备份链合并apply‑log‑incremental
>合并顺序:先全量base_full_97;依次合并incr_01,incr_02
“`bash
#第一步准备基准全量
mysqlbackup97 ‑‑backup‑dir=/fgedudb/meb_backup/full/base_full_97 apply‑log
#合并第一份增量
mysqlbackup97 ‑‑backup‑dir=/fgedudb/meb_backup/full/base_full_97 \
‑‑incremental‑backup‑dir=/fgedudb/meb_backup/incr/incr_01 \
apply‑log‑incremental
#合并第二份增量
mysqlbackup97 ‑‑backup‑dir=/fgedudb/meb_backup/full/base_full_97 \
‑‑incremental‑backup‑dir=/fgedudb/meb_backup/incr/incr_02 \
apply‑log‑incremental
“`
>全部增量合并完成,base_full_97成为一致性完整备份集,执行copy‑back恢复。
#### 7.3 差异differential备份演示
“`bash
mysqlbackup97 \
‑‑user=meb_back ‑‑password=’fgedudb’ \
‑‑differential \
‑‑incremental‑base=history:last_backup \
‑‑backup‑dir=/fgedudb/meb_backup/diff/diff_01 \
‑‑threads=8 \
backup
“`
>差异备份恢复:只需要基准全量 + 一份diff差异备份,不需要中间链。
### 实战8:部分备份TTS可传输表空间实操(MySQL8.4)
>只备份业务库`fgedudb`;生成ibd、cfg元数据文件;适合单库迁移。
“`bash
mysqlbackup84 \
‑‑user=meb_back ‑‑password=’fgedudb’ \
‑‑include‑databases=fgedudb \
‑‑backup‑dir=/fgedudb/meb_backup/partial/part_fgedudb \
‑‑threads=8 \
backup‑and‑apply‑log
“`
恢复TTS部分备份:目标库需要预先建库,执行import tablespace导入,**不能直接copy‑back覆盖整个datadir**。
### 实战9:备份校验验证实操,并行备份优化参数
`‑‑validate`校验备份镜像/目录内部校验和,确认备份文件无损坏。
image镜像校验MySQL8.4
“`bash
mysqlbackup84 \
‑‑backup‑image=/fgedudb/meb_backup/full/full_84.mbi \
‑‑backup‑dir=/fgedudb/meb_backup/temp_val \
validate
“`
directory目录校验MySQL9.7
“`bash
mysqlbackup97 \
‑‑backup‑dir=/fgedudb/meb_backup/full/full_97_dir_ready \
validate
“`
>适配64G内存8CPU硬件,并行参数参考:`‑‑threads=8`;大库可开启`‑‑read‑threads=8 ‑‑write‑threads=8`;注意不要超过主机IO压力阈值。
### 实战10:生产自动化备份shell脚本(MySQL9.7示例)
脚本`/fgedudb/scripts/meb_full_backup.sh`
“`bash
#!/bin/bash
#mysqlbackup9.7自动化全量image备份
BACKUP_IMG=/fgedudb/meb_backup/full/`date +%Y%m%d_%H%M%S`_full97.mbi
TMP_DIR=/fgedudb/meb_backup/tmp_auto
LOG_FILE=/fgedudb/meb_backup/log/meb_backup.log
mkdir -p /fgedudb/meb_backup/log
echo “======开始备份 `date` ======” >> ${LOG_FILE}
mysqlbackup97 \
‑‑user=meb_back ‑‑password=’fgedudb’ \
‑‑host=localhost ‑‑port=3307 \
‑‑backup‑image=${BACKUP_IMG} \
‑‑backup‑dir=${TMP_DIR} \
‑‑threads=8 \
‑‑skip‑unused‑pages \
‑‑compress \
‑‑compress‑algorithm=lz4 \
backup‑to‑image >>${LOG_FILE} 2>&1
RET=$?
if [ ${RET} -eq 0 ];then
echo “备份成功 ${BACKUP_IMG}” >>${LOG_FILE}
mysqlbackup97 ‑‑backup‑image=${BACKUP_IMG} ‑‑backup‑dir=${TMP_DIR} validate >>${LOG_FILE} 2>&1
else
echo “备份失败返回码${RET}” >>${LOG_FILE}
fi
echo “======备份结束 `date` ======” >>${LOG_FILE}
“`
授权,配置crontab定时
“`bash
chmod 700 /fgedudb/scripts/meb_full_backup.sh
chown mysql:mysql /fgedudb/scripts/meb_full_backup.sh
#crontab示例,每日凌晨2点执行
0 2 * * * /fgedudb/scripts/meb_full_backup.sh
“`
上51CTO搜索风哥可以学习全套数据库教程
### 实战11:mysqlbackup异机恢复、数据库迁移完整流程
主机`fgedu‑net‑cn1`备份,拷贝镜像到目标主机`fgedu‑net‑cn2`,目标主机安装同版本MySQL软件。
1. 源端执行image全量备份;
2. scp传输`.mbi`镜像文件至`fgedu‑net‑cn2`;
3. 目标主机关闭MySQL实例,备份原有data目录;
4. 目标主机执行`copy‑back‑and‑apply‑log`恢复镜像;
5. 修改datadir目录权限,启动MySQL;
6. 校验业务数据、账号、binlog位点,可直接搭建主从复制。
### 实战12:mysqlbackup结合binlog实现PITR时间点恢复
>原理:mysqlbackup物理备份作为基线;之后重放binlog,恢复到故障之前任意时间点。
MySQL8.4流程:
1. 执行mysqlbackup全量image备份,记录备份输出中的binlog文件名与position位点;
2. 模拟业务误操作drop table;
3. 关闭实例,执行copy‑back‑and‑apply‑log恢复物理备份基线;
4. 启动实例,使用mysqlbinlog重放备份完成后至故障前binlog,完成PITR。
MySQL9.7流程差异点:mysqlbackup备份元数据内部自动记录GTID集合;恢复之后可以直接基于GTID做binlog回放,不需要手工找position位点。
### 2.13 高频故障模拟
1. apply‑log未执行直接copy‑back:实例启动InnoDB报错,数据库无法open;解决:回到备份集执行apply‑log;
2. AES加密备份密码丢失:备份无任何解密手段,直接作废;
3. 增量备份链中间文件删除:整条增量链全部失效,只能使用基准全量备份;
4. mysqlbackup工具版本与MySQL实例不匹配:报文件格式不识别;工具版本必须严格等于数据库大版本;
5. TTS部分备份缺少cfg元文件:导入表空间报元数据不匹配;
6. 恢复时MySQL实例未停止:copy‑back覆盖运行中数据文件,数据彻底损坏。
### 2.14 上线验收检查清单
1. 权限:备份账号BACKUP_ADMIN等权限完整;MySQL9.7账号禁止使用废弃mysql_native_password;
2. 备份格式:image/directory根据业务选择;生产备份后必须执行`‑‑validate`校验备份完整性;
3. 备份流程:全量/增量备份流程完整;apply‑log阶段正常完成;加密备份密码妥善保管,有密码文档;
4. 恢复演练:测试环境完整演练恢复;结合binlog做PITR时间点恢复演练;
5. 自动化:定时备份脚本,备份日志,备份过期清理;监控备份任务返回码;
6. 异机恢复演练:模拟主机故障,把备份恢复至另一台主机,验证业务可用性;
7. 文档:记录备份恢复操作手册,加密密码保管方案,故障回退预案。
### 2.15 生产最佳实践
1. TB级大库优先image镜像格式,便于归档与对象存储;
2. 64G‑8CPU服务器threads=8,根据IO负载适度调小;优先LZ4压缩;
3. 加密备份密码不能保存在脚本明文;生产建议使用密码文件;
4. 增量备份要做好备份集保留策略,防止增量链断裂;定期重新生成全量基准备份;
5. 备份完成必须validate校验;**必须定期做恢复演练,备份没有经过恢复演练等于无效备份**;
6. mysqlbackup属于企业版工具,严格匹配MySQL版本,8.4工具不能用于9.7数据库。
## 三、风哥针对本文总结
本套风哥教程完整讲解MySQL Enterprise Backup(mysqlbackup)物理热备份工具,区分MySQL8.4、MySQL9.7 LTS版本差异;覆盖image镜像格式、directory目录格式,全量、增量、差异备份,压缩、AES‑256加密备份,image与directory格式互相转换,TTS部分备份、并行调优、备份校验、自动化备份脚本、异机迁移恢复、结合binlog的PITR时间点恢复。
1. mysqlbackup是企业版专属物理热备份工具,备份期间不阻塞InnoDB读写;存在image单镜像、directory目录两种备份格式;image适合归档传输,directory适合本地直接准备;两种格式支持互相转换。备份得到的数据文件存在脏页,**必须执行apply‑log阶段生成一致性备份集,没有apply‑log的备份不能直接恢复**。
2. 备份分为全量、增量、差异备份;增量备份依赖整条备份链,中间备份丢失整条链失效;差异备份仅依赖最近一份全量备份;生产环境需要定期重新生成全量基准备份,降低增量链断裂风险。
3. MySQL8.4、MySQL9.7存在版本差异:9.7彻底移除mysql_native_password认证插件;mysqlbackup工具版本必须和MySQL数据库版本严格一一对应,禁止跨大版本混用;9.7对S3对象存储、GTID元数据支持更强。AES‑256加密备份一旦密码丢失,备份完全不可恢复,不存在解密后门,生产环境密码必须安全保管。
4. TTS可传输表空间部分备份,适合单库、单表迁移;仅导出表空间ibd与cfg元数据,**不能直接copy‑back覆盖整个datadir**,需要目标库执行import tablespace导入。
5. 64G内存8CPU硬件,并行线程`‑‑threads=8`,根据IO压力调整;优先LZ4压缩算法;备份完成使用`‑‑validate`校验备份文件完整性。自动化备份脚本需要捕获返回码,记录备份日志;生产务必要做恢复演练,没有演练的备份视为无效备份。
6. 完整灾难恢复流程:mysqlbackup物理备份作为基线,再结合binlog二进制日志,实现PITR任意时间点恢复;也可以利用备份集完成异机数据库迁移、搭建主从复制环境。
7. 高危操作:恢复MySQL备份前,必须完全关闭数据库实例;绝对禁止实例运行时执行copy‑back,会直接损坏业务数据。加密备份、增量备份生产要有完备的文档与保管策略。
全部Shell、SQL脚本,建议读者在`fgedu‑net‑cn1`测试主机完整复现备份恢复全流程,区分MySQL8.4与MySQL9.7版本差异,再落地企业MySQL生产备份容灾项目。
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
