安装
1.1依赖包
yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL libev
1.2下载软件并安装
8.0版本之前,xbk对应版本选择2.4.x,适用于5.7,兼容5.6和5.5
官网:https://www.percona.com/downloads/
https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/
只下载percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm就好
yum -y install percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm
使用前提
检查socket
xbk是服务器端工具,即需要在服务器端备份,确认配置文件中有如下配置信息
[client]
socket=/tmp/mysql.sock
全备
innobackupex --user=root --password=123456 /backup/xbk/
在备份目录子目录中会有相应记录(以时间戳命名)
我们也可以不用默认时间戳,改为方便查看的格式:
innobackupex --user=root --password=123456 --no-timestamp /backup/xbk/full_`date +%Y%m%d`/
差备
innobackupex --user=root --password=123456 --no-timestamp --incremental --incremental-basedir=/backup/xbk/full_`date +%Y%m%d`/
恢复
合并prepare所有inc到全备,恢复数据然后启动数据库
5.1合并
prepare inc到全备,注意合并过程是不可逆的,保险起见可以将文件做个备份
innobackupex --apply-log --redo-only /backup/xbk/full_20210506
此处必须加–redo-only,意思是只应用redo而不应用undo
innobackupex --apply-log --incremental-dir=/backup/xbk/inc_20210506 /backup/xbk/full_20210506
如果这个增量备不是最后一个的话依然要加–redo-only参数,类比sqlserver的with norecovery,对比last_lsn可知有没有合并成功
最后整体再次prepare整个备份
innobackupex --apply-log /backup/xbk/full_20210506
5.2恢复
关闭mysql
mv /data /data_old
cp -r /backup/xbk/full_20210506/ /data
chmod 755 /data
chown -R mysql:mysql /data
再启动mysql
可直接写入脚本:
DAY=6
INCR_DATA=`date '+%u'`
if [ "$INCR_DATA"x = "$DAY"x ]
then
/usr/bin/innobackupex --user=root --password=123456 --no-timestamp /backup/xbk/full_`date +%Y%m%d`/
else
innobackupex --user=root --password=123456 --no-timestamp --incremental --incremental-basedir=/backup/xbk/full_`date +%Y%m%d -d "last saturday"`/ /backup/xbk/inc_`date +%Y%m%d`/
fi
测试只还原单库到其他节点(加快速度):
参考:
https://www.cnblogs.com/xuliuzai/archive/2018/10/12/9780766.html
其实就是将其余的删掉即可