xtrabackup 8.0 增备与还原实践

文章目录

      • 一、概述
      • 二、数据备份与恢复
        • 2.0 备份账号创建与授权
        • 2.1 数据备份
          • 2.2.1 完整备份
          • 2.2.2 增量备份1
          • 2.2.3 增量备份2
        • 2.2 数据恢复
          • 2.2.1 prepare 操作
          • 2.2.2 停止mysql服务,备份原数据
          • 2.2.3 拷回数据
          • 2.2.4 文件夹授权
          • 2.2.5 启动服务
          • 2.2.6 检查数据恢复情况

一、概述

​ 本实践案例中,以2台机器来演示备份与还原过程,其中2台机器安装的mysql(8.0.26)、xtrabackup(8.0.26-18)版本均相同。备份数据从机器1(192.168.100.6)上增量备份,备份后传输到机器2(192.168.100.7)中进行恢复。

​ 增量备份前,需要先创建用于备份的用户,并给其授权,保证可以顺利备份。
xtrabackup具体使用方法,参照官方文档:https://www.percona.com/doc/percona-xtrabackup/8.0/index.html

二、数据备份与恢复

2.0 备份账号创建与授权
--创建用户
CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY '你的密码';

--授权
GRANT BACKUP_ADMIN,PROCESS,RELOAD,LOCK TABLES,REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';

-- 查询权限
GRANT SELECT ON *.* TO 'bkpuser'@'localhost';
FLUSH PRIVILEGES;

-- 查看
SHOW GRANTS FOR 'bkpuser'@'localhost';
2.1 数据备份

​ 您可以在每次完整备份之间执行多次增量备份,例如每周一次完整备份和每天一次增量备份,或者每天一次完整备份和每小时一次增量备份。增量备份之所以有效,是因为每个InnoDB页面都包含一个日志序列号或LSN。LSN是整个数据库的系统版本号。每个页面的LSN显示它最近的更改时间。

​ 增量备份实际上并不将数据文件与先前备份的数据文件进行比较,增量备份只需读取页面并将其LSN与上次备份的LSN进行比较。但是,您仍然需要完整备份来恢复增量更改;如果没有完整备份作为基础,增量备份就毫无用处。

2.2.1 完整备份
xtrabackup --user=bkpuser --password=123456 --backup --target-dir=/megalith/backup/full/
2.2.2 增量备份1

​ 增量备份是在全备的基础上进行的,如果有多次增量备份的话,后续的增量备份的基础目录(–incremental-basedir)是上一次增量备份的目标目录(–target-dir),也就是说后续增量备份都是在上一次增量备份的基础上进行的。

#增量备份1,在全备的基础上
xtrabackup --user=bkpuser --password=123456 --backup --incremental-basedir=/megalith/backup/full --target-dir=/megalith/backup/inc1 
2.2.3 增量备份2
#增量备份2,在第一次增备的基础上
xtrabackup --user=bkpuser --password=123456 --backup --incremental-basedir=/megalith/backup/inc1 --target-dir=/megalith/backup/inc2
2.2 数据恢复

​ 数据备份后,建议异机备份,将备份数据保存在另外机器磁盘中,防止本机数据出问题后数据丢失。在此案例中,直接通过scp命令,将全备和增备后的数据传递到机器2/megalith目录下。

​ Xtrabackup 是热备份,所以在备份的同时数据库也在进行读写操作。所以Xtrabackup备份的数据文件在Preparing之前时间点不一致,因为Xtrabackup 在不同的时间点复制了他们,后复制的文件可能与先复制的文件在数据关联关系上存在不一致。

​ 为了保证还原数据库的一致性,在还原之前必须进行Preparing操作。依次从完整备份开始,直到最后一个增量备份,进行Preparing操作(除了最后一个增备,所有的备份恢复都应该设置 apply-log-only 参数(only 指的就是只回放 redo log 阶段,跳过 undo 阶段),即使–apply-log-only在最后一步使用了,备份仍然是一致的,但在这种情况下,服务器将执行回滚阶段)。完成后的数据库可以用于恢复备份

2.2.1 prepare 操作
#全备prepare
xtrabackup --prepare --apply-log-only --target-dir=/megalith/backup/full

#增备1 prepare ,--target-dir 指向全备目录
xtrabackup --prepare --apply-log-only --target-dir=/megalith/backup/full  --incremental-dir=/megalith/backup/inc1

#增备2 prepare,--target-dir 指向全备目录。最后一个增备可以不用加apply-log-only,加不加效果一样
xtrabackup --prepare --apply-log-only --target-dir=/megalith/backup/full  --incremental-dir=/megalith/backup/inc2
2.2.2 停止mysql服务,备份原数据
#停止mysql服务,备份原数据(防止恢复失败)
systemctl stop mysqld;

#根据自己机器实际情况,进行数据备份与清空操作
cp -r /megalith/mysql /megalith/mysql_bk
rm -rf /megalith/mysql/*
2.2.3 拷回数据
#拷回数据,将prepare后的备份数据,拷贝到mysql数据目录下
xtrabackup --copy-back --datadir=/megalith/mysql --target-dir=/megalith/backup/full
2.2.4 文件夹授权

数据拷回后,默认拥有者和使用者都是root,而mysql相关数据文件必须是mysql:mysql才可以启动

#授权
chown -R mysql:mysql /megalith/mysql
2.2.5 启动服务
#启动服务
systemctl start mysqld;
2.2.6 检查数据恢复情况

完成以上操作步骤后,备份数据就还原了。可以与备份前的数据进行对比,检查数据恢复情况。

你可能感兴趣的:(数据库,xtrabackup,mysql备份)