innobackupex: Suspend file '/hotbak/inc/xtrabackup_suspended_2' -- 同时会创建相应的suspended目录供临时使用
? ? ? ? ? ? --........非重要信息忽略........
xtrabackup: using the full scan for incremental backup
[01] Copying ./ibdata1 to /hotbak/inc/ibdata1.delta? ? ? ? ? ? --可以看到生产了相应的delta文件,即增量部分
[01]? ? ? ? ...done? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
>> log scanned up to (391476794)
xtrabackup: Creating suspend file '/hotbak/inc/xtrabackup_suspended_2' with pid '25001'
? --........非重要信息忽略........
141222 14:55:08? innobackupex: Executing FLUSH TABLES WITH READ LOCK...? ? ? ? --这个主要是针对非innodb
141222 14:55:08? innobackupex: All tables locked and flushed to disk
141222 14:55:08? innobackupex: Starting to backup non-InnoDB tables and files? --开始备份非innodb
innobackupex: in subdirectories of '/data/inst3606/data3606'? ? ? ? ? ? ? ? ? --所有的非innodb会被重新备份一次
innobackupex: Backing up files '/data/inst3606/data3606/mysql/*.{frm,isl,MYD,...,CSV,opt,par}' (77 files)
141222 14:55:09? innobackupex: Executing FLUSH ENGINE LOGS...? ? ? ? ? ? ? ? ? --日志切换
141222 14:55:09? innobackupex: Waiting for log copying to finish
xtrabackup: The latest check point (for incremental): '391476794'? ? ? ? ? ? ? --检查点位置
xtrabackup: Stopping log copying thread.
.>> log scanned up to (391476794)
? --........非重要信息忽略........
xtrabackup: Creating suspend file '/hotbak/inc/xtrabackup_log_copied' with pid '25001'
xtrabackup: Transaction log of lsn (391476794) to (391476794) was copied.? ? ? ? --复制事务日志
141222 14:55:10? innobackupex: All tables unlocked? ? ? ? ? ? ? ? ? ? ? ? ? ? ? --表解锁
? --........非重要信息忽略........
141222 14:55:10? innobackupex: completed OK!
d、查看增备后的相关文件
SHELL>? ls -hltr /hotbak/inc/*delta*
-rw-r----- 1 root root 96K 2014/12/22 14:55 /hotbak/inc/ibdata1.delta
SHELL>? more /hotbak/inc/xtrabackup_info|grep ^incremental?
incremental = Y
--文件xtrabackup_checkpoints包含了备份的相关检查点信息
SHELL>? more /hotbak/inc/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 391476482
to_lsn = 391476794
last_lsn = 391476794
compact = 0
--文件xtrabackup_binlog_info包含了binlog的位置
SHELL>? more xtrabackup_binlog_info
inst3606bin.000010? ? ? 874
--再次新增一条记录,看看增备能否恢复
robin@localhost[tempdb]> insert into tb values(3,'Inbinlog');
Query OK, 1 row affected (0.00 sec)
3、恢复增量备份
a、先做基于全备的apply,注意,此时使用了--redo-only
SHELL> innobackupex --apply-log --redo-only --user=robin -password=xxx --port=3606 \
> --defaults-file=/etc/my3606.cnf /hotbak/full
c、进行copy back
SHELL>? mv /data/inst3606/data3606 /data/inst3606/data3606bk --更正@2014122251018,在mv之前建议先关闭实例,即先执行后面的mysqldown
SHELL>? mkdir -p /data/inst3606/data3606
SHELL> mysqldown -P3606? ? --copy back前关闭实例
SHELL> netstat -nltp|grep mysql|grep 3606
SHELL> innobackupex --user=robin -password=xxx --port=3606 --copy-back /hotbak/full --defaults-file=/etc/my3606.cnf
SHELL> chown -R mysql:mysql /data/inst3606/data3606?
--启动恢复后的实例
SHELL> mysqld_safe --defaults-file=/etc/my3606.cnf &
--验证结果
[mysql@app inst3606]$ sql -P3606
--如下查询,由于我们未使用binlog做完全恢复,因此无法查询到id为3的记录
robin@localhost[(none)]> select * from tempdb.tb;
+------+---------+
| id? | val? ? |
+------+---------+
|? ? 1 | fullbak |
|? ? 2 | Incbak? |
+------+---------+
4、小结
a、增量备份是基于增量或全备的基础之上完成的。
b、增量备份的基础是InnoDB引擎使用了LSN机制,非InnoDB引擎不存在增量备份的说法,每次都是全备。
c、对于增量备份的恢复期间需要对已提交的事务前滚,未提交的事务回滚。
d、增量备份的恢复应按照备份的顺利逐个逐个replay,需要使用--apply-log --redo-only选项。
e、仅仅最后一个增量备份不需要使用--redo-only选项。
f、如果要做完全恢复或时点恢复,需要结合binlog来实现。