MySQL备份工具XtraBackup详解(实践)
可以使用XtraBackup全备、增量备份、部分恢复。...
相关文件分析:
1、xtrabackup_checkpoints:备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;
每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。
2、xtrabackup_binlog_info:mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。
3、xtrabackup_binlog_pos_innodb:二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。
4、xtrabackup_binary:备份中用到的xtrabackup的可执行文件;
5、backup-my.cnf:备份命令用到的配置选项信息;
在使用innobackupex进行备份时,还可以使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目录;如此一来,innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据。
针对某个库做全备:
$ innobackupex --defaults-file=/u01/mysql/my.cnf --user=root --password=root --databases="gtdb" /orabak/ms_backup_datas
$ innobackupex --defaults-file=/u01/mysql/my.cnf --user=root --password=root --databases="gzdb szdb fsdb" /orabak/ms_backup_datas
全备并打包:
$ innobackupex --defaults-file=/u01/mysql/my.cnf --user=root --no-timestamp --password=root --databases="gtdb" --stream=tar /orabak/ms_backup_datas/full/ 2>/orabak/ms_backup_datas/full.log | gzip > /orabak/ms_backup_datas/full.tar.gz
解压文件:
$ tar izxvf full.tar.gz
全量备份:
$ innobackupex --user=root --password=root --no-timestamp --defaults-file=/u01/mysql/my.cnf /orabak/ms_backup_datas/full
--no-timestamp表示指定备份目录,不需要用时间来生产目录。
/orabak/ms_backup_datas/full表示备份文件夹,其中/orabak/ms_backup_datas/必须是已经存在。
一次增量备份:
innobackupex --incremental /orabak/ms_backup_datas/inc1 --no-timestamp --incremental-basedir=/orabak/ms_backup_datas/full --user=root --password=root --defaults-file=/u01/mysql/my.cnf
--incremental /orabak/ms_backup_datas/inc1表示增量备份的目录,其中/orabak/ms_backup_datas必须是已经存在。
--incremental-basedir=/orabak/ms_backup_datas/full表示基于该全备做增量备份。
二次增量备份:
innobackupex --incremental /orabak/ms_backup_datas/inc2 --no-timestamp --incremental-basedir=/orabak/ms_backup_datas/inc1 --user=root --password=root --defaults-file=/u01/mysql/my.cnf
--incremental /orabak/ms_backup_datas/inc2表示增量备份的目录,其中/orabak/ms_backup_datas必须是已经存在。
--incremental-basedir=/orabak/ms_backup_datas/inc1表示基于该全备做增量备份。
增量备份还原:
增量备份的还原操作跟完整的还原有点不一样,首先必须使用–apply-log –redo-only对完整备份的目录及所有增量备份目录进行操作,然后就可以像还原完整备份时的操作了。
ApplyLog操作:
$ innobackupex --apply-log --redo-only /orabak/ms_backup_datas/full --user=root --password=root
$ innobackupex --apply-log --redo-only /orabak/ms_backup_datas/full --incremental-dir=/orabak/ms_backup_datas/inc1 --user=root --password=root
$ innobackupex --apply-log --redo-only /orabak/ms_backup_datas/full --incremental-dir=/orabak/ms_backup_datas/inc2 --user=root --password=root
将增量备份应用到全备数据上。因此全备上的数据是全备完整的数据。
完全恢复:
$ innobackupex --copy-back --defaults-file=/u01/mysql/my.cnf /orabak/ms_backup_datas/full
直接复制全备数据至目标库,在恢复之前,需要关库。
全备数据:
$ innobackupex --user=root --password=root --no-timestamp --defaults-file=/u01/mysql/my.cnf /u02/ms_backup_datas/full
数据:
1==>full backup
第一次增备:
$ innobackupex --incremental /u02/ms_backup_datas/inc1 --no-timestamp --incremental-basedir=/u02/ms_backup_datas/full --user=root --password=root --defaults-file=/u01/mysql/my.cnf
数据:
1==>full backup
2==>inc1 backup
第二次增备:
$ innobackupex --incremental /u02/ms_backup_datas/inc2 --no-timestamp --incremental-basedir=/u02/ms_backup_datas/full --user=root --password=root --defaults-file=/u01/mysql/my.cnf
数据:
1==>full backup
2==>inc1 backup
3==>inc2 backup
===================================================================
对全备执行ApplyLog:
$ innobackupex --apply-log --redo-only /u02/ms_backup_datas/full --user=root --password=root
关闭数据库,并删除相关的数据文件。
恢复至第一次增量:
$ innobackupex --copy-back --defaults-file=/u01/mysql/my.cnf /u02/ms_backup_datas/full
此时打数据库,则数据为:
1==>full backup
==================================================================
第一次增量ApplyLog:
继续增量恢复:
$ innobackupex --apply-log --redo-only /u02/ms_backup_datas/full --incremental-dir=/u02/ms_backup_datas/inc1 --user=root --password=root
恢复至第一次增量:
$ innobackupex --copy-back --defaults-file=/u01/mysql/my.cnf /u02/ms_backup_datas/full
在关闭数据库,并删除data_dir目录下面的数据文件后,再次恢复。
基于时间点恢复:
XtraBackup不支持基于时间点的恢复,需要配合对binlog的解析来完成。
关注 我是DBA社区
![](http://a-site.cn/static/down/wx_205x205.png)