您的位置:首页 > 职场人生

Xtrabackup增量备份探索

2010-05-04 11:23 393 查看
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):

# rpm -ivh xtrabackup-1.0-56.rhel5.x86_64.rpm

3、修改数据库配置文件:

# vim /etc/my.cnf
datadir = /var/lib/mysql/[/u](添加或修改:数据库目录)

特别注意:default_table_type = InnoDB (必须改,否则进行增量备份的时候不成功,我测试的时候因为这个折腾了很久)
另外建一个用于数据备份的目录

# mkdir  /var/backups

4、重启数据库:

# mysqladmin -u root -p shutdown
# 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*文件。

一、整库备份及恢复。
备份
# 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是自动生成的以备份时间命名的文件夹,恢复时根据情况进行选择)
# innobackupex-1.5.1 --apply-log --defaults-file=/etc/my.cnf  /var/backups/2010-04-17_22-19-30
# 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”否则不成功)。
#xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/var/backups/base/

执行两次:
#xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/var/backups/base
#xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/var/backups/base

将数据库停掉,删除数据库下的ib*(ib开头的所有)文件。将/var/backups/base目录下的ib*文件拷贝到数据库目录。
设置权限:
#chown mysql:mysql ib*

重启数据库后测试,是否成功。

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

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

首先进行全量备份。
# xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/var/backups/base/

在全量备份的基础上进行增量。
# xtrabackup --defaults-file=/etc/my.cnf --backup --target-dir=/var/backups/1/ --
incremental-basedir=/var/backups/base

......
(注:/var/backups/1/是每次都需修改的。比如第二次增量就改成/var/backups/2,当然可以写个脚本进行自动备份,备份脚本将陆续奉上......恢复的时候也是一样)

增量恢复。(步骤同全量恢复,只是在执行恢复命令的时候中间多一步)
# xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/var/backups/base
# xtrabackup --target-dir=/backups/base --prepare --incremental-dir=/var/backups/1
# xtrabackup --defaults-file=/etc/my.cnf --prepare --target-dir=/var/backups/base

将数据库停掉,删除数据库下的ib*文件。将/var/backups/base目录下的ib*文件拷贝到数据库目录。
设置权限:
#chown mysql:mysql ib*

重启后测试。是否成功。

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

附图:
全量备份结果



增量结果



比较一下增量是不是有效的节省了空间呢?当然我这里测试用的只有 10多M 对于大型数据库则区别就更大了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息