Xtrabackup 2.4.7 全备–增备–binlog 恢复 mysql 5.7.26 gtid_on

创建备份目录:
mkdir /mysqlbak
原数据:


+++++++++ 全备
cd /mysqlback
innobackupex --defaults-file=/etc/my.cnf --user=root --password="w...@12" --no-timestamp full




模拟数据写入,插入一条数据。做第一次增量备份:


cd /mysqlbak
innobackupex --defaults-file=/etc/my.cnf --user=root --password="w...@12" --no-timestamp --incremental-basedir=full --incremental inc1




模拟数据写入,再插入一条数据。做第二次增量备份:


cd /mysqlbak
innobackupex --defaults-file=/etc/my.cnf --user=root --password="w...@12" --no-timestamp --incremental-basedir=inc1 --incremental inc2
 
再次插入一条记录,做第三次增量备份。


innobackupex --defaults-file=/etc/my.cnf --user=root --password="w...@12" --no-timestamp --incremental-basedir=inc2 --incremental inc3




再次插入一条新记录,然后删除数据目录。


进入数据目录,删除data目录,模拟数据丢失。
cd /usr/local/mysql-5.7.26
rm -rf data


++++++++++ 数据恢复:数据库需要停止
一、全备恢复
cd /mysqlbak
innobackupex --apply-log --redo-only --user-memory=32m full


--user-memory 默认为100m
--user-memory=32m #使用的内存,这里根据自己实际情况来定,如果你的服务器内存大,可以写 2G
二、增量恢复
2.1、第一次增量恢复:
cd /mysqlbak
innobackupex --apply-log --redo-only --user-memory=32m --incremental-dir=inc1 full


在 全备目录上面,应用第一次增量 恢复
--redo-only 对增量备份进行合并
2.2、第二次增量恢复:
cd /mysqlbak
innobackupex --apply-log --redo-only --user-memory=32m --incremental-dir=inc2 full


2.3、第三次增量恢复:
cd /mysqlbak
innobackupex --apply-log --user-memory=32m --incremental-dir=inc3 full




如果有多个增备,恢复的时候就要做多次增量恢复。
最后一次,增量恢复,不需要加 --redo-only
这里的数据还没有拷贝回至mysql
三、进入备份目录,执行innobakcup 命令,将数据从full 目录中拷贝回mysql 数据目录。
cd /mysqlbak
innobackupex --copy-back full




四、修改数据目录的属主
cd /usr/local/mysql-5.7.26/
chown -R mysql:mysql data
五、启动数据库,登录数据库,查看数据。
systemctl start mysqld


这时,恢复的数据,只是我们在最后一次备份的数据,如果备份完成后,还有数据写入,这里并没有恢复。
六、利用binlog 日志,恢复最后的数据。
6.1、先查看gtid是否为开启状态,如果开启,需要关闭。





set @@global.gtid_mode=on_permissive;
set @@global.gtid_mode=off_permissive;
set @@global.gtid_mode=off;


不关闭gtid 直接用日志是恢复不了数据,已测试过。
6.2、查看最后一次备份时的binlog的备份结束位置
cd /mysqlbak/inc3


重新打开一个CRT窗口,进入到binlog 目录
mysqlbinlog --start-position=2598 mysql_bin.000002 mysql_bin.000003 mysql_bin.000004 mysql_bin.000005 mysql_bin.000006 >/tmp/inc.sql
从mysql_bin.000002 position 2598 开始,到后面的所有的日志,导出为sql文件,用于还原。如果有多个日志,都要写出来。

6.3、登录mysql,直接source
source /tmp/inc.sql;




6.4、最后把gtid 开启。
set @@global.gtid_mode=off_permissive;
set @@global.gtid_mode=on_permissive;
set @@global.gtid_mode=on;