必须使用xtrabackup-80搭配qpress;mysql 8.0.33+需加--no-server-version-check否则卡在连接阶段;全备后必须立即--prepare,增量须基于已prepare的目录。

必须用 xtrabackup-80,且配套 qpress;MySQL 8.0.33+ 环境下不加 --no-server-version-check 会卡死在连接阶段。
安装 xtrabackup-80 和 qpress 缺一不可
Percona 官方源只提供 percona-xtrabackup-80,不带 qpress——而启用 --compress 时,xtrabackup 会在后台调用 qpress 命令。没装它,备份看似成功,但解压时直接报 qpress: command not found。
常见错误现象:
-
yum install percona-xtrabackup-80后xtrabackup --version显示 2.4.x 或报Unsupported MySQL version - 执行
--compress备份后,--decompress报错或静默失败
正确操作顺序:
- 先启用 EPEL:
yum install -y epel-release - 换清华源加速(可选但推荐):
sed -i 's|^mirrorlist=|#mirrorlist=|; s|^#baseurl=http://download.example.com|baseurl=https://mirrors.tuna.tsinghua.edu.cn/epel|' /etc/yum.repos.d/epel.repo - 再装两个包:
yum install -y percona-xtrabackup-80 qpress - 验证:
xtrabackup --version应输出含8.0.x based on MySQL 8.0.xx;qpress -h不报错
MySQL 用户权限和配置文件必须显式满足
xtrabackup 不是“连上就行”,它需要特定权限完成锁表、刷日志、读 binlog 位置等动作。仅靠 root@localhost 也不保险——如果 MySQL 启用了 caching_sha2_password 认证,又没配兼容方式,--defaults-file 里的用户会连不上。
关键点:
- MySQL 中创建专用用户并授权:
GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT, SUPER ON *.* TO 'bkpuser'@'localhost'; -
--defaults-file必须指向含[client]段的配置文件(如/etc/my.cnf),里面要明确写user = bkpuser和password = xxx;不能只靠环境变量或命令行传参 - 若用 socket 连接失败,
xtrabackup默认 fallback 到 TCP,但前提是my.cnf里[client]段有host = 127.0.0.1,否则可能连错或超时 -
innodb_log_file_size配置值必须与磁盘上实际ib_logfile0大小一致,否则备份中途报Cannot open /var/lib/mysql/ib_logfile0
全量备份命令里 --no-server-version-check 不是可选项
MySQL 8.0.33+ 与 xtrabackup-80 8.0.32+ 存在 handshake 兼容性 bug。不加这个参数,命令会卡在 Connecting to MySQL server host: localhost,无报错、无退出、日志也空——看起来像挂起,其实是协议握手失败。
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
典型错误场景:
- 备份脚本定时运行,某次升级 MySQL 到 8.0.33 后突然失效,但其他参数完全没动
- 手动执行
xtrabackup --backup ...一直卡住,Ctrl+C 也没响应
安全写法示例(含压缩):
xtrabackup \ --defaults-file=/etc/my.cnf \ --backup \ --target-dir=/backup/full/$(date +%F_%H-%M) \ --parallel=4 \ --compress \ --compress-threads=2 \ --no-server-version-check
注意:--target-dir 对应路径不能预先存在,否则报 Target dir exists and is not empty。
全备后必须立刻 --prepare,否则增量链断裂
很多人以为“备份完就完了”,其实 --backup 只是拷文件 + 记 LSN;真正让备份“能启动”的是 --prepare——它重放 redo log、回滚未提交事务,生成有效的 xtrabackup_checkpoints 文件。没有它,后续所有增量都找不到合法基点。
常见误操作:
- 全备目录里没有
xtrabackup_checkpoints,或内容为invalid - 增量命令中
--incremental-basedir指向原始全备目录,报Invalid backup: missing xtrabackup_checkpoints - 把多次
--prepare混用:比如对全备做了一次--prepare,又拿它打增量,再对增量单独--prepare——结果 LSN 错乱,恢复时报 checksum mismatch
正确流程只有两条铁律:
- 全备完成后,**立即**执行:
xtrabackup --prepare --target-dir=/backup/full/2026-06-01_15-00 - 增量必须基于上一次 **已 --prepare 的目录**(无论是全量还是前一次增量),且所有
--prepare要按 LSN 顺序串行执行
最易被忽略的一点:即使你只是想校验备份有效性,也得先 --prepare 再尝试启动临时实例——跳过这步,等于拿着半成品去测,结果毫无意义。










