1.XtraBackup备份工具的简介

XtraBackup是Percona公司开源的一款MySQL InnoDB(包括XtraDB,MyISAM)数据库备份工具,基于InnoDB的崩溃恢复功能,由于支持不锁表的在线物理热备而被广泛应用于生产环境。

XBK备份恢复原理:

XBK热备理念就是将备份触发之前的数据都备份,对于备份过程中的新数据也会备份下来,备份过程中的新数据就是Redo Log和Undo Log了,XBK在备份触发的时候会通过CKPT机制刷新脏页数据到磁盘,此时会记录LSN号,而Redo Log中也有对应的LSN号,当我们要恢复数据时,假如说备份时的LSN号是101,备份完后Redo Log中的LSN号是110,那么102-110之间的LSN号对应的事务就是备份过程中产生的新数据,对于新数据已经提交的数据用备份的Redo文件恢复,未提交的数据用Undo文件进行回滚恢复,保证数据的一致性。

XBK备份需要依赖MySQL的主配置文件/etc/my.cnf,如果配置文件不在这个路径需要单独指定。

2.XBK备份工具的安装

1.安装依赖的软件
[root@mysql ~]# yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL

2.安装xbk
[root@mysql ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.12/binary/redhat/7/x86_64/percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm
[root@mysql ~]# yum -y install percona-xtrabackup-24-2.4.12-1.el7.x86_64.rpm	

3.XBK备份工具的使用语法

XBK备份语法格式:innobackupex [--defaults-file=#] [OPTIONS] 备份路径

参数:

  • --defaults-file:指定MySQL配置文件的路径。
  • --apply-log:整理备份,将redo log进行重做,将已提交的事务写到备份的数据文件,对未提交的事务使用undo回滚掉,模拟了CSR的过程,这个参数就是将备份过程中产生的新数据一并写入到备份文件中,保证数据的一致性。
  • --redo-only:这个参数需要配合--apply-log这个参数一起使用,表示在整理备份数据时只执行redo前滚操作,不执行undo回滚操作。
  • --copy-back:恢复数据。
  • -S:指定MySQL socket文件。
  • --stream=tar:开启流备份,备份成tar包。
  • --user-memory=256M:为xbk分配256M的内存进行备份。
  • --parallel=8:并发处理数,一般都是CPU核数的一半。

4.XBK备份前的准备

XBK备份前我们需要进行一些配置,否则备份会失败。

首先要确保MySQL主配置文件在/etc/my.cnf里,如果不在这个路径,备份时需要指定配置文件的路径,如以下所示:通过--defaults-file参数指定配置文件的路径。

[root@mysql ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456  /data/dbbackup/

另外还需要在MySQL的主配置文件中指定客户端使用的MySQL socket文件,否则XBK备份时会报错,提示找不到socket文件。

[root@mysql ~]# vim /etc/my.cnf
[client]
socket=/tmp/mysql.sock

如果不想在主配置文件中指定client的socket文件,那么可以在备份命令中通过-S参数指定socket文件的路径。

[root@mysql ~]# innobackupex --user=root --password=123456 -S /tmp/mysql.sock /data/dbbackup/

5.使用XBK对全库进行备份

5.1.XBK备份全库数据的语法格式

innobackupex --user=数据库账号 --password=数据库密码 --defaults-file=配置文件路径 -S socket文件路径 备份路径

5.2.使用XBK进行全库备份

[root@mysql ~]# innobackupex --user=root --password=123456 /data/dbbackup/

当看到 completed OK! 一行就表示备份成功了。

第87讲:XtraBackup备份工具的核心技术要点及全库备份、恢复案例-LMLPHP

5.3.查看XBK备份的数据文件

XBK备份结束后,会在指定的备份路径生成一个当前时间命名的目录,在这个目录中存放了备份数据库的数据文件。

第87讲:XtraBackup备份工具的核心技术要点及全库备份、恢复案例-LMLPHP

XBK备份出来的就是数据库的数据文件,可以和数据库数据路径的文件进行对比,几乎就是完完全全的cp过来的,除了数据库的备份外,还产生了四个XBK生成的文件。

第87讲:XtraBackup备份工具的核心技术要点及全库备份、恢复案例-LMLPHP

5.4.备份过程中生产的XBK文件

使用XBK备份完成后,会生产四个关于XBK的文件,用于记录一些配置信息。

-rw-r----- 1 root root       63 73 10:58 xtrabackup_binlog_info
-rw-r----- 1 root root      113 73 10:58 xtrabackup_checkpoints
-rw-r----- 1 root root      542 73 10:58 xtrabackup_info
-rw-r----- 1 root root     2560 73 10:58 xtrabackup_logfile
	

1)xtrabackup_binlog_info

该文件会记录备份时刻Binlog的状态信息,包括备份时最近的GTID号以及事件的Position标识位号,可以用来截取Binlog日志。

[root@mysql 2022-07-03_10-58-17]# cat xtrabackup_binlog_info 
mysql-bin.000013	344	e0a2c0cc-f835-11ec-8a3c-005056b791aa:1-79

334就是事件的Position号。

2)xtrabackup_checkpoints

记录XBK备份触发时的checkpoints机制信息。

[root@mysql 2022-07-03_10-58-17]# cat xtrabackup_checkpoints 
backup_type = full-backuped
from_lsn = 0					#上次所到达的LSN号(对于全备就是从0开始,对于增量有别的显示方法)
to_lsn = 6136767				#备份开始时间(ckpt)点数据页的LSN号
last_lsn = 6136776				#备份结束后,redo日志最终的LSN
compact = 0
recover_binlog_info = 0

3)xtrabackup_info

XBK备份时的一些参数信息。

第87讲:XtraBackup备份工具的核心技术要点及全库备份、恢复案例-LMLPHP

4)xtrabackup_logfile

日志文件。

6.模拟故障案例并使用XBK恢复备份的数据

6.1.模拟故障导致数据库损坏

将db_1、db_2、db_3的数据文件删除,然后从XBK备份中恢复数据。

[root@mysql ~]# rm -rf /data/mysql/db_1/
[root@mysql ~]# rm -rf /data/mysql/db_2/
[root@mysql ~]# rm -rf /data/mysql/db_3/

6.2.从XBK备份中恢复数据

1)对redo log进行重做

将redo log进行重做,将已提交的事务写到备份的数据文件,对未提交的事务使用undo回滚掉,模拟了CSR的过程,这一步就是将备份过程中产生的新数据一并写入到备份文件中,保证数据的一致性。

[root@mysql ~]# innobackupex --apply-log /data/dbbackup/2022-07-03_10-58-17/

2)恢复数据

恢复数据非常简单,只需要通过cp命令将数据文件拷贝到数据库目录即可。

[root@mysql ~]# \cp -ra /data/dbbackup/2022-07-03_10-58-17/* /data/mysql/
[root@mysql ~]# chown -R mysql. /data/mysql/
[root@mysql ~]# systemctl restart mysqld

7.自主定义XBK备份文件的名称

在前面看到XBK备份出来的目录是以时间戳定义的,精确到了时分秒,其实也不太友好。

我们可以通过--no-timestamp参数跳过XBK默认的备份文件名,我们自定义XBK的备份文件名称。

[root@mysql ~]# innobackupex --user=root --password=123456  --no-timestamp /data/dbbackup/all_bak_`date +%F`

第87讲:XtraBackup备份工具的核心技术要点及全库备份、恢复案例-LMLPHP

01-10 20:08