我想使用 Percona XtraBackup 将我们的 MySQL 数据库每小时备份到暂存系统。
是否可以准备 $BACKUPBASE,然后使用这个准备好的备份基础作为以下增量备份的基础(使用incremental-lsn选项)?
我的计划是:
- 将完整备份放入 $BACKUPBASE
然后每小时:
- 在 $BACKUPBASE 基础上进行增量备份
使用以下方法将增量备份集成到 $BACKUPBASE 中
innobackupex --apply-log $BACKUPBASE --incremental-dir=$INCREMENTALDIR innobackupex --apply-log $BACKUPBASE
删除 $INCREMENTALDIR
更具体:
- 那么 --redo-log 选项呢?在这种情况下我什么时候必须指定此选项?
- 您可以将增量备份应用于准备好的 $BACKUPBASE
答案1
不行,因为上面提到的 --apply-log 不会更新 xtrabackup_checkpoints 中的 LSN,因此每次增量备份都会复制自上次完整备份以来修改的页面。这不是你想要实现的
更新型多巴胺
要实现您的场景,您需要:
进行完整备份
innobackupex --no-timestamp /path/full
保存最后一个 LSN
# cat /path/full/xtrabackup_checkpoints backup_type = full-backuped from_lsn = 0 to_lsn = 1887987291 last_lsn = 1887987291 compact = 0 to_lsn=`grep to_lsn /path/full/xtrabackup_checkpoints | awk '{ print $3 }'`
应用 xtrabackup REDO 日志
innobackupex --apply-log --redo-only /path/full/
进行增量备份
innobackupex --no-timestamp --incremental /path/inc/ --incremental-lsn=$to_lsn
保存最后一个 LSN
# cat /path/inc/xtrabackup_checkpoints backup_type = incremental from_lsn = 1887987291 to_lsn = 1887987291 last_lsn = 1887987291 compact = 0 to_lsn=`grep to_lsn /path/inc/xtrabackup_checkpoints | awk '{ print $3 }'`
应用增量更改和 REDO 日志
innobackupex --apply-log --redo-only --incremental-dir=/path/inc /path/full/
删除带有增量备份的目录
rm -r /path/inc
重复 4-7 即可。/path/full 将包含数据库的最新版本。
当你想恢复数据库时
完成应用日志(=创建 REDO 日志):
innobackupex --apply-log /path/full
将备份副本复制到 datadir
mv /path/full/* /var/lib/mysql
修复权限(检查 /path/full/backup-my.cnf 中的选项是否与 /etc/my.cnf(Debian 的 /etc/mysql/my.cnf)中的选项相同)
chown -R mysql /var/lib/mysql
启动 MySQL
/etc/init.d/mysql start