1、简介
XtraBackup是Percona提供的一个开源的、免费的MySQL数据库备份工具,它能够对InnoDB和XtraDB数据库进行热备份,据官方介绍,XtraBackup具有以下特点:
1. 备份过程快速、可靠;
2. 备份过程不会打断正在执行的事务;
3. 能够基于压缩等功能节约磁盘空间和流量;
4. 自动实现备份检验;
5. 恢复速度快。
2、安装XtraBackup
最新版本可以从https://www.percona.com/software/percona-xtrabackup获得。
# yum install https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.2.10/binary/redhat/6/x86_64/percona-xtrabackup-2.2.10-1.el6.x86_64.rpm
3、创建所需用户
# 创建具有所需完整备份最低权限的数据库用户示例:
mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cret';
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'bkpuser'@'localhost';
mysql> FLUSH PRIVILEGES;
4、完全备份
# innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/
# 检查输出最后一行的确认消息
innobackupex: Backup created in directory ’/path/to/BACKUP-DIR/2013-03-25_00-00-09’
innobackupex: MySQL binlog position: filename ’mysql-bin.000003’, position 1946
111225 00:00:53 innobackupex: completed OK!
5、准备(Prepar)一个完全备份
# innobackupex --apply-log /path/to/BACKUP-DIR
111225 1:01:57 InnoDB: Shutdown completed; log sequence number 1609228
111225 01:01:57 innobackupex: completed OK!
# 注意:在实现"准备"的过程中,innobackupex通常还可以使用--use-memory选项来指定其可以使用的内存的大小,默认为100M。如果有足够的内存可用,可以多划分一些内存给prepare的过程,以提高完成速度。
6、从一个完全备份中恢复
# innobackupex命令的--copy-back选项用于执行恢复操作,通过复制所有数据相关的文件到mysql服务器的DATADIR目录中来执行恢复过程。
# innobackupex --copy-back /path/to/BACKUP-DIR
# 如果执行正确,会出现类似几行
innobackupex: Finished copying back files.
111225 01:08:13 innobackupex: completed OK!
# 注意:删除数据目录之前,先停止mysqld服务,然后直接用命令恢复启动即可,不需要重新初始化数据库。当数据恢复到DATADIR目录后,还需要确保所有数据文件的属主和属组均为正确的用户,否则,在启动mysqld之前还需要事先修改数据文件的属主和属组。
# chown -R mysql:mysql /data/mysql
7、增量备份
# 每个InnoDB的页面都会包含一个LSN信息,每当相关的数据发生改变,相关的页面的LSN就会自动增长。这也是InnoDB表可以进行增量备份的基础,即innobackupex通过备份上次完全备份之后发生改变的页面来实现。
创建一个增量备份(需要做一个完全备份为基础):
# innobackupex --user=DBUSER --password=DBUSERPASS --incremental /data/backups --incremental-basedir=BASEDIR
# 其中,BASEDIR指的是完全备份所在的目录,此命令执行结束后,innobackupex命令会在/backup目录中创建一个新的以时间命名的目录以存放所有的增量备份数据。另外,在执行过增量备份之后再一次进行增量备份时,其--incremental-basedir应该指向上一次的增量备份所在的目录。
# 注意:增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表,执行增量备份其实进行的是完全备份。
8、准备增量备份
# "准备"增量备份与完全备份有点不同,需要注意的是:
1. 需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行"重放"。"重放"之后,所有的备份数据合并到完全备份上;
2. 基于所有的备份将未提交的事务进行"回滚"。
操作步骤:
# innobackupex --apply-log --redo-only BASE-DIR
120103 22:00:12 InnoDB: Shutdown completed; log sequence number 1291135
120103 22:00:12 innobackupex: completed OK!
# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
120103 22:08:43 InnoDB: Shutdown completed; log sequence number 1358967
120103 22:08:43 innobackupex: completed OK!
# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
completed OK!
# 其中BASE-DIR指的是完全备份所在的目录,而INCREMENTAL-DIR-1指的是第一次增量备份的目录,INCREMENTAL-DIR-2指的是第二次增量备份的目录,其它依次类推,如果有多次增量备份,每一次都要执行如上操作。