数据库教程FGMT38‑MySQL物理备份恢复实战2之MySQLBackup

举报
风哥数据库教程 发表于 2026/09/15 11:17:30 2026/09/15
【摘要】 数据库教程FGMT38‑MySQL物理备份恢复实战2之MySQLBackup 前言MySQL Enterprise Backup(简称mysqlbackup)是MySQL企业版专属的物理热备份工具,支持在线热备份,备份过程不阻塞InnoDB读写业务,支持全量、增量、差异、压缩、加密、部分备份,支持image单镜像文件、目录备份两种存储格式,同时支持异机恢复、数据迁移、结合binlog实现时间...

数据库教程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的备份集不能直接用于恢复

  1. 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 通用前置操作

创建备份目录,设置权限

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环境部署

#上传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,创建备份管理员账号

CREATE USER meb_back@'localhost' IDENTIFIED BY 'fgedudb';
GRANT BACKUP_ADMIN,RELOAD,PROCESS,REPLICATION CLIENT ON *.* TO meb_back@'localhost';
FLUSH PRIVILEGES;

MySQL9.7环境部署

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)

CREATE USER meb_back@'localhost' IDENTIFIED BY 'fgedudb';
GRANT BACKUP_ADMIN,RELOAD,PROCESS,REPLICATION CLIENT ON *.* TO meb_back@'localhost';
FLUSH PRIVILEGES;

验证工具版本

mysqlbackup84 --version
mysqlbackup97 --version

实战2:image镜像格式全量备份恢复(MySQL8.4案例)

image镜像单文件备份,backup‑to‑image命令;‑‑threads=8适配8CPU。

2.2.1 MySQL8.4执行全量image备份

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

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

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

恢复完成,启动实例,校验数据

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,备份后需要单独准备)

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:

mysqlbackup97 \
‑‑backup‑dir=/fgedudb/meb_backup/full/full_97_dir \
apply‑log

2.3.2 MySQL9.7 backup‑and‑apply‑log,备份同时完成apply‑log准备

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

systemctl stop mysqld97
mv /fgedudb/mysql97/data /fgedudb/mysql97/data_bak
mkdir /fgedudb/mysql97/data
chown mysql:mysql /fgedudb/mysql97/data

copy‑back恢复

mysqlbackup97 \
‑‑backup‑dir=/fgedudb/meb_backup/full/full_97_dir_ready \
‑‑datadir=/fgedudb/mysql97/data \
copy‑back

修改权限启动实例

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备份

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压缩目录备份

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镜像

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

解密恢复,恢复时提供加密密码

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
mysqlbackup97 \
‑‑backup‑image=/fgedudb/meb_backup/full/full_97.mbi \
‑‑backup‑dir=/fgedudb/meb_backup/temp_conv_dir \
image‑to‑backup‑dir
  1. directory目录打包转换为image镜像 backup‑dir‑to‑image
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备份作为基准:

mysqlbackup97 \
‑‑user=meb_back ‑‑password='fgedudb' \
‑‑backup‑dir=/fgedudb/meb_backup/full/base_full_97 \
‑‑threads=8 \
backup‑and‑apply‑log

7.1 增量备份(incremental)

mysqlbackup97 \
‑‑user=meb_back ‑‑password='fgedudb' \
‑‑incremental \
‑‑incremental‑base=history:last_backup \
‑‑backup‑dir=/fgedudb/meb_backup/incr/incr_01 \
‑‑threads=8 \
backup

业务写入测试数据,再次执行第二份增量备份

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

#第一步准备基准全量
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备份演示

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元数据文件;适合单库迁移。

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

mysqlbackup84 \
‑‑backup‑image=/fgedudb/meb_backup/full/full_84.mbi \
‑‑backup‑dir=/fgedudb/meb_backup/temp_val \
validate

directory目录校验MySQL9.7

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

#!/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定时

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生产备份容灾项目。

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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