Xtrabackup增量备份探索

Xtrabackup 简介:
     Xtrabackup 是percona公司(mysqlperformanceblog)的开源项目,目的是实现类似innodb官方的热备份工具InnoDB Hot Backup的功能,可以帮助我们对MySQL InnoDB类型的数据库表进行在线热备份。 

Xtrabackup中包含两个工具: 
* xtrabackup - 用于热备份
innodb, xtradb表的工具,不能备份其他表。 
* innobackupex - 对xtrabackup封装的perl脚本,提供了myisam表备份的能力。(能进行整库和数据表备份)。
本文旨在介绍Xtrabackup工具对数据库进行增量备份实践。

优点:

           1、数据库太大没有足够的空间全量备份,作增量备份有效节省空间,且效率高。

           2、支持热备份。备份过程不锁表,不受时间限制,不影响用户使用。

           3、每日备份只产生少量数据,远程备份传输更方便。同时节省空间。

           4、备份恢复基于文件操作,降低直接对数据库操作风险。

           5、备份效率更高,恢复效率更高。


实践探索:
测试之前先备份好数据库!
1、下载:
http://www.percona.com/percona-builds/XtraBackup/XtraBackup-1.0/
选择一个合适的版本。以rpm包为例,xtrabackup-1.0-56.rhel5.x86_64.rpm。
2、安装(必须先安装mysql-client):
   
  
  
  
  1. # rpm -ivh xtrabackup-1.0-56.rhel5.x86_64.rpm 
3、修改数据库配置文件:
   
  
  
  
  1. # vim /etc/my.cnf 
  2.   datadir = /var/lib/mysql/添加或修改:数据库目录)
特别注意:default_table_type = InnoDB (必须改,否则进行增量备份的时候不成功,我测试的时候因为这个折腾了很久)
另外建一个用于数据备份的目录
   
  
  
  
  1. # mkdir  /var/backups 
4、重启数据库:
   
  
  
  
  1. # mysqladmin -u root -p shutdown 
  2. # service mysqld start 
备份策略:
整库备份直接用innobackupex-1.5.1脚本。
只对InnoDB或xtradb表,进行备份直接用xtrabackup。

       由于xtrabackup不能备份表结构,所以备份时首先用innobackupex-1.5.1脚本对数据库进行整库备份。再用xtrabackup进行表备份。分别进行。恢复时也分别进行恢复。如果发生表结构丢失则先使用innobackupex-1.5.1进行恢复,然后再用xtrabackup恢复增量数据。用生成的文件ib*覆盖用innobackupex-1.5.1恢复后的ib*文件。

一、整库备份及恢复。
   备份
    
   
   
   
  1. # innobackupex-1.5.1 --user=root --password=cdqd --defaults-file=/etc/my.cnf   /var/backups/ 
(root为数据库用户名,cdqd为数据库密码,/etc/my.cnf为mysql配置文件所在位置,/var/backups/为备份文件存储目录,执行后会在)
   恢复
 首先停掉数据库,然后删除数据库目录下的所有数据库文件。
首先写日志文件,然后恢复,如下。(注:2010-04-17_22-19-30是自动生成的以备份时间命名的文件夹,恢复时根据情况进行选择)
    
   
   
   
  1. # innobackupex-1.5.1 --apply-log --defaults-file=/etc/my.cnf  /var/backups/2010-04-17_22-19-30 
  2. # innobackupex-1.5.1 --copy-back --defaults-file=/etc/my.cnf  /var/backups/2010-04-17_22-19-30 
使用cd或者ls 命令看看你的数据库目录下是不是有文件了?

修改数据库文件权限,否则无法启动。(这步我是cd到原数据库目录下进行的)
#chown -R mysql:mysql *
重启数据库,开恢复是否成功。

二、全量备份及恢复(使用xtrabackup,仅限InnoDB和xtradb表,且注意mysql配置文件my.cnf中“default_table_type = InnoDB”否则不成功)。
    
   
   
   
  1. #xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/var/backups/base/ 
  执行两次:
    
   
   
   
  1. #xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/var/backups/base 
  2. #xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/var/backups/base 
  将数据库停掉,删除数据库下的ib*(ib开头的所有)文件。将/var/backups/base目录下的ib*文件拷贝到数据库目录。
  设置权限:
    
   
   
   
  1. #chown mysql:mysql ib* 
重启数据库后测试,是否成功。

三、增量备份及恢复(再次强调,xtrabackup做增量仅限InnoDB和xtradb表,且注意mysql配置文件my.cnf中“default_table_type= InnoDB”否则不成功)。

做增量前当然要先进行全量备份,在全量的基础上来进行增量。

首先进行全量备份。
    
   
   
   
  1. # xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/var/backups/base/ 
在全量备份的基础上进行增量。
    
   
   
   
  1. # xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/var/backups/1/ -- 
  2. incremental-basedir=/var/backups/base 
......
(注:/var/backups/1/是每次都需修改的。比如第二次增量就改成/var/backups/2,当然可以写个脚本进行自动备份,备份脚本将陆续奉上......恢复的时候也是一样)

增量恢复。(步骤同全量恢复,只是在执行恢复命令的时候中间多一步)
    
   
   
   
  1. # xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/var/backups/base 
  2. # xtrabackup --target-dir=/backups/base --prepare --incremental-dir=/var/backups/1 
  3. # xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/var/backups/base 
  将数据库停掉,删除数据库下的ib*文件。将/var/backups/base目录下的ib*文件拷贝到数据库目录。
  设置权限:
    
   
   
   
  1. #chown mysql:mysql ib* 
重启后测试。是否成功。

注:备份前先登录数据库,打开一个表看看记录条数,然后进行备份,然后再对表最终的记录进行修改,然后在备份,再测试。
   
附图:
全量备份结果

 

 

增量结果
比较一下增量是不是有效的节省了空间呢?当然我这里测试用的只有 10多M 对于大型数据库则区别就更大了。

 

你可能感兴趣的:(职场,增量,休闲,xtrabackup,探索)