Mysql主从复制搭建

利用dokcer搭建一主一从

1.docker拉取镜像

1
docker search mysql

2.docker启动镜像

1
2
3
4
#主机
docker run -p 3301:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
#从机
docker run -p 3302:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

3.配置Master

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
docker exec —it /bin/bash
#配置文件my.cnf
[msyqld]
#同一局域网
server-id=100
#开启二进制日志功能,随便取名
log-bin=master-bin
#二进制日志格式ROW,statement,mixed
binlog-format=ROW
binlog-do-db=数据库名

#重启容器
docker restart mysql-master

#进入容器mysql客户端
mysql —uroot -p123456
#创建用户并授权
CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

4.slave 配置

1
2
3
4
5
6
7
8
9
[mysqld]
#设置唯一server id
server-id=101
#开启二进制日志文件功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin
#relay_log配置中继日志
relay_log=mysql-relay-bin
#设置为只读,该项不设置,表示slave具有读写功能
read_only=1

5.进入Maste客户端

1
2
3
#查看master状态
show master status;
#记住file和position

6.进入slave客户端

1
2
3
4
5
#查找容器ip
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称 | 容器id查询容器的IP

#slave中设置
change master to master_host='172.17.0.3', master_user='slave', master_password='123456', master_port=3306, master_log_file='master-bin.000001', master_log_pos=617, master_connect_retry=30;

master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

1
2
3
4
5
6
7
#查看主从是否开启 当前未开启
show slave status \G;

#开启主从复制
start slave

#Slave_IO_Running 和 Slave_SQL_Running 都是Yes,说明主从复制已经开启。此时可以测试数据同步是否成功

7.如何停止从服务复制功能

1
stop slave;

8.如何重新配置主从

1
2
stop slave;
reset master;