# mysql主从复制-二级主从
> master1和slave1已经处于主从关系, 现在希望加一个slave2作为slave1的从库,并设置延迟复制。 这样做有如下几个好处:
> 1. 不会增加master1服务器压力
> 2. 能保证slave1的及时同步速度
> 3. 保证master1数据误操作时可以从slave2快速回滚
## 创建数据库
``` linux
# 对应master1, 主库
docker run --name mysql1 -d \
-v /Users/chenpeng/docker/mysql1/data:/var/lib/mysql \
-v /Users/chenpeng/docker/mysql1/logs:/var/log/mysql/ \
-v /Users/chenpeng/docker/mysql1/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai \
-p 3306:3306 \
mysql:5.7.19 \
--character-set-server utf8mb4 --collation-server utf8mb4_general_ci
```
``` linux
# 对应slave1, 一级从库
docker run --name mysql2 -d \
-v /Users/chenpeng/docker/mysql2/data:/var/lib/mysql \
-v /Users/chenpeng/docker/mysql2/logs:/var/log/mysql/ \
-v /Users/chenpeng/docker/mysql2/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai \
-p 3307:3306 \
mysql:5.7.19 \
--character-set-server utf8mb4 --collation-server utf8mb4_general_ci
```
``` linux
# 对应slave2, 二级从库, 主库是slave1
docker run --name mysql3 -d \
-v /Users/chenpeng/docker/mysql3/data:/var/lib/mysql \
-v /Users/chenpeng/docker/mysql3/logs:/var/log/mysql/ \
-v /Users/chenpeng/docker/mysql3/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
-e TZ=Asia/Shanghai \
-p 3308:3306 \
mysql:5.7.19 \
--character-set-server utf8mb4 --collation-server utf8mb4_general_ci
```
## 编辑配置文件
``` linux
# 三个my.cnf配置文件基本差不多
[mysqld]
log-bin=mysql-bin
# mysql1[server-id]=1, mysql2[server-id]=2, mysql3[server-id]=3
server-id=1
gtid_mode=ON
enforce-gtid-consistency=ON
slave-skip-errors = 1032,1062
skip_slave_start=1
expire_logs_days=7
# 只有mysql2需要开启
# log_slave_updates=ON
## 配置完成后, 需要重启下mysql服务
```
## 同步账号设置
``` linux
# mysql1执行
grant replication slave on *.* to 'slave2'@'172.17.0.1' identified by '123456';
# mysql2执行
change master to master_host='172.17.0.1', master_user='slave2',master_port=3306,master_password='123456';
start slave;
grant replication slave on *.* to 'slave3'@'172.17.0.1' identified by '123456';
# mysql3执行
change master to master_host='172.17.0.1', master_user='slave3',master_port=3307,master_password='123456';
start slave;
```
## 总结
一个主从同步正常情况下,从库同步数据是不会产生binlog日志,所以没有办法再成为其他从库的主库, 需要在配置文件添加 `log_slave_updates=ON` 来开启binlog日志, 这就是二级复制的关键, 在多级复制下, 也是这样。