xtrbackup备份,及恢复数据
模拟定时任务周日备份数据,周一数据变化,周一crontab定时任务增量备份,周二数据变化,周二crontabl增量备份,然后有人删库,我们进行恢复数据
-
模拟crontab 里的定时任务周日全备
[root@db01 b]#innobackupex --user=root --password=oldboy123 --no-timestamp /b/full
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000028 | 55042 | | | |
+------------------+----------+--------------+------------------+-------------------+
-
模拟周一数据变化
mysql> create table city1 select * from city;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000028 | 188930 | | | |
+------------------+----------+--------------+------------------+-------------------+
-
执行crontabl周一增量备份
[root@db01 b]#innobackupex --user=root --password=oldboy123 --no-timestamp --incremental --incremental-basedir=/b/full /b/inc1
[root@db01 b]#cat /b/full/xtrabackup_checkpoints /b/inc1/xtrabackup_checkpoints
-
再次数据变化
mysql> create table world.city2 select * from world.city;
-
模拟周二增量备份
[root@db01 backup]#innobackupex --user=root --password=oldboy123 --no-timestamp --incremental --incremental-basedir=/b/周一增量路径 /b/周二增量路径
[root@db01 backup]#innobackupex --user=root --password=oldboy123 --no-timestamp --incremental --incremental-basedir=/b/inc1 /b/inc2
-
全备,第一次增量,和第二次增量 3个点都接上才能恢复数据
-
删除mysqldata目录
[root@db01 ~]#rm -fr /application/mysql/data/*
[root@db01 ~]#pkill mysql
-
数据进行恢复
-
恢复数据注意事项:
1 增量备份是不能直接恢复使用,必须要把所有增量合并到同一个全备中,最后进行一次恢复,会读ch文件自动的接到一起, 才能恢复增量(不像别的产品,恢复增量要依次恢复增量),
- 在合并过程中,顺便进行备份的准备,(apply-log),在准备过程中,只有最后一次合并增量redo和undo都应用,中间合并过程只应用redo,只进行前滚,不做回滚,防止lsn号接不上
-
全备准备
--apply-log 回滚和前滚
-- redo-only 之前滚
(只对redo进行应用,就是前滚,因为是热备,有的数据没有提交,innobackup把redo一并备份了.所以要做redo前滚)
[root@db01 ~]#innobackupex --apply-log --redo-only /backup/full
-
把第一次增量合并到全备
合并inc1合并到full中,并且apply-log,只应用redo,不应用undo
--incremental-dir 指定要合并的增量备份路径
[root@db01 b]#innobackupex --user=root --password=oldboy123 --apply-log --redo-only --incremental-dir=/b/inc1 /b/full
-
第二次增量备份合并到全备
合并inc2合并到full中,redo和undo都应用
[root@db01 b]#innobackupex --user=root --password=oldboy123 --apply-log --incremental-dir=/b/inc2 /b/full
-
最后一次进行备份准备
整体full执行apply-log,redo和undo都应用
[root@db01 b]#innobackupex --apply-log /b/full
-
授权重启
[root@db01 /]#chown - R mysql.mysql /application/mysql/data/
[root@db01 /]#/etc/init.d/mysqld start