由于公司的新业务数据库全面升级到MySQL8.0,老任发现之前5.7的备份脚本出现问题,于是查询了一下MySQL8.0的备份方式,发现有了很大的改变。
之前的备份是需要安装一个xtrabackup包,这个里面封装了一个innobackupex命令,版本也无所谓。
但是对于8.0版本来说,有两点需要注意:
1.安装xtrabackup包之后,没有innobackupex脚本命令了。
2.版本要求。对于MySQL8.0版本,必须安装对应小版本的xtrabackup才可以使用,不然会报错版本不支持问题。
比如我的MySQL版本
$ mysql -V
mysql Ver 8.0.22-13 for Linux on x86_64 (Percona Server (GPL), Release 13, Revision 6f7822f)
那么对应工具的版本应该为
$ xtrabackup -v
xtrabackup: recognized server arguments: --server-id=212196 --tmpdir=/data/mysql_tmp --datadir=/data/mysql/ --log_bin=/data/logs/mysql-bin --open_files_limit=65535 --innodb_flush_method=O_DIRECT --innodb_log_files_in_group=2 --innodb_log_file_size=2G --innodb_flush_log_at_trx_commit=0 --innodb_file_per_table=1 --innodb_buffer_pool_size=4G --innodb_open_files=4096
xtrabackup version 8.0.22-15 based on MySQL server 8.0.22 Linux (x86_64) (revision id: fea8a0e)
#注意这里面是based on MySQL8.0.22的包,所以我们在安装xtrabackup的时候需要安装对应于我们MySQL版本的备份工具
#安装地址,可以在下面的地址找到符合自己MySQL版本的包进行下载,这里我已经自己的8.0.22版本进行下载
https://www.percona.com/downloads/Percona-XtraBackup-LATEST/
#安装下载
wget https://downloads.percona.com/downloads/Percona-XtraBackup-LATEST/Percona-XtraBackup-8.0.22-15/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.22-15.1.el7.x86_64.rpm
yum install -y percona-xtrabackup-80-8.0.22-15.1.el7.x86_64.rpm
#1.备份
xtrabackup --defaults-file=/etc/my.cnf --backup --slave-info --user=$BkpUser --password=$BkpPass --compress --compress-threads=4 --tmpdir=$TMPDIR --socket=/data/mysql/mysql.sock --target-dir=/备份文件存放目录 > 备份过程log输出文件.log 2>&1
#注意一些参数
--slave-info 在从库上备份的时候开启该参数,会生成一个xtrabakcup_slave_info,
该文件会记录备份完成的时候从库执行到主库的哪个位点。
这里顺便提及另外一个文件,xtrabackup_binlog_info,这个加不加该参数都会生成,
该文件记录备份的那台机器上的MySQL自己的binlog执行的位点位置
--compress 启用压缩功能,会将ibd文件压缩成.qp文件,压缩比我自己测试在1:12
--compress-threads=4 启动多少线程去执行压缩
#2.还原
#首先还原的时候需要先进行解压,将.qp文件解压成.ibd文件,这里需要注意安装qpress
#2.1没有qpress,安装qpress
yum -y install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum -y install qpress
#2.2解压
xtrabackup --decompress --parallel=4 --target-dir=/data/backup1
--decompress 解压参数
--parallel 解压的线程数量
#2.3应用redo,类似于之前的apply
xtrabackup --defaults-file=/etc/my.cnf --prepare --use-memory=1G --tmpdir=$TMPDIR --target-dir=${BackupDir}/${DATE_HOUR}
--prepare 恢复应用
--use-memory=1G 分配操作的内存
#2.4 清理.qp文件,因为MySQl在解压的时候会保留原来的.qp文件,老任目前没有发现可以控制的参数
#多个数据目录也要操作,这一步是为了节约空间,也可以不操作
rm -f *.qp
#一般之前都是通过copy-back将生成的文件移动到MySQL数据目录,但是命令太长直接mv就好
mv 备份文件 MySQL数据目录
这路只是对全备进行了解释,因为xtrabackup的增量备份恢复的时候过于麻烦,相信有经验的DBA对于增量备份都会自己去写脚本,下一期再写一篇我的增量备份方式。
最后附上官方文档用法链接:
https://www.percona.com/doc/percona-xtrabackup/LATEST/index.html