使用Xtrabackup备份恢复mysql

安装Xtrabackup

1
2
3
4
# 安装Percona的repository
yum install -y http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm
#安装xtrabackup
yum install percona-xtrabackup-24 -y

建立并授权数据库备份账号

1
2
3
4
mysql> CREATE USER 'bkpuser'@'localhost' IDENTIFIED BY 's3cret';
mysql> GRANT RELOAD, LOCK TABLES, PROCESS, REPLICATION CLIENT ON *.* TO
'bkpuser'@'localhost';
mysql> FLUSH PRIVILEGES;

配置备份存放位置

1
2
3
vim /etc/my.cnf
[xtrabackup]
target_dir = /data/backups/mysql/ #或者在命令行指定参数--target-dir=/data/backups/mysql

完全备份

全量备份

1
2
xtrabackup --user=bkpuser --password=s3cret --backup --target-dir=/data/backups/
#将数据备份到/data/backups,如果目录不存在将创建,如果目录存在且不是空目录,则会备份失败

全量备份的数据恢复

1
2
3
4
5
6
7
8
9
1.准备恢复文件
xtrabackup --prepare --target-dir=/data/backups/
#过程不能中断,中断会无法保证恢复数据有效性
2.恢复备份
#恢复前关闭MySQL服务,并保证恢复的目录是空的
xtrabackup --copy-back --target-dir=/data/backups/
或者
rsync -avrP /data/backups/ /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql

增量备份

先做全量备份
1
xtrabackup --user=bkpuser --password=s3cret --backup --target-dir=/data/backups/base
基于全量备份做增量备份
1
2
xtrabackup --user=bkpuser --password=s3cret --backup --target-dir=/data/backups/inc1 --incremental-basedir=/data/backups/base
xtrabackup --backup --target-dir=/data/backups/inc2 --incremental-basedir=/data/backups/inc1

增量备份的数据恢复

准备数据

a.准备全量备份的数据

1
2
xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base
#--apply-log-only是必须的,放在回滚,导致备份不可用

b.准备增量备份的数据

1
xtrabackup --prepare --apply-log-only --target-dir=/data/backups/base --incremental-dir=/data/backups/inc1

c.以此类推,准备最后一个增量备份数据(注意最后一个增量文件可以不需要 参数–apply-log-only )

1
xtrabackup --prepare --target-dir=/data/backups/base --incremental-dir=/data/backups/inc2

2.恢复备份

1
2
3
4
5
#恢复前关闭MySQL服务,并保证恢复的目录是空的
xtrabackup --copy-back --target-dir=/data/backups/
或者直接拷贝
rsync -avrP /data/backup/ /var/lib/mysql/
chown -R mysql:mysql /var/lib/mysql