docker_mysql主从复制

157 阅读3分钟

1. 创建docker-mysql网络

docker network create mysql_network

2. 创建mysql的master

2.1、创建data和conf配置文件

# 创建文件夹
mkdir -p /usr/local/docker/mysql/master01
cd /usr/local/docker/mysql/master01
# 创建MySQL需要的持久卷
mkdir data 
# 创建MYSQL的配置文件
mkdir conf
vim conf/mysql.cnf
### 输入下列内容
[mysqld]
# 同一个主从模式下,id不能相同
server-id = 1
# 设置同步的文件名
log-bin=mysql-bin
# 防止出现1055异常
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"

2.2、创建docker-compose.yml

version: '3'
services:
  master01:
    restart: always
    image: mysql:5.7.29
    container_name: master01
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - ./data:/var/lib/mysql
      - ./conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf
networks:
  default:
    external:
      name: mysql_network

2.3、启动主库

docker-compose up -d

2.4、创建主库同步用户

image.png

# 创建用户uncle和密码123456
create user 'uncle'@'%' identified by '123456';
# 授权
grant replication slave on *.* to 'uncle'@'%';
# 刷新一下权限
flush privileges;
# 查看master节点状态
show master status;
# 查看二进制日志相关的配置项
show global variables like 'binlog%';
# 查看server相关的配置项是否生效
show global variables like 'server%';

2.5、master节点状态show master status

image.png

2.6、二进制日志相关配置show global variables like 'binlog%'

image.png

2.7、配置文件生效show global variables like 'server%'

image.png

3. 创建slave

3.1 创建data和conf配置文件

# 创建文件夹
mkdir -p /usr/local/docker/mysql/slave01
cd /usr/local/docker/mysql/slave01
# 创建MySQL需要的持久卷
mkdir data 
# 创建MYSQL的配置文件
mkdir conf
vim conf/mysql.cnf
### 输入下列内容
[mysqld]
# 同一个主从模式下,id不能相同
server-id = 2
# 防止出现1055异常
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"

3.2 docker-compose.yml

version: '3'
services:
  slave01:
    restart: always
    image: mysql:5.7.29
    container_name: slave01
    ports:
      - 3307:3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - ./data:/var/lib/mysql
      - ./conf/mysql.cnf:/etc/mysql/conf.d/mysql.cnf

networks:
  default:
    external:
      name: mysql_network

3.3 启动从库

docker-compose -up -d

3.4 工具连接从库

image.png

# 设置连接master
change master to 
    master_host='master01',  # 主库的IP,因为使用了docker隔离机制,所以将其放入同一个网络内,使用服务名来当主机名
	master_user='uncle',    # 主库同步的用户
	master_password='123456', # 密码
	master_port=3306, # 主库的端口
	master_log_file='mysql-bin.000003', # 同步的文件 通过show master status来获取
	master_log_pos=0; # 开始从第几行同步 通过show master status来获取
	
# 启动同步
start slave;

# 查看master状态
show slave status;

3.5 按照上面的从库步骤再建另一个从库

3.6、 显示从库的状态show slave status

image.png

4、主库操作从库同步

image.png

5、重新设置连接master节点

5.1、先停掉一个从库stop slave;

5.2、重新设置连接master节点

# 重新设置连接master节点
reset slave;

# 设置连接master
change master to 
    master_host='master01',  # 主库的IP,因为使用了docker隔离机制,所以将其放入同一个网络内,使用服务名来当主机名
	master_user='uncle',    # 主库同步的用户
	master_password='123456', # 密码
	master_port=3306, # 主库的端口
	master_log_file='mysql-bin.000007', # 同步的文件 通过show master status来获取
	master_log_pos=2023; # 开始从第几行同步 通过show master status来获取
	
# 启动同步
start slave;

# 查看master状态
show slave status;

本内容来源于blog.csdn.net/qq_41967899… 多主多从www.cnblogs.com/tyhj-zxp/p/…