Mysql 复制一主多从

1、启动3个Mysql 容器

使用docker-compose.yml  配置如下

version: "3"
services:
  mysql-master:
    image: mysql:8.0.25
    ports:
      - 33061:3306
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_0900_ai_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --local_infile=1
      --log_bin_trust_function_creators=TRUE
    environment:
       - MYSQL_ROOT_PASSWORD=Mysoft95938
    security_opt:
      - seccomp:unconfined
    volumes:
      - ./mysql/data/master:/var/lib/mysql
  mysql-slave1:
    image: mysql:8.0.25
    ports:
      - 33062:3306
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_0900_ai_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --local_infile=1
      --log_bin_trust_function_creators=TRUE
    environment:
       - MYSQL_ROOT_PASSWORD=Mysoft95938
    security_opt:
      - seccomp:unconfined
    volumes:
      - ./mysql/data/slave1:/var/lib/mysql
  mysql-slave2:
    image: mysql:8.0.25
    ports:
      - 33063:3306
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_0900_ai_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --local_infile=1
      --log_bin_trust_function_creators=TRUE
    environment:
       - MYSQL_ROOT_PASSWORD=Mysoft95938
    security_opt:
      - seccomp:unconfined
    volumes:
      - ./mysql/data/slave2:/var/lib/mysql

启动命令docker-compose up

2、配置主容器

进入主Mysql容器docker exec -it <容器id> /bin/bash 修改 /etc/mysql/my.cnf 加入下面配置

#binlog 的复制方式混合
inlog_format = MIXED
# 服务唯一id
server-id=100  
# 开启二进制日志
log-bin=mysql-bin

3、exit 命令退出容器 重启容器docker restart <容器id>

4、进入主Mysql 容器,进入数据库mysql -u root -p <数据库密码>

5、创建复制账号

CREATE USER 'slave1'@'%' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave1'@'%';

6、查询主容器Mysql 文件位置点

show master status;

7、配置从库文件 

进入从库Mysql修改 /etc/mysql/my.cnf 加入下面配置

[mysqld]
## 设置server_id,注意要唯一
server-id=101  
## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
log-bin=mysql-slave-bin   
## relay_log配置中继日志
relay_log=edu-mysql-relay-bin  

8、退出容器重启

9、进入从容器Mysql告诉从容器要复制的主库以及日志还有文件的位置点

change master to master_host='172.17.0.2', master_user='slave1', master_password='123456', master_port=33061, master_log_file='mysql-bin.000001', master_log_pos= 683, master_connect_retry=30;

10、查看从库复制的状态

show slave status \G;

11、启从库复制 start slave; 如果I/O 线程和SQL 线程为YES 说明复制开启成功

Slave_IO_Running:YES

Slave_SQL_Running:YES

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值