老规矩,开场白,刚开始用mysqldump,备份100G+的数据库,再加上服务器繁忙,备份速度像蜗牛似的,于是寻找更高效的备份方法。网上都说用xtrabackup比较适合备份大的数据库,而且备份效率也高,就尝试使用一次,结果明显感觉比mysqldump 备份与恢复速度就是快不少,那以后就用它了。大礼拜日的在家也没事,结合生产环境,写了这篇文档,刚接触的朋友,可以参考下,不多说,入正题!
mysql> grant reload,lock tables,replication client on *.* to 'bak'@'localhost' identified by 'bak2015';
mysql> flush privileges;
CentOS:
# rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
# yum install percona-xtrabackup
xtrabackup2.2不支持MySQL5.1的Innodb引擎,如需要可安装2.0版本。
Ubuntu:
# sudo apt-get install xtrabackup
14.04默认有这个包,14.04之前版本如果没有在这个地址下载对应的版本。
# innobackupex --user=bak --password='bak2015' /mysql_backup
# innobackupex --defaults-file=/etc/mysql/my.cnf --copy-back /home/loongtao/mysql_backup/2015-02-08_11-56-48/
2.3 备份文件说明
# ls 2015-02-08_11-56-48
# innobackupex --user=bak --password='bak2015' /mysql_backup
备份后位置是:/mysql_backup/2015-02-08_11-56-48
# innobackupex --user=bak --password='bak2015' --incremental /data1/mysql_backup --incremental-basedir=/mysql_backup/2015-02-08_11-56-48 #指定上次完整备份目录
# innobackupex --user=bak --password='bak2015' --incremental /data1/mysql_backup --incremental-basedir=/mysql_backup/2015-02-08_12-16-06 #指定上次增量备份目录
一目了然,可以看到根据日志序号来增量备份
将增量备份1、增量备份2...合并到完整备份,加到一起出来一个新的完整备份,将新的完整备份以拷贝的形式到数据库空目录(rm /var/lib/mysql/* -rf)
xtrabackup把备份过程中可能有尚未提交的事务或已经提交但未同步数据文件的事务,写到xtrabackup_logfile文件,所以要先通过这个日志文件回滚,把未完成的事务同步到备份文件,保证数据文件处于一致性。
# innobackup --apply-log --redo-only 2015-02-08_11-56-48
# innobackupex --apply-log --redo-only /mysql_backup/2015-02-08_11-56-48/ --incremental-dir=mysql_backup/2015-02-08_12-16-06
# innobackupex --apply-log --redo-only /mysql_backup/2015-02-08_11-56-48/ --incremental-dir=mysql_backup/2015-02-08_16-06-53
这时2015-02-08_11-56-48完整备份已经包含所有增量备份,可以通过查看checkpoints来核实
# innobackupex --defaults-file=/etc/mysql/my.cnf --copy-back /mysql_backup/2015-02-08_11-56-48/
# chown -R mysql.mysql /var/lib/mysql
# /etc/init.d/mysqld start
# innobackupex --databases=test --user=bak --password='bak2015' --stream=tar /mysql_backup 2>/mysql_backup/bak.log |ssh root@192.168.18.251 "cat - > /mysql_backup/`date +%F`.tar"
解压:tar -ixvf `date +%F`.tar
# innobackupex --databases=test --user=bak --password='bak2015' --stream=tar /mysql_backup > /mysql_backup/`date +%F`.tar
解压:tar -ixvf `date +%F`.tar
# innobackupex --databases=test --user=bak --password='bak2015' --stream=tar /mysql_backup |gzip >/mysql_backup/`date +%F`.tar.gz
解压:tar -izxvf `date +%F`.tar.gz