假设周一是基于base的备份,周二是基于base的incr1备份,周三是基于incr1的incr2备份,在恢复数据库的时候,需要使用base,incr1,incr2三个备份都存在时,才能进行完整的恢复,每个备份的from_lsn都是基于上一个备份的to_lsn,所以缺一不可。
基于incr1的incr2备份
xtrabackup--defaults-file=/home/mysql8.0.16/mysql/my.cnf--socket=/tmp/mysql.sock--host='192.168.11.253'--user='aa'--password='aa'--port=3307--backup--target-dir=/home/zqdba/20200324backup/incr2--incremental-basedir=/home/zqdba/20200324backup/incr1
假设周一是基于base的备份,周二是基于base的incr1备份,周三是基于base的incr2备份,在恢复数据库的时候,需要使用base和incr1,incr2两个备份中的其中一个,才能进行完整的恢复,因为incr1和incr2的from_lsn都是基于base备份中的to_lsn,所以恢复数据库时,只需要base和任意一个基于base的增量备份。
基于base的incr2备份
xtrabackup--defaults-file=/home/mysql8.0.16/mysql/my.cnf--socket=/tmp/mysql.sock--host='192.168.11.253'--user='aa'--password='aa'--port=3307--backup--target-dir=/home/zqdba/20200324backup/incr2--incremental-basedir=/home/zqdba/20200324backup/incr1
很显然在ORACLE里面第一种叫做差异备份,第二种叫做覆盖备份
基于方式一的恢复:
3.1准备好备份片
MYSQLxtrabackup增量备份差异
xtrabackup--defaults-file=/u01/mysql/mysql8020debug/my.cnf--user=root--password=123456--backup--target-dir=/u01/mysql/mysql8020debug/backup_increment--incremental-basedir=/u01/mysql/mysql8020debug/backup
xtrabackup--defaults-file=/u01/mysql/mysql8020debug/my.cnf--user=root--password=123456--backup--target-dir=/u01/mysql/mysql8020debug/backup_incr2--incremental-basedir=/u01/mysql/mysql8020debug/backup_increment
3.2执行恢复命令
1先对全备应用日志
xtrabackup--prepare--apply-log-only--target-dir=/u01/mysql/mysql8020debug/backup
第一次备份目录下不能包含其他备份文件
xtrabackup--prepare--apply-log-only--target-dir=/u01/mysql/mysql8020debug/backupMultiplefilesfoundforthesametablespaceID:TablespaceID:1=['Full_mysql8020_2021-01-28-23-51-49/sys/sys_config.ibd','sys/sys_config.ibd']TablespaceID:3=['Full_mysql8020_2021-01-28-23-51-49/bookstore/books.ibd','bookstore/books.ibd']TablespaceID:4=['Full_mysql8020_2021-01-28-23-51-49/bookstore/books2.ibd','bookstore/books2.ibd']TablespaceID:4294967278=['Full_mysql8020_2021-01-28-23-51-49/undo_002','undo_002']TablespaceID:4294967279=['Full_mysql8020_2021-01-28-23-51-49/undo_001','undo_001']TablespaceID:4294967294=['Full_mysql8020_2021-01-28-23-51-49/mysql.ibd','mysql.ibd']PlugininitializationabortedwitherrorFailed,retrymaysucceed.xtrabackup:innodb_init():Erroroccured.
移走就OK![root@localhostbackup]#mvFull_mysql8020_2021-01-28-23-51-49/../
Applybatchcompleted!Usingundotablespace'./undo_001'.Usingundotablespace'./undo_002'.Opened2existingundotablespaces.GTIDrecoverytrx_no:10769CreatingsharedtablespacefortemporarytablesSettingfile'./ibtmp1'sizeto12MB.Physicallywritingthefilefull;Pleasewait...File'./ibtmp1'sizeisnow12MB.Scanningtemptablespacedir:'./#innodb_temp/'Created128andtracked128newrollbacksegment(s)inthetemporarytablespace.128arenowactive.8.0.21started;logsequencenumber18216088AllocatedtablespaceID3forbookstore/books,oldmaximumwas0xtrabackup:startingshutdownwithinnodb_fast_shutdown=1FTSoptimizethreadexiting.Startingshutdown...Logbackgroundthreadsarebeingclosed...Shutdowncompleted;logsequencenumber18216088Numberofpools:121020904:24:50completedOK!2对增量1应用日志
xtrabackup--prepare--apply-log-only--target-dir=/u01/mysql/mysql8020debug/backup/--incremental-dir=/u01/mysql/mysql8020debug/backup_increment
进入主备份目录执行
3对增量2应用日志
xtrabackup--prepare--apply-log-only--target-dir=/u01/mysql/mysql8020debug/backup/--incremental-dir=/u01/mysql/mysql8020debug/backup_incr2
4拷贝文件(前提目录为空)
[root@localhost~]#xtrabackup--defaults-file=/u01/mysql/mysql8020debug/my.cnf--host=localhost--user=root--password=123456--port=3306--copy-back--target-dir=/u01/mysql/mysql8020debug/backup/
收尾修改目录权限启动服务
[root@localhostmysql8020debug]#chown-Rmysql:mysql/u01/mysql/mysql8020debug/data[root@localhostmysql8020debug]#chmod-R755/u01/mysql/mysql8020debug/data[root@localhostmysql8020debug]#servicemysqldstartStartingMySQL.....SUCCESS![root@localhost~]#
基于方式二的恢复覆盖方式不实验
1也是先应用全备的日制
xtrabackup--prepare--apply-log-only--target-dir=/FULL_BACKUP
2选择覆盖最后的增量应用日志
xtrabackup--prepare--target-dir=/FULL_BACKUP--incremental-dir=/incr2
3拷贝文件
xtrabackup--defaults-file=/u01/mysql/mysql8020debug/my.cnf--host=localhost--user=root--password=123456--port=3306--copy-back--target-dir=/u01/mysql/mysql8020debug/backup/
chown-Rmysql.mysqldata/
Tips:
--apply-log-only命令应该用在所有增量备份(除最后一次增量备份),这就是为什么恢复脚本中,最后一次的命令不包含--apply-log-only。即使--apply-log-only在最后一次增量备份时被使用,备份仍将是一致的,但在这种情况下,数据库会执行回滚的操作