mysqldump备份方式是采用逻辑备份,其最大的缺陷就是备份和恢复速度都慢,对于一个小于50G的数据库而言,这个速度还是能接受的,但如果数据库非常大,那再使用mysqldump备份就不太适合了。
Xtrabackup是由percona提供的mysql数据库备份工具,这是一款开源的能够对innodb和xtradb数据库进行热备的工具。
特点:
(1)备份过程快速、可靠;
(2)备份过程不会打断正在执行的事务;
(3)能够基于压缩等功能节约磁盘空间和流量;
(4)自动实现备份检验;
(5)还原速度快;
XtraBackup现在最新版本为2.4.7,官方也提供了2.4的版本可供下载,官方链接地址:https://www.percona.com/downloads/XtraBackup/LATEST/可以下载源码编译安装,也可以下载适合的RPM包或使用yum进行安装,如果没有需要特殊定制的,建议直接使用RPM安装或者直接使用二进制文件也可。
一、安装
#下载
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.7/binary/tarball/percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz
#解压
tar xf percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz -C /opt
mv percona-xtrabackup-2.4.7-Linux-x86_64 xtrabackup
#配置环境变量
echo "PATH=/opt/xtrabackup/bin:$PATH" >> /etc/profile
source /etc/profile
二、备份
1.为了数据库的暗转首先要为备份用户设置最小权限
mysql> CREATE USER ‘bkpuser’@’localhost’ IDENTIFIED BY ‘youpasswd’;
mysql> REVOKE ALL PRIVILEGES, GRANT OPTION FROM ‘bkpuser’;
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON . TO ‘bkpuser’@’localhost’;
mysql> FLUSH PRIVILEGES;
2.完全备份
innobackupex –user=DBUSER –password=DBUSERPASS /path/to/BACKUP-DIR/
3.增量备份
innobackupex –incremental /backup –incremental-basedir=BASEDIR
BASEDIR指的是完全备份所在的目录,此命令执行结束后,innobackupex命令会在/backup目录中创建一个新的以时间命名的目录以存放所有的增量备份数据。
另外,在执行过增量备份之后再一次进行增量备份时,其–incremental-basedir应该指向上一次的增量备份所在的目录。
4.恢复备份
准备阶段(prepare)
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。
需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。
执行完全备份的redo:
innobackupex --apply-log --redo-only BASE-DIR
接着执行第一个增量:
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
而后是第二个增量:
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
.....以此类推
还原数据阶段
还原时只需要还原完全备份即可
innobackupex –copy-back /path/to/BACKUP-DIR
三、Xtrabackup的“流”及“备份压缩”功能
Xtrabackup对备份的数据文件支持“流”功能,即可以将备份的数据通过STDOUT传输给tar程序进行归档,而不是默认的直接保存至某备份目录中。要使用此功能,仅需要使用–stream选项即可。如:
innobackupex --stream=tar /backup | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz
例如:innobackupex --user=backuser --password=youpassword --host=127.0.0.1 --port=3306 --stream=tar /backup_test/ | gzip > /backup/`date +%F_%H-%M-%S`.tar.gz
甚至也可以使用类似如下命令将数据备份至其它服务器:
innobackupex --stream=tar /backup | ssh user@backup.host "cat - > /backups/`date +%F_%H-%M-%S`.tar"
同时,innobackupex备份的数据文件也可以存储至远程主机,这可以使用–remote-host选项来实现:
innobackupex --remote-host=root@backup.host /path/IN/REMOTE/HOST/to/backup