实用的innodb备份工具,大家可以试试看。
近来好多人都在使用此备份工具。
1,下载
http://www.percona.com/downloads/XtraBackup/LATEST/RPM/rhel6/x86_64/
可以根据具体系统版本来选择
2,User’s Manual
http://www.percona.com/doc/percona-xtrabackup/2.1/manual.html
3,yum安装各种包
yum install libaio libaio-devel perl-Time-HiRes curl curl-devel zlib-devel openssl-devel perl cpio expat-devel gettext-devel perl-ExtUtils-MakeMaker perl-DBD-MySQL.* package bzr bison ncurses-devel zlib-devel gcc gcc-c++ -y
yum install perl-DB* perl-Time*
4,使用rpm包安装xtrabackup
rpm -ivh ./percona-xtrabackup-2.1.8-733.rhel6.x86_64.rpm
5,检查服务器是否安装了mysql,若没有则需要提前安装。
且my.cnf 中必须有配置datadir=/var/lib/mysql 。若没有配置则可以拷贝一份线上的my.cnf,然后加上此项。
下面开始重头戏讲一下备份的具体情况:
全量备份:innobackupex --user=root --password='' --defaults-file=/data/mysql/server/3307/mysql-5536/my.cnf --port=3307 --socket=/data/mysql/server/3307/mysql-5536/mysql.sock --parallel=8 /data/alldata/
ls -l /data/alldata/2014-03-25_10-48-36 自动创建此时间名称目录
该语句将拷贝数据文件(由my.cnf里的变量datadir指定)至备份目录下(/data/alldata/),注意:如果不指定--defaults-file,默认值为/etc/my.cnf。我的默认配置文件中没有指定datadir,当是以为需要重启数据库,其实不必,只要将配置文件拷贝到某个位置,修改一下,备份时调用即可,我的拷贝到/data下,备份成功后,将在备份目录下创建一个时间戳目录(本例创建的目录为/data/alldata/2014-03-25_10-48-36),在该目录下存放备份文件
增量备份:
增量备份需要基于全备,先假设我们已经有了一个全备(ll /data/alldata/2014-03-25_10-48-36/),我们需要在该全备的基础上做增量备份
innobackupex --defaults-file=/data/mysql/server/3307/mysql-5536/my.cnf --user=root --password='' --port=3307 --socket=/data/mysql/server/3307/mysql-5536/mysql.sock --incremental-basedir=/data/alldata/2014-03-25_10-48-36/ --incremental /data/partdata
innobackupex --defaults-file=/data/mysql/server/3307/mysql-5536/my.cnf --user=root --password='' --port=3307 --socket=/data/mysql/server/3307/mysql-5536/mysql.sock --incremental-basedir=/data/partdata/2014-03-25_10-52-40/ --incremental /data/partdata
[root@NYSJHL65-195 mysql-5536]# ll -tr /data/partdata/
total 8
drwxr-xr-x 6 root root 4096 Mar 25 10:54 2014-03-25_10-52-40 # 第1次基于全量的增量备份
drwxr-xr-x 6 root root 4096 Mar 25 10:57 2014-03-25_10-56-34 # 第2次基于第一增量的增量备份
恢复操作
全量备份的恢复:
恢复之前,要先关闭数据库,并且删除数据文件和日志文件 即默认/var/lib/mysql里面所有内容都清除
innobackupex --user=root --password='' --defaults-file=/data/mysql/server/3307/mysql-5536/my.cnf --port=3307 --socket=/data/mysql/server/3307/mysql-5536/mysql.sock --parallel=8 --use-memory=1G --apply-log /data/alldata/2014-03-25_10-48-36/
innobackupex --user=root --password='' --defaults-file=/data/mysql/server/3307/mysql-5536/my.cnf --port=3307 --socket=/data/mysql/server/3307/mysql-5536/mysql.sock --parallel=8 --copy-back /data/alldata/2014-03-25_10-48-36/
恢复分为两个步骤,第1步是apply-log,为了加快速度,一般建议设置--use-memory,这个步骤完成之后,目录/data/alldata/2014-01-29_09-05-25下的备份文件已经准备就绪第2步是copy-back,即把备份文件拷贝至原数据目录下。
恢复完成之后,要记得检查数据目录的所有者和权限是否正确
chown mysql:mysql /var/lib/mysql 存放数据和表的地方
此时已经恢复到了全量备份的数据
包含增量备份的恢复:
增量备份的恢复:
第一步;
innobackupex --apply-log --redo-only /data/alldata/2014-03-25_10-48-36 --user=root --password='' --defaults-file=/data/mysql/server/3307/mysql-5536/my.cnf --port=3307 --socket=/data/mysql/server/3307/mysql-5536/mysql.sock
innobackupex --apply-log --redo-only /data/alldata/2014-03-25_10-48-36 --incremental-dir=/data/partdata/2014-03-25_10-52-40 --user=root --password='' --defaults-file=/data/mysql/server/3307/mysql-5536/my.cnf --port=3307 --socket=/data/mysql/server/3307/mysql-5536/mysql.sock
innobackupex --apply-log /data/alldata/2014-03-25_10-48-36/ --incremental-dir=/data/partdata/2014-03-25_10-56-34 --user=root --password='' --defaults-file=/data/mysql/server/3307/mysql-5536/my.cnf --port=3307 --socket=/data/mysql/server/3307/mysql-5536/mysql.sock
-----语法------
innobackupex --apply-log --redo-only BASE-DIR
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
innobackupex --apply-log BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
其中BASE-DIR是指全备目录,INCREMENTAL-DIR-1是指第一次的增量备份,INCREMENTAL-DIR-2是指第二次的增量备份,以此类推。
这里要注意的是:最后一步的增量备份并没有--redo-only选项!还有,可以使用--use_memory提高性能。
以上语句执行成功之后,最终数据在BASE-DIR(即全备目录)下。
第二步:拷贝
innobackupex --copy-back /data/alldata/2014-03-25_10-48-36/ --user=root --password='' --defaults-file=/data/mysql/server/3307/mysql-5536/my.cnf
innobackupex --copy-back BASE-DIR ###语法
同样地,拷贝结束之后,记得检查下数据目录的权限是否正确。
chown -R mysql:mysql ${mysqldir}/data ${mysqldir}/logs