同样的,它也输出了当前的binlog filename和position,如果有gtid(同样也会输出) 可以用于搭建主从.最后一行一定会是你的lsn被copy的信息. 这是因为每次启动备份,都会记录170429 12:54:10 >> log scanned up to (1676085)),然后开始拷贝文件,一般来讲数据库越大拷贝文件是要花费越长的时间,所以说这期间一般情况都会有新的操作,所以说所有文件也可能记录的并不是一个时间点的数据,为了解决数据这个问题,XtraBackup 就会启动一个后台进程来每秒1次的观测mysql的事务日志,直到备份结束.而且把事务日志中的改变记录下来.我们知道事物日志是会重用的(redo log),所以这个进程会把redolog写到自己的日志文件xtrabackup_log,这个后台监控进程会记录所有的事务日志的改变,用于保证数据一致性所.
增量备份:
当我们做过全量备份以后会在目录下产生xtrabackup_checkpoints的文件 这里面记录了lsn和备份方式,我们可以基于这次的全量做增量的备份.
$cat xtrabackup_checkpoints
backup_type = full-backuped
from_lsn = 0
to_lsn = 1676085
last_lsn = 1676085
compact = 0
recover_binlog_info = 0
xtrabackup –backup –target-dir=/data/backup/inc1 –incremental-basedir=/data/backup/base
这个时候xtrabackup也是去打开了xtrabackup_checkpoints文件进行上一次备份的信息查看.这个时候去查看增量备份的xtrabackup_checkpoints也记录了这些信息.
$cat xtrabackup_checkpoints
backup_type = incremental
from_lsn = 1676085
to_lsn = 1676085
last_lsn = 1676085
compact = 0
recover_binlog_info = 0
这也意味着你可以在增量的备份上继续增量的备份.
同样的,xtrabackup也支持压缩(–compress)、加密(–encrypt)、并行(–parallel)等操作,但是和mysqlbackup不同的是这个没有同时的备份binlog,而mysqlbackup是备份了binlog的.
我们来模拟一个恢复的过程深入的了解一下原理.
查看当前数据:
dbadmin@test 03:04:33>select?from t;
+——-+
| ?id ?|
+——-+
| ?1 ?|
+——-+
1 row in set (0.00 sec)
全量备份
$xtrabackup –backup –target-dir=/data/backup/base
模拟增量数据
dbadmin@test 03:07:16>select?from t;
+——-+
| ?id ?|
+——-+
| ?1 ?|
| ?2 ?|
+——-+
2 rows in set (0.00 sec)
进行增量备份:
$xtrabackup –backup –target-dir=/data/backup/inc1 –incremental-basedir=/data/backup/base
模拟无备份操作:
dbadmin@test 03:09:42>select * from t;
+——-+
| ?id ?|
+——-+
| ?1 ?|
| ?2 ?|
| ?3 ?|
+——-+
3 rows in set (0.00 sec)
模拟误操作:
dbadmin@test 03:09:45>truncate table t; Query OK,0 rows affected (0.00 sec)
模拟恢复操作:
step 1:找到误操作的log position
dbadmin@test 03:10:19>show master logs;
dbadmin@test 03:10:47>show binlog events in ‘mysql-bin.000001’;
1333
我们需要分别对全量、增量备份各做一次prepare操作.
xtrabackup –prepare –apply-log-only –target-dir=/data/backup/base
增量
xtrabackup –prepare –apply-log-only –target-dir=/data/backup/base \ –incremental-dir=/data/backup/inc1
如果我们使用它自带的还原命令的时候就要先把data目录给清空.不然就会报如下的错误
$innobackupex –copy-back /data/backup/base/
170429 15:37:19 innobackupex: Starting the copy-back operation
IMPORTANT: Please check that the copy-back run completes successfully.
At the end of a successful copy-back run innobackupex prints “completed OK!”.
innobackupex version 2.4.6 based on MySQL server 5.7.13 Linux (x86_64) (revision id: 8ec05b7) Original data directory /u01/my3307/data is not empty!
(编辑:ASP站长网)
|