仅需10步,docker-compose快速搭建mysql主从同步

1、准备docker-compose脚本

version: "3"
services:
  master:
    image: mysql:5.7.44
    container_name: master
    restart: always
    #容器内赋予root权限
    privileged: true
    ports:
      - 3307:3306
    environment:
      MYSQL_ROOT_PASSWORD: password123.
      #用于从服务器同步
      MYSQL_USER: slave
      MYSQL_PASSWORD: password123.
    volumes:
      #同步时间配置
      - /etc/localtime:/etc/localtime:ro
      #表数据、bin-log,第一次先注释掉,使用docker cp命令从容器里拷贝出数据卷
      #- ./master/data:/var/lib/mysql
      #错误日志、慢日志
      - ./master/logs:/var/log/mysql
    command:
      --server-id=1
      --character-set-server=utf8mb4
      --log-bin=mysql-bin
      --expire_logs_days=30
      --binlog-ignore-db=information_schema
      --binlog-ignore-db=performation_schema
      --binlog-ignore-db=sys
      --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
      --lower_case_table_names=1
      --event_scheduler=ON
      --max_allowed_packet=1024M
      --slow_query_log=1
      --slow_query_log_file=/var/log/mysql/mysql-slow.log
      --long_query_time=8
      --log-error=/var/log/mysql/mysql-error.log
      
  slave:
    image: mysql:5.7.44
    container_name: slave
    restart: always
    #容器内赋予root权限
    privileged: true
    ports:
      - 3308:3306
    environment:
      MYSQL_ROOT_PASSWORD: password123.
      TZ: Asia/Shanghai
      #用于从服务器查询sql,从服务器不要用带有修改权限的账号,免得不小心修改导致数据不同步
      MYSQL_USER: query
      MYSQL_PASSWORD: password123.
    command:
      --server-id=2
      --character-set-server=utf8mb4
      --relay-log=relay-log
      --read-only=ON
      --sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
      --lower_case_table_names=1
      --event_scheduler=ON
      --max_allowed_packet=1024M
      --slow_query_log=1
      --slow_query_log_file=/var/log/mysql/mysql-slow.log
      --long_query_time=8
      --log-error=/var/log/mysql/mysql-error.log
    volumes:
      #同步时间配置
      - /etc/localtime:/etc/localtime:ro
      #表数据、bin-log,第一次先注释掉,使用docker cp命令从容器里拷贝出数据卷
      #- ./slave/data:/var/lib/mysql
      #错误日志、慢日志
      - ./slave/logs:/var/log/mysql

2、启动容器

docker-compose up -d

3、拷贝数据卷

当前路径和目录层级如下:
在这里插入图片描述
执行拷贝数据卷命令:
docker cp master:/var/lib/mysql ./master/mysql && mv ./master/mysql ./master/data && chmod 755 ./master/data
docker cp slave:/var/lib/mysql ./slave/mysql && mv ./slave/mysql ./slave/data && chmod 755 ./slave/data

4、放开注释,重新构建容器

在这里插入图片描述
执行命令: docker-compose up -d

5、在master主数据库中给予slave账号权限

#给slave账号权限
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%';
FLUSH PRIVILEGES;

在这里插入图片描述

6、在master主数据库查看master日志,并记下最后一条记录,从库将从此开始复制

#查看master日志
SHOW MASTER LOGS;

在这里插入图片描述

7、切换到slave从数据库,此时需要用root账户登录,执行如下sql

CHANGE MASTER TO 
#主库ip
MASTER_HOST='192.168.31.229',
#主库端口
MASTER_PORT=3307,
#主库同步账户
MASTER_USER='slave',
#主库同步账户密码
MASTER_PASSWORD='password123.',
#上一个步骤记录的最后一条记录Log_name
MASTER_LOG_FILE='mysql-bin.000003',
#上一个步骤记录的最后一条记录File_size
MASTER_LOG_POS=505; 

在这里插入图片描述

8、查看slave同步设置是否成功

#查看slave状态
SHOW SLAVE STATUS;

在这里插入图片描述

9、若步骤8成功,执行sql开启同步

#开始同步主库
START SLAVE;

在这里插入图片描述

10、验证主从同步,在主库新建数据库test

在这里插入图片描述

从库同步成功,至此主从搭建已成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值