【mysql】【docker】mysql8-互为主从

🌸🌸 Linux/docker-compose/mysql8 互为主从 优雅部署 🌸🌸

  • 记录下两台Linuxmysql需要热备份,互为主从,后期加上keepalived实现高可用切换

  • 参考博客:答 案

🌸 一、准备文件

在这里插入图片描述

  • 这里有个问题,新版mysql配置文件位置可能有变动,可以安装下进入看下位置,确认下
    • 我这里是/etc/mysql/conf.d/my.cnf,编写docker-compose时不要写错
    • 注意8.0.31my.cnf,有些博主写的mysql.confmysql读取不了
    • 后面启动后查看是否配置成功,若没有,则说明没有成功
      在这里插入图片描述
  1. master(看下注释,不要盲目复制,不然后面更改要重启,麻烦)
[mysqld]
# 设置服务器唯一标识号
server-id=1
# 启用二进制日志,后面是名称,随意更改
log-bin=master-bin
# 指定需要复制的数据库 为空则所有数据库都复制
# binlog-do-db=
# 指定需要忽略的数据库 
binlog-ignore-db=ttt
# 指定二进制日志的格式为行级别
binlog-format=row
# 启用 GTID 模式
gtid-mode=ON
# 强制 GTID 一致性检查
enforce-gtid-consistency=ON
  1. slave(看下注释,不要盲目复制,不然后面更改要重启,麻烦)
[mysqld]
# 设置服务器唯一标识号
server-id=2
# 启用二进制日志,后面是名称,随意更改
log-bin=slave-bin
# 指定需要复制的数据库 为空则所有数据库都复制
# binlog-do-db=
# 指定需要复制的数据库
binlog-ignore-db=ttt
# 指定二进制日志的格式为行级别
binlog-format=row
# 启用 GTID 模式
gtid-mode=ON
# 强制 GTID 一致性检查
enforce-gtid-consistency=ON
  1. docker-compose(注意这里不要用tab进行格式化,请使用空格)
  • master
version: '3'
services:
  mysql-master:
    image: mysql:8.0.31
    container_name: mysql-master
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456  # MySQL root 用户的密码
      MYSQL_DATABASE: ttt  # 要创建的数据库名称
    ports:
      - "3308:3306"  # 映射到从服务器的端口
    volumes:
      - ./mysql-master/data:/var/lib/mysql  # 挂载数据目录
      - ./mysql-master/log:/var/log/mysql  # 挂载日志目录
      - ./mysql-master/config/:/etc/mysql/conf.d/  # 挂载从服务器的配置文件,注意版本,可能不同
    command:
      # 主服务器的命令参数,配置文件写了,这里可以不写,若配置文件没有挂载成功,这里可以写一下
      # --server-id=1 
      # --log-bin=master-bin 
      # --binlog-ignore-db=ttt 
      # --binlog-format=row 
      # --gtid-mode=ON 
      # --enforce-gtid-consistency=ON  

      # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    privileged: true
  • slave
version: '3'
services:
  mysql-slave:
    image: mysql:8.0.31
    container_name: mysql-slave
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123456  # MySQL root 用户的密码
      MYSQL_DATABASE: ttt  # 要创建的数据库名称
    ports:
      - "3310:3306"  # 映射到从服务器的端口
    volumes:
      - ./mysql-slave/data:/var/lib/mysql  # 挂载数据目录
      - ./mysql-slave/log:/var/log/mysql  # 挂载日志目录
      - ./mysql-slave/config/:/etc/mysql/conf.d/  # 挂载从服务器的配置文件,注意版本,可能不同
    command: 
      # 主服务器的命令参数,配置文件写了,这里可以不写,若配置文件没有挂载成功,这里可以写一下
      # --server-id=3
      # --log-bin=slave-bin 
      # --binlog-ignore-db=ttt 
      # --binlog-format=row 
      # --gtid-mode=ON 
      # --enforce-gtid-consistency=ON  

      # 将mysql8.0默认密码策略 修改为 原先 策略 (mysql8.0对其默认策略做了更改 会导致密码无法匹配)
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
    privileged: true

🌸 二、启动容器

  • mysql文件夹下执行
    • docker-compose up -d
    • 也可指定运行哪一个docker-compose up -d mysql-master mysql-slave
    • 看下配置文件有没有挂载成功,以下说明成功,若没有挂载成功,可尝试在docker-composecommand加配置,一样的效果,都是需要重启的,command是启动时设置配置项,文件中已有注释。
      在这里插入图片描述
  • 若需要修改配置文件,修改后重启,查看是否生效
[mysqld]
# 设置服务器唯一标识号
server-id=1
# 启用二进制日志
log-bin=master-bin
# 指定需要复制的数据库
binlog-ignore-db=ttt
binlog-ignore-db=mysql # 新增
binlog-ignore-db=information_schema # 新增
binlog-ignore-db=performance_schema # 新增
# 指定二进制日志的格式为行级别
binlog-format=row
# 启用 GTID 模式
gtid-mode=ON
# 强制 GTID 一致性检查
enforce-gtid-consistency=ON

在这里插入图片描述

🌸 三、配置主从信息

  • 主要两步
  1. 进入主容器,获取主服务器状态信息
#进入容器内部
docker-compose exec mysql-master bash
 
#输入用户密码
mysql -u root -p
 
#为了避免从服务复制出现权限不足的情况需要执行
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
 
# 查看状态
SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+------------------------------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+-------------------+----------+--------------+------------------+------------------------------------------+
| master-bin.000003 |      197 |              | ttt              | d732688d-197d-11ef-b514-0242ac120003:1-6 |
+-------------------+----------+--------------+------------------+------------------------------------------+
  1. 进入从容器,在服务下执行开始监听复制
#进入容器
docker-compose exec mysql-slave bash
 
#输入用户密码
mysql -u root -p
 
#配置从服务器复制
CHANGE MASTER TO MASTER_HOST='192.168.1.xxx', MASTER_USER='root', MASTER_PASSWORD='123456',MASTER_PORT=3310, MASTER_LOG_FILE='master-bin.000003', MASTER_LOG_POS=197;

# 开启复制
START SLAVE;

#查看主从配置状态
SHOW REPLICA STATUS\G;
  • 以下为成功
    在这里插入图片描述

🌸 四、配置互为主从

  • 第三步反过来
  1. 进入从容器,获取主服务器状态信息
  2. 进入主容器,在服务下执行开始监听复制

🌸 五、失败处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值