使用 mariabackup 增量备份和恢复数据

文档:https://mariadb.com/kb/en/incremental-backup-and-restore-with-mariabackup/

一、完整备份

在进行增量备份前,需要对数据库做一次完整备份

mariabackup --backup --target-dir=/root/mariadb/fullbackup --user=mariabackup --password=mypassword

备份完成之后,会在 target-dir 目录中生成 xtrabackup_checkpoints 文件包含了关于备份的元数据,如下

backup_type = full-backuped
from_lsn = 0
to_lsn = 71650434
last_lsn = 71650443
  • back_type 备份类型
  • from_lsn 起始日志序号
  • to_lsn 下一次增量备份的起始日志序号
  • last_lsn 写入重做日志的最后一个事物的偏移量

二、增量备份

在完成一次完整备份后,就可以基于完整备份做增量备份,在执行增量备份时,需要指定完整备份数据的地址

mariabackup --backup --target-dir=/root/mariadb/incrementalbackup_1 --incremental-basedir=/root/mariadb/fullbackup/ --user=mariabackup --password=mypassword

执行增量备份时, target-dir 目录必须为空,且需要通过 incremental-basedir 目录指定上一次执行备份的 target-dir 目录地址,备份完成后查看 xtrabackup_checkpoints 文件

backup_type = incremental
from_lsn = 71650434
to_lsn = 71651518
last_lsn = 71651527

可以看到,这里的 from_lsn 序号与上一次备份的 to_lsn 序号是对应上的,并且备份类型也变成了 incremental 方式

如果需要继续做增量备份,则重复这一操作,不过 incremental-basedir 目录需要从完整备份修改为上一次的增量备份地址

mariabackup --backup --target-dir=/root/mariadb/incrementalbackup_2 --incremental-basedir=/root/mariadb/incrementalbackup_1/ --user=mariabackup --password=mypassword

查看 xtrabackup_checkpoints 文件

backup_type = incremental
from_lsn = 71651518
to_lsn = 71651866
last_lsn = 71651875

三、还原

处理备份文件

与完整备份一样,在恢复数据库前,需要对备份的文件进行处理

因为版本的原因,在 MariaDB 10.2 开始,可以通过以下方式处理备份数据

# 先对完整备份文件进行处理
mariabackup --prepare --target-dir=/root/mariadb/fullbackup/
# 对增量备份文件进行处理,并将差异同步到完整备份的目录
mariabackup --prepare --target-dir=/root/mariadb/fullbackup/ --incremental-dir=/root/mariadb/incrementalbackup_1
# 对增量备份文件进行处理,并将差异同步到完整备份的目录
mariabackup --prepare --target-dir=/root/mariadb/fullbackup/ --incremental-dir=/root/mariadb/incrementalbackup_2

处理完成后,查看完整备份的 xtrabackup_checkpoints 文件,可以看到 to_lsn 和 last_lsn 已经指向最新的序号

backup_type = log-applied
from_lsn = 0
to_lsn = 71651866
last_lsn = 71651875

在 MariaDB 10.1 之前,需要通过以下命令处理文件

mariabackup --prepare --apply-log-only --target-dir=/root/mariadb/fullbackup/
mariabackup --prepare --apply-log-only --target-dir=/root/mariadb/fullbackup/ --incremental-dir=/root/mariadb/incrementalbackup_1

还原

# 停止 mariadb server 进程
service mariadb stop
# 确保 datadir 目录为空
rm -rf /var/lib/mysql/*
# 还原
mariabackup --copy-back --target-dir=/root/mariadb/fullbackup/
# 修改权限
chown -R mysql:mysql /var/lib/mysql/
# 启动 mariadb server 进程
service mariadb start

你可能感兴趣的:(使用 mariabackup 增量备份和恢复数据)