利用xtrabackup实现完全备份及还原
1.下载并安装xtrabackup包
wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.23/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.23-1.el7.x86_64.rpm
yum -y install percona-xtrabackup-24-2.4.23-1.el7.x86_64.rpm
2. 在原主机做完全备份到/backup
[root@centos7 ~]#mkdir /backup
[root@centos7 ~]#xtrabackup -uroot -p123456 --backup --target-dir=/backup/base
#目标主机无需创建/backup目录,直接复制目录本身
[root@centos7 ~]#scp -r /backup/ 目标主机:/backup1
3. 在目标主机上还原
1)预准备:确保数据一致,提交完成的事务,回滚未完成的事务
[root@centos7 ~]#xtrabackup --prepare --target-dir=/backup1/base
2)复制到数据库目录
注意:数据库目录必须为空,MySQL服务不能启动
[root@centos7 ~]#xtrabackup --copy-back --target-dir=/backup1/base
3)还原属性
[root@centos7 ~]#chown -R mysql:mysql /data/mysql
4)启动服务
[root@centos7 ~]#systemctl start mysqld
4.验证
可以查看到目标主机数据库已被还原:
增量+binlog还原
新增数据
第一次增量备份
[root@centos7 ~]#xtrabackup -uroot -p123456 --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base
再次新增数据
第二次增量备份
xtrabackup -uroot -p123456 --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1
拷贝到还原主机
[root@centos7 ~]#scp -r /backup/ 192.168.18.133:/backup/
#备份过程生成三个备份目录
/backup/{base,inc1,inc2}
备份主机开始还原
1)预准备完成备份,此选项--apply-log-only 阻止回滚未完成的事务
[root@centos7 ~]#xtrabackup --prepare --apply-log-only --target-dir=/backup/base
2)合并第1次增量备份到完全备份
[root@centos7 ~]#xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=/backup/inc1
3)合并第2次增量备份到完全备份:最后一次还原不需要加选项--apply-log-only
[root@centos7 ~]#xtrabackup --prepare --target-dir=/backup/base --incrementaldir=/backup/inc2
4)复制到数据库目录,注意数据库目录必须为空,MySQL服务不能启动
[root@centos7 ~]#xtrabackup --copy-back --target-dir=/backup/base
5)还原属性:
chown -R mysql.mysql /data/mysql
6)启动服务:
[root@centos7 ~]#systemctl start mysqld
验证
可以查看到目标主机数据库已被还原:
截至第二次增备的数据都已经恢复,但是第二次增备后原数据库还有可能会写入数据
第二次增备后新增数据:
这时需要用binlog来进行还原
查看二次增备后的binlog 的位置
#将二进制日志拷贝到备份主机
[root@centos7 ~]scp centos7-bin.000002 192.168.18.133:/backup/
#应用Binlog
[root@centos7 backup]# mysqlbinlog /backup/centos7-bin.000002 --start-position=1749 >/backup/binlog.sql
[root@centos7 backup]# mysql -p123456
mysql> set sql_log_bin=0; #关闭Binlog
mysql> source /backup/binlog.sql
mysql> set sql_log_bin=1; #开启Binlog
验证数据
到此利用 xtrabackup+binlog的完全恢复已经完成。