• docker-MySQL 8 主从搭建


    一.目录结构: 

    我是在/home目录下,建立个sql文件夹:

    二、配置文件

    1.mysql配置
    mysql-master下.conf文件配置

    1. ######
    2. [mysqld]
    3. server-id=1
    4. # 启用二进制日志
    5. log-bin=master-bin
    6. # 指定需要复制的数据库
    7. binlog-do-db=test_db
    8. # 指定二进制日志的格式为行级别
    9. binlog-format=row
    10. # 启用 GTID 模式
    11. gtid-mode=ON
    12. # 强制 GTID 一致性检查
    13. enforce-gtid-consistency=ON

    mysql-slave下.conf文件配置

    1. #######
    2. [mysqld]
    3. server-id=2
    4. # 启用二进制日志
    5. log-bin=master-bin
    6. # 指定需要复制的数据库
    7. binlog-do-db=test_db
    8. # 指定二进制日志的格式为行级别
    9. binlog-format=row
    10. # 启用 GTID 模式
    11. gtid-mode=ON
    12. # 强制 GTID 一致性检查
    13. enforce-gtid-consistency=ON

    注意要同步的数据库名:test_db

    2.docker-compose.yml配置

    在/home/mysql文件夹下建立docker-compose.yml

    1. version: '3.8'
    2. services:
    3. mysql-master:
    4. image: mysql:8.0
    5. container_name: mysql-master
    6. environment:
    7. MYSQL_ROOT_PASSWORD: 123456 # MySQL root 用户的密码
    8. MYSQL_DATABASE: test_db # 要创建的数据库名称
    9. ports:
    10. - "3001:3306" # 映射到主服务器的端口
    11. volumes:
    12. - ./mysql-master/data:/var/lib/mysql # 挂载数据目录
    13. - ./mysql-master/config/mysql.conf:/etc/mysql/conf.d/mysql.conf # 挂载主服务器的配置文件
    14. - ./mysql-master/log:/var/log/mysql # 挂载日志目录
    15. command: --server-id=1 --log-bin=master-bin --binlog-do-db=test_db --binlog-format=row --gtid-mode=ON --enforce-gtid-consistency=ON # 主服务器的命令参数
    16. mysql-slave:
    17. image: mysql:8.0
    18. container_name: mysql-slave
    19. environment:
    20. MYSQL_ROOT_PASSWORD: 123456 # MySQL root 用户的密码
    21. MYSQL_DATABASE: test_db # 要创建的数据库名称
    22. ports:
    23. - "3002:3306" # 映射到从服务器的端口
    24. volumes:
    25. - ./mysql-slave/data:/var/lib/mysql # 挂载数据目录
    26. - ./mysql-slave/config:/etc/mysql/conf.d # 挂载从服务器的配置文件
    27. - ./mysql-slave/log:/var/log/mysql # 挂载日志目录
    28. command: --server-id=2 --log-bin=slave-bin --binlog-do-db=test_db --binlog-format=row --gtid-mode=ON --enforce-gtid-consistency=ON --skip-slave-start # 从服务器的命令参数
    29. depends_on:
    30. - mysql-master # 确保主服务器先启动

    注意:--binlog-do-db=test_db

    三、主从配置

    获取主服务器状态信息

    在/home/mysql下执行,进入容器

    docker-compose exec mysql-master bash(等效于 docker exec -it /bin/bash)

    1. #进入容器内部
    2. docker-compose exec mysql-master bash
    3. #输入用户密码
    4. mysql -u root -p
    5. #为了避免从服务复制出现权限不足的情况需要执行
    6. ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
    7. # 查看状态
    8. SHOW MASTER STATUS;

    显示如下:

    如上图所示,需要记下 File 和 Position 的值。

    同样,在mysql 下执行:

    1. #进入容器
    2. docker-compose exec mysql-slave bash
    3. #输入用户密码
    4. mysql -u root -p
    5. #配置从服务器复制
    6. CHANGE MASTER TO MASTER_HOST='172.16.10.227', MASTER_USER='root', MASTER_PASSWORD='123456',MASTER_PORT=3001, MASTER_LOG_FILE='master-bin.000004', MASTER_LOG_POS=760;

    配置成功的话

    mysql> 执行一下:SHOW REPLICA STATUS\G;

    注意成功的话 Running:Yes

    如果时no的话  ,执行

    mysql> slave stop;
    mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
    mysql> slave start;

    之后再看是否成功。

    注意:如果不小心在slave上进行了写操作,或者是slave重启事务回滚了,那么同步就不好使了。

    需要手动再执行

    mysql> slave stop;

    查看主服务后,在从服务器执行

    CHANGE MASTER TO MASTER_HOST='172.16.10.227', MASTER_USER='root', MASTER_PASSWORD='123456',MASTER_PORT=3001, MASTER_LOG_FILE='master-bin.000004', MASTER_LOG_POS=xxxx;

    mysql> slave start;

    最后、设置从数据库为只读

    ALTER SCHEMA test_db READ ONLY = 1;

    查看结果 INFORMATION_SCHEMA.SCHEMATA_EXTENSIONS

  • 相关阅读:
    力扣:130. 被围绕的区域(Python3)
    yum源配置
    CSS选择符和可继承属性
    Flink
    linux后台运行golang
    从海后丢掉“海后”这个角色说起—— 论VOC对于DTC品牌的重要性
    AcWing:第56场周赛
    观测云产品更新 | 数据转发、监控器告警策略等优化
    Allegro DVT与SiMa.ai携手优化嵌入式边缘应用的能效
    暴力算法 --- 莫队
  • 原文地址:https://blog.csdn.net/cyw8998/article/details/138062720