## 实验环境


前面我们介绍了Xtrabackup 2.4版本的介绍,这个专题说8.0版本

大体上差不多,不过8.0版本移除了innobackupex命令且只能备份8.0版本的MySQL

关于xtrabackup的介绍,原理及权限等内容这个专题就不介绍了,详情请看如下链接

[XtraBackup工具详解](http://www.zhaibibei.cn/mysql/xtrabackup/)

此次实验的环境如下

- MySQL 8.0.19

- Redhat 7.4

- 操作系统账号:mysql

- 数据库备份账号:backup


## 1. 备份命令

### 1.1 首先新建备份账号


```
mysql> CREATE USER 'backup'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; 

mysql> GRANT BACKUP_ADMIN, PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backup'@'localhost'; 
mysql>GRANT SELECT ON performance_schema.log_status TO 'backup'@'localhost';

mysql> FLUSH PRIVILEGES;
```

### 1.2 建立备份目录

```
shell>mkdir -p /data/mysql/backup
```
注意 mysql用户需要有读写权限,并且该目录需要为空,否则备份失败

### 1.3 首先开始全备

我们用如下方法对MySQL数据库进行全备

```
shell> xtrabackup  -S  /data/mysql/data/mysql.sock --user=backup --password=123456  --backup --target-dir=/data/mysql/backup/base
```


[image:910 size:orig]



可以看到备份文件已经在目录下


### 1.4 然后进行增量备份

```

xtrabackup  -S  /data/mysql/data/mysql.sock --user=backup --password=123456  --backup --target-dir=/data/backups/inc1 --incremental-basedir=/data/backups/base


```


## 2. 备份过程分析

接下来分析下其备份的过程,从输出的日志上来看

### 2.1 命令提示部分

[image:911 size:orig]



上图首先打印出innobackupex可以用的一些参数



### 2.2 连接数据库

[image:912 size:orig]


然后是连接数据库,进入数据文件目录检查参数,之后开始备份

### 2.3 备份系统表空间及innodb引擎数据

[image:913 size:orig]

这部分首先列出数据库中有哪些表空间

- 系统表空间(ibdata)
- undo表空间(undo)
- 用户表空间(innodb_file_per_table开启后每张表和表空间一一对应)

首先拷贝系统表空间文件然后是unod表空间文件,最后是innodb表文件

xtrabackup一直在扫描redo 日志文件以反映数据的变化

注意下日志上提示xtrabackup: Redo Log Archiving is not set up

从MySQL 8.0.17开始支持redo日志归档了,这里我们没有开启



### 2.4 备份非innodb表数据

[image:914 size:orig]

[image:915 size:orig]


这里没有显示加锁,应该是LOCK TABLE FOR BACKUP

之后开始备份非innodb的数据


### 2.5 拷贝二进制文件

[image:916 size:orig]

之后根据performance_schema.log_status来拷贝备份非innodb时期的事物情况以保证数据一致性


### 2.6 完成备份

[image:917 size:orig]


之后解除锁表,拷贝ib_buffer_pool文件(缓冲池文件)

记录binlog 位置信息

写信息值backup-my.cnf及xtrabackup_info 

最后拷贝在备份期间变化的redo日志





## 3. 生成文件说明

通过上面我们看到除了拷贝数据文件外还生成了一些文件

下面我们一一说明

[image:918 size:orig]


### 3.1 backup-my.cnf

[image:919 size:orig]

包含了备份数据库如下信息

- innodb的一些配置信息
- 数据库的server ID
- 数据库服务器的uuid
- master key id(安全相关)


### 3.2 xtrabackup_binlog_info

[image:920 size:orig]

其记录了备份完成时binlog的位置及GTID信息

用于复制的搭建

### 3.3 xtrabackup_checkpoints

该文件对于后续增量备份有用

[image:921 size:orig]


该文件有如下信息

- 备份类型:全备
- 开始LSN:0
- 最后检查点LSN:21068465
- 最后拷贝的LSN:21071219

可以看到to_lsn和last_lsn不同 说明在备份过程中有DML操作

to_last用于增量备份的起点

last_scn用于最后恢复的位置

这些后面介绍

### 3.4 xtrabackup_info

[image:922 size:orig]

该文件包含一些备份的信息就不一一介绍了





## 4. 参考资料

本专题所有内容翻译子Percona XtraBackup的官方文档

可通过如下链接下载

[http://www.zhaibibei.cn/mysql/xtrabackup8/tutorial1/](http://www.zhaibibei.cn/mysql/xtrabackup8/tutorial1/)


[上一章](http://www.zhaibibei.cn/mysql/xtrabackup8/tutorial5/)

[下一章](http://www.zhaibibei.cn/mysql/xtrabackup8/tutorial7/)