Docker搭建Mysql主从复制,最新,最详细
这次搭建Mysql主从复制的时候,遇到不少问题,所以本次重新记录一下,使用Docker搭建一主三从的Mysql
一、Docker-Compose创建4个Mysql容器
1.1 创建对应的映射文件夹和对应的配置文件
mkdir -p /usr/docker/mysql/master3310
mkdir -p /usr/docker/mysql/slave3312
mkdir -p /usr/docker/mysql/slave3313
mkdir -p /usr/docker/mysql/slave3314
其次挨个准备对应的配置文件:my.cnf
其中my.cnf的内容如下所示:
[mysqld]
# 服务器唯一id,默认值1
server-id=3310
# 设置日志格式,默认值ROW
binlog_format=STATEMENT
# 二进制日志名,默认binlog
log-bin=binlog
其余几个以此类推,但是每次记得更改server-id的值
1.2 创建对应yaml文件,Docker-Compose创建4个容器
在这个路径下:/usr/local/mysqlmasterslave.yaml
文件内容如下所示:
version: '3'
services:
mysql1:
image: mysql:5.7
container_name: master3310
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'java2401'
ports:
- '3310:3306'
volumes:
- /usr/docker/mysql/master3310/my.cnf:/etc/mysql/my.cnf
mysql2:
image: mysql:5.7
container_name: slave3312
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'java2401'
ports:
- '3312:3306'
volumes:
- /usr/docker/mysql/slave3312/my.cnf:/etc/mysql/my.cnf
mysql3:
image: mysql:5.7
container_name: slave3313
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'java2401'
ports:
- '3313:3306'
volumes:
- /usr/docker/mysql/slave3313/my.cnf:/etc/mysql/my.cnf
mysql4:
image: mysql:5.7
container_name: slave3314
restart: always
environment:
MYSQL_ROOT_PASSWORD: 'java2401'
ports:
- '3314:3306'
volumes:
- /usr/docker/mysql/slave3314/my.cnf:/etc/mysql/my.cnf
然后执行下面的命令:
docker-compose -f /usr/local/mysqlmasterslave.yaml up -d
等待即可
二 主库配置
需要在主库中,创建主从复制需要的账号,同时完成授权,查看目前的二进制日志信息
连接到主库,执行下面的语句:
-- 在主库中,创建一个账号,用于从库来连接主库
CREATE USER 'slave'@'%'IDENTIFIED BY '123456';
-- 对刚刚的账号,进行授权
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'slave'@'%';
-- 刷新权限
flush privileges;
-- 查看目前主库二进制文件的索引位置
show master status;
在执行下面的命令,查看主库容器对应的ip地址
docker inspect master3310
好了,到这里,我们已经拿到了主库的信息:
1.ip
172.19.0.4
2.端口号
3306
3.账号
slave
4.密码
123456
5.二进制文件
binlog.000003
6.二进制文件的索引
825
三 从库配置
在3个从库中,挨个执行下面的操作:
连接到从库服务器,执行下面的sql语句
-- 设置主库对应的信息
change master to master_host='172.19.0.4', master_user='slave', master_password='123456', master_port=3306,master_log_file='binlog.000003', master_log_pos=825, master_connect_retry=30;
-- 开启主从复制
start slave;
-- 查看从库状态
show slave status;
四 测试主从复制
连接主库,创建新的数据库、表,观察从库是否会自动拥有主库新增的信息