(十一)mysql备份之物理备份xtrabackup
(1)备份介绍
(2)下载安装xtrabackup
官网:https://www.percona.com/downloads/XtraBackup/LATEST/
我选择yum安装,centos版本7
wget http://www.percona.com/downloads/percona-release/redhat/0.1-4/\
percona-release-0.1-4.noarch.rpm
rpm -ivH percona-release-0.1-4.noarch.rpm
yum install percona-xtrabackup-24 -y
(3)完全备份与恢复
1)完全备份
- 创建备份账户
mysql> grant reload,process,lock tables,replication client on *.* to backup@localhost identified by 'backup';
mysql> flush privileges;
-
创建完全备份目录
mkdir /mysql/backup-full -pv
- 完全备份
方式一:innobackupex --user=backup --password=backup --host=127.0.0.1 /mysql/backup-full/
方式二:innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backup --socket=/tmp/mysql.sock /mysql/backup-full/
生成目录:/mysql/backup-full/2018-04-24_11-16-17/
2)完全备份恢复
- 停止服务删除数据目录
systemctl stop mysqld
rm -rf /data/mydata/*
- 恢复
innobackupex --apply-log /mysql/backup-full/2018-04-24_11-16-17/
innobackupex --copy-back /mysql/backup-full/2018-04-24_11-16-17/
- 授权与恢复
chown -R mysql.mysql /data/mydata/
systemctl start mysqld
(4)增量备份与恢复
注意:增量备份目录我这里放在/mysql/目录下,完全备份目录放在/mysql/backup-full/目录下
1)完全增量备份
注意:增量备份目录我这里放在/mysql/目录下,完全备份目录放在/mysql/backup-full/目录下
- 准备环境
mysql> create database testdb;
mysql> create table testdb.test(id int);
mysql> insert into testdb.test values(1);
- 完全备份:4月24日
innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backup --socket=/tmp/mysql.sock /mysql/backup-full/
目录下生成:/mysql/backup-full/2018-04-24_12-15-09/
- 第一次增量备份:4月25日增量备份1
修改时间为4月25日:date -s "20180425"
插入数据:mysql> insert into testdb.test values(2);
innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backup --socket=/tmp/mysql.sock --incremental /mysql/ --incremental-basedir=完全备份
基准是完全备份:/mysql/backup-full/2018-04-24_12-15-09/
innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backup --socket=/tmp/mysql.sock --incremental /mysql/ --incremental-basedir=/mysql/backup-full/2018-04-24_12-15-09/
生成增量备份目录:/mysql/2018-04-25_00-01-14/
- 第二次增量备份:4月26日增量备份2
修改时间为4月26日:date -s "20180426"
再次插入数据:mysql> insert into testdb.test values(3);
innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backup --socket=/tmp/mysql.sock --incremental /mysql/ --incremental-basedir=上一次增量备份
基准是上一次增量备份:/mysql/2018-04-25_00-01-14/
innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backup --socket=/tmp/mysql.sock --incremental /mysql --incremental-basedir=/mysql/2018-04-25_00-01-14/
生成增量备份目录:/mysql/2018-04-26_00-00-59/
2)增量恢复
- 停止服务删除数据
systemctl stop mysqld
rm -rf /data/mydata/*
- 数据恢复
innobackupex --apply-log --redo-only 完整备份目录
innobackupex --apply-log --redo-only 完整备份目录 --incremental-dir=第一次增量备份目录
innobackupex --apply-log --redo-only 完整备份目录 --incremental-dir=第二次增量备份目录
innobackupex --copy-back 完整备份
innobackupex --apply-log --redo-only /mysql/backup-full/2018-04-24_12-15-09/
innobackupex --apply-log --redo-only /mysql/backup-full/2018-04-24_12-15-09/ --incremental-dir=/mysql/2018-04-25_00-01-14/
innobackupex --apply-log --redo-only /mysql/backup-full/2018-04-24_12-15-09/ --incremental-dir=/mysql/2018-04-26_00-00-59/
innobackupex --copy-back /mysql/backup-full/2018-04-24_12-15-09/
- 目录授权与启动mysql
chown -R mysql.mysql /data/mydata/
systemctl start mysqld
(5)差异备份恢复
注意:差异备份的基准永远根据上一次完全备份
1)差异备份
- 准备环境
mysql> create database testdb;
mysql> create table testdb.test(id int);
mysql> insert into testdb.test values(1);
- 完整备份:20180424(date -s "20180424")
innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backup --socket=/tmp/mysql.sock /mysql/backup-full/
生成目录:ll /mysql/backup-full/2018-04-24_00-00-08/
- 插入一条数据
mysql> insert into testdb.test values(2);
- 差异备份1:20180425(date -s "20180425")
innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backup --socket=/tmp/mysql.sock --incremental /mysql/ --incremental-basedir=完整备份目录
innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backup --socket=/tmp/mysql.sock --incremental /mysql/ --incremental-basedir=/mysql/backup-full/2018-04-24_00-00-08/
生成目录:/mysql/2018-04-25_00-01-51/
- 插入一条数据
mysql> insert into testdb.test values(3);
- 差异备份2:20180426(date -s "20180426")
innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backup --socket=/tmp/mysql.sock --incremental /mysql/ --incremental-basedir=完整备份目录
innobackupex --defaults-file=/etc/my.cnf --user=backup --password=backup --socket=/tmp/mysql.sock --incremental /mysql/ --incremental-basedir=/mysql/backup-full/2018-04-24_00-00-08/
生成目录:/mysql/2018-04-26_00-00-15/
2)差异备份恢复
- 停止数据和删除数据目录
systemctl stop mysqld
rm -rf /data/mydata/*
- 数据恢复
innobackupex --apply-log --redo-only 完整备份目录
innobackupex --apply-log --redo-only 完整备份目录 --incremental-dir=某个差异备份目录
innobackupex --copy-back 完整备份目录
innobackupex --apply-log --redo-only /mysql/backup-full/2018-04-24_00-00-08/
innobackupex --apply-log --redo-only /mysql/backup-full/2018-04-24_00-00-08/ --incremental-dir=/mysql/2018-04-26_00-00-15/
innobackupex --copy-back /mysql/backup-full/2018-04-24_00-00-08/
- 目录授权与启动数据库
systemctl start mysqld
chown -R mysql.mysql /data/mydata/
systemctl start mysqld