工具介绍
Xtrabackup是一个开源的热备工具,在Xtrabackup包中主要又Xtrabackup和innobackupex两个工具。其中Xtrabackup只能备份InnoDB和XtraDB两种引擎;innobackupex则封装了Xtrabackup,同时增加了备份MyISAM引擎的功能。
Xtrabackup备份时不能备份表结构、触发器等,也不能只能区分.ibd数据文件。另外innobackupex还不能完全支持增量备份,需要和Xtrabackup结合起来实现全备的功能。
工具安装
官网下载对应版本(MySQL5.7)地址https://www.percona.com/downloads/Percona-XtraBackup-2.4/LATEST/
下载Linux对应的依赖包
wget http://ftp.pbone.net/mirror/ftp5.gwdg.de/pub/opensuse/repositories/home:/rudi_m:/devel-snap/CentOS_7/x86_64/libev4-4.24-8.1.x86_64.rpm
安装依赖包
yum localinstall libev4-4.24-8.1.x86_64.rpm
解压工具
tar xf Percona-XtraBackup-2.4.20-rc8b4056-el7-x86_64-bundle.tar
安装工具
yum -y install percona-xtrabackup-24-2.4.20-1.el7.x86_64.rpm
备份
命令格式
innobackupex [参数] [目的地址][源地址]
常用参数
1,全量备份
不记录日志
innobackupex --user=root --password=123456 /usr/local/backup/
记录日志
innobackupex --user=root --password=123456 /usr/local/backup/ 2>> /usr/local/backup/backup.log
查看备份信息
cat 2020-06-17_20-51-37/xtrabackup_checkpoints
backup_type = full-backuped表示全量备份,from_lsn同时也等于0
2,全量恢复
停止数据库服务
systemctl stop mysql
删除MySQL数据目录
rm -rf /usr/loca/mysql/data/
合并数据,使数据文件处于一致性的状态
innobackupex --apply-log /usr/local/backup/2020-06-17_20-51-37/
恢复
innobackupex --copy-back /usr/local/backup/2020-06-17_20-51-37/
重新赋予目录权限
chown -R mysql.mysql /usr/local/mysql/data
启动数据库
systemctl start mysql
验证
mysql -p
3,增量备份
增量备份的实现,依赖于InnoDB页上的LSN(log sequence number),每次对数据库的修改都会导致LSN自增。增量备份会复制指定LSN<日志序列号>之后的所有数据页。
增量备份执行命令
innobackupex --user=root --password=123456 --incremental /usr/local/backup/ --incremental-basedir=/usr/local/backup/2020-06-17_20-51-37
--incremental指定备份路径,--incremental-basedir指定以哪个目录为增量
cat 2020-06-17_22-23-26/xtrabackup_checkpoints
可以看到from_lsn和上面全量备份to_lsn序列号一样
4,整合恢复
参数--apply-log --redo-only先合并全备数据目录数据,确保全备数据目录数据的一致性
innobackupex --apply-log --redo-only /usr/local/backup/2020-06-17_20-51-37/
再将增量数据使用参数--incremental-dir合并到全备数据当中
innobackupex --apply-log --redo-only /usr/local/backup/2020-06-17_20-51-37/ --incremental-dir=/usr/local/backup/2020-06-17_22-23-2
停止服务
systemctl stop mysql
通过全备数据恢复数据库,如果有多个增量备份,需要逐一合并到全备数据当中,在进行恢复
innoxtrabackup --copy-back /usr/local/backup/2020-06-17_20-51-37
目录赋权
chown -R mysql.mysql /usr/local/mysql/data
启动服务
systemctl start mysql
验证
mysql -p