## 实验环境


此次实验的环境如下

- MySQL 5.7.25

- Redhat 6.10

- 操作系统账号:mysql

- 数据库复制账号:repl

- 复制格式:基于行的复制


| IP地址 |主从关系|复制账号  |复制格式  |
| --- | --- | --- | --- |
| 11.12.14.29 | 主库 | repl |Row-Based  |
| 11.12.14.30| 从库(半同步)| repl |Row-Based|


这节我们的内容为MySQL的复制,MySQL复制有两种形式

- 基于二进制日志文件位置
- 基于GTID

前面我们已经说完了两种形式的搭建方式,其中备份数据库使用的是mysqldump工具

如果碰到非常大数据库,使用mysqldump进行备份还原是很缓慢的,这时可以使用xtrabackup进行备份和还原

针对xtrabackup我们已经在上一期中说过了,有兴趣的可以去了解


本节内容只针对需要修改的阶段进行说明,其他阶段不变






## 1. 备份主库阶段


这里我们通过xtrabackup工具进行备份,而不是使用mysqldump

```
innobackupex  -S /oradata/data/mysql/data/mysql.sock --user=backup --password=123456   /oradata/data/mysql/xtra
```

备份完成在备份目录下有xtrabackup_binlog_info文件


[image:667 size:orig]



该文件有所需的二进制文件位置及GTID信息


## 2. 拷贝备份文件至备库

```
scp -r /oradata/data/mysql/xtra/2019-06-26_15-03-50 root@11.12.14.30:/oradata/data/mysql/xtra/
```
```
chown -R mysql:mysql /oradata/data/mysql/xtra/2019-06-26_15-03-50
```

## 3.还原从库阶段

这里我们使用xtrabackup工具进行还原,而不是使用mysqldump


```
innobackupex --apply-log --use-memory=1G  /oradata/data/mysql/xtra/2019-06-26_15-03-50 
```
关闭数据库清空数据文件目录后执行copy-back

```
innobackupex --copy-back  /oradata/data/mysql/xtra/2019-06-26_15-03-50
```

## 4. 开启同步

这里根据备份文件的xtrabackup_binlog_info文件的内容进行同步

也可通过datadir目录下的xtrabackup_info文件查看

[image:668 size:orig]


### 4.1 基于二进制文件位置
```
mysql> change master to master_host='11.12.14.29', master_user='repl', master_password='rpl',master_log_file='mysql-bin.000002',master_log_pos= 185333118;
```
```
mysql > start slave;
```

### 4.2 基于GTID的复制

```
mysql> reset master;
```
```
mysql>set  @@GLOBAL.GTID_PURGED='e99ae99a-811d-11e9-9ca2-0050568cef02:1-59387'
```
```
mysql> change master to master_host='11.12.14.29', master_user='repl', master_password='rpl',master_auto_position = 1;
```
```
mysql> start slave
```

## 5. 参考资料


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