创建备份目录: 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;