基于docker-compsoe.yml配置mysql8.0主从 (需要进入主从容器执行命令)

news/2024/11/8 4:32:39/

基于docker-compsoe.yml配置mysql主从 (需要进入主从容器执行命令)

  1. 主my.cnf文件

    [mysqld]
    user=mysql                     # MySQL启动用户
    default-storage-engine=INNODB  # 创建新表时将使用的默认存储引擎
    character-set-server=utf8mb4      # 设置mysql服务端默认字符集
    pid-file        = /var/run/mysqld/mysqld.pid  # pid文件所在目录
    socket          = /var/run/mysqld/mysqld.sock # 用于本地连接的socket套接字
    datadir         = /var/lib/mysql              # 数据文件存放的目录
    #log-error      = /var/log/mysql/error.log
    #bind-address   = 127.0.0.1                   # MySQL绑定IP
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 定义mysql应该支持的sql语法,数据校验等!
    # 允许最大连接数
    max_connections=200# ================= ↓↓↓ mysql主从同步配置start ↓↓↓ =================# 同一局域网内注意要唯一
    server-id=3306
    # 开启二进制日志功能 & 日志位置存放位置`/var/lib/mysql`
    #log-bin=mysql-bin
    log-bin=/var/lib/mysql/mysql-bin
    # binlog格式
    # 1. STATEMENT:基于SQL语句的模式,binlog 数据量小,但是某些语句和函数在复制过程可能导致数据不一致甚至出错;
    # 2. MIXED:混合模式,根据语句来选用是 STATEMENT 还是 ROW 模式;
    # 3. ROW:基于行的模式,记录的是行的完整变化。安全,但 binlog 会比其他两种模式大很多;
    binlog_format=ROW
    # FULL:binlog记录每一行的完整变更 MINIMAL:只记录影响后的行
    binlog_row_image=FULL
    # 日志文件大小
    # max_binlog_size=1G
    max_binlog_size=100M
    # 定义清除过期日志的时间(这里设置为7天)
    expire_logs_days=7# ================= ↑↑↑ mysql主从同步配置end ↑↑↑ =================[mysql]
    default-character-set=utf8mb4[client]
    default-character-set=utf8mb4  # 设置mysql客户端默认字符集
  2. 从my.cnf文件

    
    [mysqld]
    user=mysql                     # MySQL启动用户
    default-storage-engine=INNODB  # 创建新表时将使用的默认存储引擎
    character-set-server=utf8mb4      # 设置mysql服务端默认字符集
    pid-file        = /var/run/mysqld/mysqld.pid  # pid文件所在目录
    socket          = /var/run/mysqld/mysqld.sock # 用于本地连接的socket套接字
    datadir         = /var/lib/mysql              # 数据文件存放的目录
    #log-error      = /var/log/mysql/error.log
    #bind-address   = 127.0.0.1                   # MySQL绑定IP
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION # 定义mysql应该支持的sql语法,数据校验等!# 允许最大连接数
    max_connections=200# ================= ↓↓↓ mysql主从同步配置start ↓↓↓ =================# 同一局域网内注意要唯一,从库只需要设置 server_id 即可
    server-id=3307# ================= ↑↑↑ mysql主从同步配置end ↑↑↑ =================[mysql]
    default-character-set=utf8mb4[client]
    default-character-set=utf8mb4  # 设置mysql客户端默认字符集
  3. 主要的yml配置

    version: '3'# 网桥 -> 方便相互通讯
    networks:mysql:driver: bridgeservices:mysql-master:image: mysql  #镜像container_name: mysql-master                                 # 容器名为'mysql-master'restart: unless-stopped                                       # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器volumes:                                                      # 数据卷挂载路径设置,将本机目录映射到容器目录- "./mysql/master/my.cnf:/etc/mysql/my.cnf"- "./mysql/master/data:/var/lib/mysql"#      - "./mysql/master/conf.d:/etc/mysql/conf.d"- "./mysql/master/log/mysql/error.log:/var/log/mysql/error.log"- "./mysql/master/mysql-files:/var/lib/mysql-files"environment:                        # 设置环境变量,相当于docker run命令中的-eTZ: Asia/ShanghaiLANG: en_US.UTF-8MYSQL_ROOT_PASSWORD: "123456"         # 设置root用户密码ports:                              # 映射端口- "3306:3306"networks:- mysqlmysql-slave:image: mysql  #镜像container_name: mysql-slave                                  # 容器名为'mysql-slave'restart: unless-stopped                                       # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器volumes:                                                      # 数据卷挂载路径设置,将本机目录映射到容器目录- "./mysql/slave/my.cnf:/etc/mysql/my.cnf"- "./mysql/slave/data:/var/lib/mysql"#      - "./mysql/slave/conf.d:/etc/mysql/conf.d"- "./mysql/slave/log/mysql/error.log:/var/log/mysql/error.log"- "./mysql/slave/mysql-files:/var/lib/mysql-files"environment:                        # 设置环境变量,相当于docker run命令中的-eTZ: Asia/ShanghaiLANG: en_US.UTF-8MYSQL_ROOT_PASSWORD: "123456"     # 设置root用户密码ports:                              # 映射端口- "3307:3306"depends_on:- mysql-masternetworks:- mysql
  4. 主容器的操作

    1. 进入主mysql容器 3306端口的
      docker exec -it 容器id /bin/bash
    2. 登录mysql
      mysql -uroot -proot
    3. 创建主从复制的账号 - 创建用户slave,密码123456
      CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    4. 授权主从复制
      GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    5. 刷新权限
      FLUSH PRIVILEGES;
    6. 查看状态
      show master status;
      +------------------+----------+--------------+------------------+-------------------+
      | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
      +------------------+----------+--------------+------------------+-------------------+
      | mysql-bin.000003 |      839 |              |                  |                   |
      +------------------+----------+--------------+------------------+-------------------+
      
    7. 记住File 和 Position下面的值的值
  5. 配置从库

    1. 进入主mysql容器 3307端口的
      docker exec -it 容器id /bin/bash

    2. 登录mysql
      mysql -uroot -proot

    3. 执行主从授权命令

      change master to master_host='我们3306的id或者域名',master_port=3306, master_user='slave', master_password='123456', master_log_file='mysql-bin.000003', master_log_pos= 839, get_master_public_key=1,master_connect_retry=30;
      

      master_log_file='mysql-bin.000003',和master_log_pos= 839就是我们刚刚记住的值

    4. 开启主从同步
      start slave;

    5. 查询结果
      show slave status \G

    6. 代表成功的标识

      Slave_IO_Running: Yes
      Slave_SQL_Running: Yes
      

此时这样就成功了!!!


http://www.ppmy.cn/news/911140.html

相关文章

Java 洛谷 P1615 西游记公司

题目描述: 题目链接:https://www.luogu.com.cn/problem/P1615 代码实例: import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);String str1 scanner.next();…

模拟——玩具谜题(洛谷 P1563)

模拟算法指的是让程序完整地按照题目叙述的方式运行得到答案! 此题选自洛谷P1563 简单的模拟,类似约瑟夫问题的部分,采用取余的方式。 需要注意的是朝向问题,用一个结构体来保存每个人的朝向即可。 题目描述 小南有一套可爱的玩具…

还记得月入1.9亿的《开心消消乐》吗?解锁中老年游戏产业掘金新姿势

记者丨黄小米 开篇:60后玩家人均充值金额是00后3倍 如果你在百度上搜索“消消乐”加“妈妈”,你会看到成千上万条妈妈们与《开心消消乐》的爱恨情仇,还有孩子们对沉迷于游戏的妈妈们的不解、吐槽、担忧…… 你可能想不到,就是这…

三只小猪称体重

三只小猪比体重(程序流程控制学习) 输入三只小猪的体重&#xff0c;比较大小。 C代码&#xff1a; 方法一&#xff1a;条件判断 #include<iostream>; using namespace std; int main() {int num1 0, num2 0, num3 0;cout << "请输入第一只小猪A的重量&am…

唐门的竹林伪原创工具

摘要&#xff1a;伪原创工具 2012年06月19日伪原创工具以前我很不理解还有测试架构师这个职位&#xff0c;下午1700&#xff0c;她正和几个网友组织今晚的泡吧伪原创工具点评&#xff0c;让我深有体会&#xff0c;如果一个项目中有这样的角色&#xff0c;伪原创工具长期以来一直…

大猪和小猪的故事

大猪和小猪的故事 1. 小猪轻轻问大猪,:”小猪丢了,大猪怎么办?” 大猪对小猪说:”小猪丢了,大猪先心丢,后魂丢,再人丢...找不到小猪,大猪跟着丢! 小猪什么都没说,她想着以后一定好好看着自己不把自己弄丢了,即使再跑了也把大猪拖着一起私奔,这样的话,…

模拟:洛谷P1563 玩具谜题

总结&#xff1a; 某些需要搜索的情况下&#xff0c; 使用数组比使用链表快捷的多&#xff0c;如本题中通过下标的变化来搜索&#xff0c;使用链表则需要循环来消耗太多时间。 初做法&#xff1a;&#xff08;几个测试点超时&#xff1a;80分&#xff09; #include<iost…