Percona Xtrabackup实现数据库备份和灾难恢复(2)

再做数据修改:
mysql> INSERT INTO mydb1.tb1 (name,age) VALUES ('jason',30);
mysql> SELECT * FROM tb1;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | tom  |  10 |
|  2 | jack  |  20 |
|  3 | jason |  30 |
+----+-------+------+

做第二次增量备份:
[root@mariadb ~]# innobackupex --user=bkuser --password=123456 --incremental /backup/incremental/ --incremental-basedir=/backup/incremental/2015-04-15_16-42-00/
#这里的"--incremental-basedir"是指向第一次增量备份的目录
[root@mariadb ~]# ls /backup/incremental/2015-04-15_16-49-07/
backup-my.cnf  mydb1              test                    xtrabackup_checkpoints
ibdata1.delta  mysql              xtrabackup_binary      xtrabackup_logfile
ibdata1.meta  performance_schema  xtrabackup_binlog_info
[root@mariadb ~]# cat /backup/incremental/2015-04-15_16-49-07/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 1645178 #这是第一次增量的"to_lsn"值
to_lsn = 1645463
last_lsn = 1645463
compact = 0

再来做一次数据修改,以便演示根据二进制日志做时间点的恢复:
mysql> INSERT INTO mydb1.tb1 (name,age) VALUES ('lucky',40);
mysql> SELECT * FROM tb1;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | tom  |  10 |
|  2 | jack  |  20 |
|  3 | jason |  30 |
|  4 | lucky |  40 |
+----+-------+------+

6、灾难恢复
6.1、数据破坏
[root@mariadb ~]# service mysqld stop
Shutting down MySQL.. SUCCESS!
[root@mariadb ~]# rm -rf /mnt/mydata/data/*  #把数据目录数据全部删除

我对于xtrabackup做数据恢复的理解:
xtrabackup做数据恢复与mysqldump这样的逻辑备份工作的恢复有很大的区别,xtrabackup进行数据恢复时需要把各个增量的数据备份与全备份的数据进行合并,对每次增量备份的合并只能将已提交的事务进行重放(redo),对合备份的数据恢复也只能做redo操作,把各个增量都合并完成后再把没有提交的事务进行回滚(undo)操作,合并完增量备份后,全备份的“xtrabackup_checkpoints”文件中的“last_lsn”应该是最后一次增量备份时的值,这些合并做redo的过程就是恢复数据前的准备工作(prepare)。
而真正在做数据恢复,建议先把全备和增量备份的文件都copy一份为副本,避免操作失误导致备份文件的损坏。


6.2、数据恢复的准备(prepare)工作
[root@mariadb ~]# innobackupex --apply-log --redo-only /backup/fullbackup/2015-04-15_16-30-19/
#准备全备份的数据
[root@mariadb ~]# innobackupex --apply-log --redo-only /backup/fullbackup/2015-04-15_16-30-19/ --incremental-dir=/backup/incremental/2015-04-15_16-42-00/
#准备第一次增量数据
[root@mariadb ~]# innobackupex --apply-log --redo-only /backup/fullbackup/2015-04-15_16-30-19/ --incremental-dir=/backup/incremental/2015-04-15_16-49-07/
#准备第二次增量数据
[root@mariadb ~]# cat /backup/fullbackup/2015-04-15_16-30-19/xtrabackup_checkpoints
backup_type = full-prepared
from_lsn = 0
to_lsn = 1645463 #这是最后一次增量备份的位置,到此数据已全部合并
last_lsn = 1645463
compact = 0

6.3、真正数据恢复

[root@mariadb ~]# innobackupex --copy-back /backup/fullbackup/2015-04-15_16-30-19/  #仅一个“--copy-back”选项
[root@mariadb ~]# ls /mnt/mydata/data/
ibdata1  mydb1  mysql  performance_schema  test
[root@mariadb ~]# chown -R mysql.mysql /mnt/mydata/data/  #修改恢复数据的属主与属组
[root@mariadb ~]# service mysqld start
Starting MySQL.. SUCCESS!
mysql> SELECT * FROM mydb1.tb1;  #检查数据
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | tom  |  10 |
|  2 | jack  |  20 |
|  3 | jason |  30 |
+----+-------+------+
#lucky信息还没有恢复

6.4、利用二进制日志文件基于时间点恢复

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/6ead911ca5dca07a8a3e3b0c1016eeb9.html