xtrabackup 2.4 是 mysql 5.7 热备份唯一可靠选择,必须版本严格匹配(禁用 8.0/2.3),安装后需创建含 replication client 权限的专用用户,全量备份后必须执行 --prepare 预处理并恢复时清空目录、chown 属主,否则启动失败。

xtrabackup 是 MySQL 5.7 热备份最可靠的选择,它能真正实现不锁表、不中断服务的物理备份。前提是版本匹配、权限到位、流程不跳步。
必须用 XtraBackup 2.4,不能混用 8.0 或 2.3
MySQL 5.7 只兼容 xtrabackup 2.4 系列(如 2.4.29),用 8.0 会报错 Unsupported MySQL version,用 2.3 则可能漏掉 5.7 新增的 redo log 格式支持。安装时注意:
- CentOS 8:用
yum localinstall percona-xtrabackup-24-2.4.29-1.el8.x86_64.rpm - Ubuntu:用
apt install percona-xtrabackup-24 - 确认版本:
xtrabackup --version输出应含2.4.字样
备份前要创建专用用户并授权
xtrabackup 不推荐直接用 root,且需要明确权限才能读取系统表和 binlog 位置。执行以下 SQL 创建最小权限用户:
CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 'StrongPass123!'; GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost'; FLUSH PRIVILEGES;
常见错误是漏掉 REPLICATION CLIENT —— 导致备份时无法获取 SHOW MASTER STATUS 结果,--slave-info 或 --master-data 参数会静默失效。
全量备份命令必须带 --prepare 才能恢复
很多人以为 --backup 写完就完事了,其实这只是“拷贝”,不是“可用备份”。InnoDB 数据在备份过程中仍在写入,必须通过 --prepare 回放 redo log 才能达成一致性状态:
- 执行备份:
xtrabackup --backup --target-dir=/data/backup/full_$(date +%F) --user=bkpuser --password='StrongPass123!' --datadir=/var/lib/mysql - 准备备份:
xtrabackup --prepare --target-dir=/data/backup/full_2026-06-12 - 跳过
--prepare直接--copy-back会导致 MySQL 启动失败,报错类似InnoDB: Database page corruption
恢复时权限和目录清空最容易被忽略
恢复不是简单复制文件,而是把备份“还原成可启动的数据目录”:
- 必须先停库:
systemctl stop mysqld - 必须清空原数据目录:
rm -rf /var/lib/mysql/*(注意不是只删子目录) - 执行恢复:
xtrabackup --copy-back --target-dir=/data/backup/full_2026-06-12 - 必须改属主:
chown -R mysql:mysql /var/lib/mysql,否则启动报错Can't open the mysql.plugin table - 日志里若出现
innodb_page_size mismatch,说明备份时--datadir指向错误或源库配置有变更
整个流程里,--prepare 和 chown 是两个最常被跳过的动作,一跳就卡在启动环节,查日志也看不出根本原因。











