使用 XtraBackup 进行全量 + 增量物理备份和还原
MySQL备份与 PITR命令
# Full backup
xtrabackup --backup --host=127.0.0.1 --user=bkp --password='Bkp#2024' --target-dir=/backup/full --parallel=4
# Incremental (based on the previous backup)
xtrabackup --backup --host=127.0.0.1 --user=bkp --password='Bkp#2024' --target-dir=/backup/inc1 --incremental-basedir=/backup/full
# Prepare: full and intermediate incrementals with --apply-log-only, final step without it
xtrabackup --prepare --apply-log-only --target-dir=/backup/full
xtrabackup --prepare --apply-log-only --target-dir=/backup/full --incremental-dir=/backup/inc1
xtrabackup --prepare --target-dir=/backup/full
# Restore: mysqld stopped and datadir empty
systemctl stop mysqld
xtrabackup --copy-back --target-dir=/backup/full --datadir=/var/lib/mysql
chown -R mysql:mysql /var/lib/mysql
systemctl start mysqld
cat /backup/full/xtrabackup_binlog_info作用
在服务器运行时通过复制 InnoDB 文件和 redo log 进行热物理备份;增量备份只包含自上一次备份以来变化的页面。prepare 步骤会应用 redo 并使备份一致。
适用场景
用于需要快速还原(比逻辑还原快很多倍)的大型数据库、初始化副本,以及每日全量 + 每小时增量的策略。
注意
XtraBackup 版本必须与服务器版本系列匹配(8.0 服务器 → XtraBackup 8.0,8.4 → 8.4);如果服务器使用的 redo / 数据字典格式比 XtraBackup 构建更新,备份会被拒绝。未经 prepare 的备份是不一致的。在中间步骤忘记 --apply-log-only 会使之后的增量备份不可用。还原时 datadir 必须为空;--move-back 可节省磁盘但会消耗掉备份。备份用户:BACKUP_ADMIN、PROCESS、RELOAD、LOCK TABLES、REPLICATION CLIENT,以及 performance_schema.log_status、keyring_component_status、replication_group_members 上的 SELECT。