基于xtrabackup的Point-In-Time Recovery备份恢复

摘要:本文的目的是利用Xtrabackup工具,通过解析Binary log来实现Full-Backup,Incremental-Backup以及Point-In-Time Recovery.

一、Xtrabackup

Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具Innodb Hotbakcup的一个很好的替代品。考虑到以前1.6版本增量备份的BUG(不能备份在增量期间的表结构,经测试这个BUG2.0已经解决),以及游戏服务器的MYQL版本为Percona Server 5.5.15, 本文测试使用的是2.0版本. Xtrabackup有两个主要的工具:xtrabackupinnobackupex,其中xtrabackup只能备份InnoDBXtraDB 两种数据表,innobackupex则封装了xtrabackup,同时可以备份MyISAM数据表。本文测试使用了innobackupex的完全备份、增量备份和 恢复。

Innobackupex完整备份后生成了几个重要的文件:

xtrabackup_binlog_info:记录当前最新的LOG Position

xtrabackup_binlog_pos_innodb:innodb log postion

xtrabackup_checkpoints: 存放备份的起始位置beginlsn和结束位置endlsn,增量备份需要这个lsn

二、测试环境

OS: Red Hat 4.1.2-52

Mysql: Server ver: 5.1.63

INNODB: innodb_data_file_pat | ibdata1:10M:autoextend

BINLOG:开启binlog日志,设置expire_logs_days=3,保留三天的Binlog,让mysql server自动维护Binlog日志文件。

 

考虑到公司172.16.10.24测试服务器硬盘只有10G,测试环境移到本机VM server



三、备份

1)完整备份(Full Backup

当前测试的服务器为三国游戏服,binlog在在测试服上原先没有开启,日志的大小暂时忽略,全库的大小约为3G


创建完整备份集


/home/backup_data/full 目录中找到bakup.log文件可以看到整个执行过程约为6分钟



 

2)增量备份(Incremental Backup)

先在TEST库中创建一张USER_BAK


再到tab表中插入几条数据


通过show binlog events 可以看到当前的END_LOG_POS1285


 

执行增量备份



可以看到增量备份数很快,差不多1分半钟就完成了。

 

四、恢复数据库

重要 :拷贝DATADIR下的Binlog文件

[root@nod1 mysqldata]# cp mysql-bin* /home/backup_data/

1)恢复到在增量备份的时间点

按照以下步骤恢复数据库

1)service mysql stop #停止MYSQL服务

2) mv mysqldata /home/mysqldata_bak01   #移动原MYSQL目录

3) mkdir mysqldata #创建新DATADIR目录

4)innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only /home/backup_data/full/2012-05-30_17-55-39 --user=root --password=aaaa1111   #Prepare完整备份集合

4)innobackupex --defaults-file=/etc/my.cnf --apply-log --redo-only /home/backup_data/full/2012-05-30_17-55-39 --incremental-dir=/home/backup_data/incre/2012-05-30_18-17-07 --user=root --password=aaaa1111    #Prepare 增量备份集

5)innobackupex --defaults-file=/etc/my.cnf --copy-back /home/backup_data/full/2012-05-30_17-55-39    #执行恢复操作

6)chown -R mysql:mysql mysqldata #更改DATADIR目录属主

7)service mysql start #重启MYSQL服务

注意:xtrabackup全备不会备份Binlig文件集

 

登录MYSQL数据库


可以看到之前做的插入和创建表都恢复过来了

2)恢复到最新时间

利用完整备份和Innodbbinlog文件把数据库恢复到最新时间,可以保证因宕机引起的数据丢失最小化,下面是具体的操作步骤

由于之前的完整备份已经被增量备份日志做了应用,所以要重新做一个完整备份


执行上面步骤,备份完整数据库


Binlog position567

这个pos也可以在FULL目录下的xtrabackup_binlog_info看到


 

更改数据库,分别执行,DELETE,UPDATE,INSERT,CREATE,DROP操作


 

备份binlog日志文件


 

停止Mysql数据库


删除原Datadir目录


创建Datadir目录


Prepare完整备份集


执行恢复操作

你可能感兴趣的:(backup)