說明:XtraBackup是Percona公司研发的一款备份软件,Percona XtraBackup 8.0支持备份mysql8,之前的Percona XtraBackup 2.x 只能备份到5.7
xtrabackup 備份原理:
备份开始时,首先会开启一个后台检测进程,实时检测mysql redo的变化,一旦发现redo中有新的日志写入,立刻将日志记入后台日志文件xtrabackup_log中。之后复制innodb的数据文件和系统表空间文件ibdata1,待复制结束后,执行flushtables with read lock操作,复制.frm,MYI,MYD,等文件(执行flush tableswith read lock的目的是为了防止数据表发生DDL操作,并且在这一时刻获得binlog的位置)最后会发出unlock tables,把表设置为可读可写状态,最终停止xtrabackup_log。
此处以xtrabackup 8.0,红帽7为例(命令参数与xtrabackup 2.4有区别):
xtrabackup 下载地址:https://www.percona.com/downloads/
安装依赖:
yum install perl-DBI
yum install perl-DBD-MySQL
rpm -ivh libev-4.15-3.el7.x86_64.rpm
rpm -ivh percona-xtrabackup-80-8.0.22-15.1.el7.x86_64.rpm
全库全量備份:
xtrabackup --defaults-file=/etc/my.cnf --no-timestamp --user=root --password=xxxxx --backup --target-dir=/data/xtrabackup/all-20210316.bak
补偿在备份过程中产生的redo日志信息
xtrabackup --prepare --target-dir=/data/xtrabackup/all-20210316.bak
恢复:
关闭数据库
mysqladmin shutdown
再冷备一下数据文件(此处为测试时为防止恢复失败,正式恢复是可以省略)
mv /home/mysql3308/mysql3308 /home/mysql3308/mysql3308bak
mv /data/xtrabackup/all-20210316.bak /home/mysql3308/mysql3308
chown -R mysql:mysql /home/mysql3308
打开数据库
mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &
追加binlog
查看xtrabackup_binlog_info文件获取备份结束时的binlog文件编号和position点位置。
[root@recover-test mysql3308]# cat xtrabackup_binlog_info
mysql-bin.000057 156
解析binlog
mysqlbinlog --no-defaults -vv --start-position=156 /home/mysql3308/mysql3308bak/mysql-bin.000057 > recover.sql
清空GTID,最好先备份 binlog
reset master
应用 binlog
SQL>source recover.sql