作者: 沈小然
版本:
文档编号:
日期:2016年 6月 14日
1 介绍Percona XtraBackup软件
Xtrabackup是由percona开发的一个开源软件,代替商业付费软件MySQL Enterprise Backup (InnoDB Hot Backup),这个工具价格是 $5000 per Server,可以在线对InnoDB/XtraDB引擎的表进行物理备份。
Mysql自带的备份工具mysqldump支持在线备份,但是逻辑备份,效率比较差。
Xtrabackup有两个主要的工具:xtrabackup、innobackupex,其中xtrabackup只能备份InnoDB和XtraDB两种数据表,innobackupex则封装了xtrabackup,同时可以备份MyISAM数据表。
l xtrabackup命令:用于热备份innodb(支持事务), xtradb表的工具,不能备份其他表。
l innobackupex命令:对xtrabackup封装的perl脚本,提供了myisam表备份的能力(能进行整库和数据表备份)。
Xtrabackup做备份的时候不能备份表结构、触发器等等,智能纷纷.idb数据文件。另外innobackupex还不能完全支持增量备份,需要和xtrabackup结合起来实现全备的功能。
2 安装Percona XtraBackup
官网下载页面:https://www.percona.com/downloads/XtraBackup/LATEST/
官网在线文档:https://www.percona.com/doc/percona-xtrabackup/2.2/index.html
下载rpm包:
https://www.percona.com/downloads/XtraBackup/XtraBackup-2.0.8/RPM/rhel6/x86_64/percona-xtrabackup-20-2.0.8-587.rhel6.x86_64.rpm
2.1 系统环境
OS: Red Hat Enterprise Linux Server release 6.5 (Santiago)
Mysql:Server version: 5.1.71 Source distribution
注意:rhel6.5版本自带的mysql5.1.71需要使用Percona XtraBackup 2.0系列的版本
2.2 安装libev.so.4()(64bit)依赖
从http://rpmfind.net/linux/rpm2html/search.php上下载libev-4.15-1.el6.rf.x86_64.rpm安装包
# rpm -ivh libev-4.15-1.el6.rf.x86_64.rpm
Preparing... ########################################### [100%]
1:libev ########################################### [100%]
2.3 安装xtrabackup
# rpm -ivh percona-xtrabackup-20-2.0.8-587.rhel6.x86_64.rpm
warning: percona-xtrabackup-20-2.0.8-587.rhel6.x86_64.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
Preparing... ########################################### [100%]
1:percona-xtrabackup-20 ########################################### [100%]
查看安装后的文件位置
# rpm -ql percona-xtrabackup-20-2.0.8-587.rhel6.x86_64
/usr/bin/innobackupex
/usr/bin/innobackupex-1.5.1 -> innobackupex
/usr/bin/xbstream
/usr/bin/xtrabackup
/usr/bin/xtrabackup_51
/usr/bin/xtrabackup_55
/usr/bin/xtrabackup_56
/usr/share/doc/percona-xtrabackup-20-2.0.8
/usr/share/doc/percona-xtrabackup-20-2.0.8/COPYING
3 修改/etc/my.cnf文件,因为XtraBackup根据my.cnf来获取需要备份的mysql数据库文件
# vi /etc/my.cnf
[client] default-character-set = utf8
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 character-set-server = utf8 collation-server = utf8_general_ci
[mysql] no-auto-rehash default-character-set = utf8
[mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid |
4 使用innobackupex命令全备份
innobackupex使用方法
Usage: [innobackupex [--defaults-file=#] --backup | innobackupex [--defaults-file=#] --prepare] [OPTIONS]
# innobackupex --defaults-file=/etc/my.cnf --user=root --password="" /mysql_backup
参数说明:
l --defaults-file=/etc/my.cnf:指定my.cnf配置文件位置
l --user=root:访问mysql的用户
l --password="123qwe":访问mysql的用户口令,当mysql的root口令为空时省略—password参数。
l --slave-info:slave-info可以记录备份恢 复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。
l /mysql_backup:备份位置
l 2>/mysql_backup/ innobackupex.log:记录备份时的输出
l --databases=数据库名:使用这个参数,针对某个数据库进行备份
1) 创建备份位置
# mkdir /mysql_backup
2) Innobackupex全备份
# innobackupex --user=root --slave-info --defaults-file=/etc/my.cnf /mysql_backup
……
160614 16:53:54 innobackupex: completed OK!
最后看见这句话innobackupex: completed OK!就表示备份成功了。
3)查看备份后的数据文件
# ls /mysql_backup/2016-06-14_16-53-35/
backup-my.cnf mysql test xtrabackup_binlog_info xtrabackup_logfile
ibdata1 ra xtrabackup_binary xtrabackup_checkpoints
说明:
xtrabackup_checkpoints:记录的备份类型,例如backup_type = full-backuped
5 使用innobackupex全备份来恢复
1)模拟mysql数据丢失
# /etc/init.d/mysqld stop
# rm -rf /var/lib/mysql/*
2)首先执行—apply-log
# innobackupex --apply-log /mysql_backup/2016-06-14_17-07-36/
3)恢复全部mysql数据,执行—copy-back
# innobackupex --copy-back /mysql_backup/2016-06-14_17-07-36/
验证一下恢复的数据文件
# ls
ibdata1 ib_logfile0 ib_logfile1 mysql ra test xtrabackup_slave_info
恢复数据后的权限是root,需要手动改成mysql.mysql
# chown -R mysql.mysql /var/lib/mysql
最后,启动mysqld服务
# /etc/init.d/mysqld start
恢复全部完成
6 Innobackupex和xtrabackup结合实现全备份+增量
1) 首先使用innobackupex做全备份
# innobackupex --user=root --slave-info --defaults-file=/etc/my.cnf /mysql_backup
2) 使用xtrabackup做增量备份
# xtrabackup --backup --incremental-basedir=/mysql_backup/2016-06-14_17-25-59/ --target-dir=/mysql_backup/2016-06-14_17-25-59-2
说明:
--incremental-basedir:表示使用哪个目录做为全量检查点。
--target-dir:增量数据保存的目录,目录名可以追次变成xxx-2,xxx-3等。
7 恢复Innobackupex和xtrabackup全备份+增量
1) 模拟mysql数据丢失
停止mysqld服务
# /etc/init.d/mysqld stop
删除所有数据
# rm -rf *
2) 执行—apply-log
# innobackupex --apply-log /mysql_backup/2016-06-14_17-25-59
3) 使用xtrabackup将增量备份应用到全备份目录2016-06-14_17-25-59中
# xtrabackup --prepare --incremental-dir=/mysql_backup/2016-06-14_17-25-59-2 --target-dir=/mysql_backup/2016-06-14_17-25-59
# xtrabackup --prepare --incremental-dir=/mysql_backup/2016-06-14_17-25-59-3 --target-dir=/mysql_backup/2016-06-14_17-25-59
说明:
--incremental-dir:表示增量目录,应用增量的时间顺序应该是由早-晚
--target-dir:应用到的全备份目录
4) 恢复全部mysql数据,执行—copy-back
# innobackupex --user=root --copy-back /mysql_backup/2016-06-14_17-25-59
# chown -R mysql.mysql /var/lib/mysql
# /etc/init.d/mysqld start
数据全部恢复完成
8 仅全备份某个数据库
# innobackupex --user=root --defaults-file=/etc/my.cnf --databases=ra /mysql_backup/
# ls 2016-06-14_18-06-20/
backup-my.cnf ibdata1 xtrabackup_logfile xtrabackup_suspended
9 FAQ
9.1 解决“Error: Built-in InnoDB in MySQL 5.1 is not supported in this release. You can either use Percona XtraBackup 2.0, or upgrade to InnoDB plugin.”的错误问题?
# innobackupex --defaults-file=/etc/my.cnf --backup --user=root --password="" /mysql_backup
Error: Built-in InnoDB in MySQL 5.1 is not supported in this release. You can either use Percona XtraBackup 2.0, or upgrade to InnoDB plugin.
这个错误需要重新下载安装Percona XtraBackup 2.0版本来解决。
来源:oschina
链接:https://my.oschina.net/u/86462/blog/691406