• 云原生 | Docker - [mysql 集群搭建]


    §1 镜像

    docker pull mysql:5.7
    
    • 1

    §2 主机目录

    目录层级遵循

    ${prefix}/cluster/host/xx
    
    • 1

    如:

    • /docker/mysql/cluster_01/master_01/log
    • /docker/mysql/cluster_01/master_01/data
    • /docker/mysql/cluster_01/master_01/conf
    • /docker/mysql/cluster_01/slave_01/log
    • /docker/mysql/cluster_01/slave_01/data
    • /docker/mysql/cluster_01/slave_01/conf

    §3 主从复制部署

    §3.1 主节点

    启动

    docker run -d -p 13306:3306 \
        -v /docker/mysql/cluster_01/master_01/log:/var/log/mysql \
        -v /docker/mysql/cluster_01/master_01/data:/var/lib/mysql \
        -v /docker/mysql/cluster_01/master_01/conf:/etc/mysql/conf.d \
        --name=m1 \
        --privileged=true \
        -e MYSQL_ROOT_PASSWORD=123456 \
        mysql:5.7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    添加 root 外部访问权限

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
    • 1
    • 2

    增加主从复制用户 slave 并授权

    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
    FLUSH PRIVILEGES;
    
    • 1
    • 2
    • 3

    连接验证
    在这里插入图片描述

    §3.2 从节点

    启动

    docker run -d -p 13307:3306 \
        -v /docker/mysql/cluster_01/slave_01/log:/var/log/mysql \
        -v /docker/mysql/cluster_01/slave_01/data:/var/lib/mysql \
        -v /docker/mysql/cluster_01/slave_01/conf:/etc/mysql/conf.d \
        --name=s1 \
        --privileged=true \
        -e MYSQL_ROOT_PASSWORD=123456 \
        mysql:5.7
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    添加 root 外部访问权限

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    
    • 1
    • 2

    连接验证
    在这里插入图片描述

    §3.3 配置主从

    主节点查看主从同步状态

    SHOW MASTER STATUS;
    
    • 1

    在这里插入图片描述

    关联 主节点

    CHANGE MASTER TO master_host = '192.168.3.11',
    master_user = 'slave',
    master_password = '123456',
    master_port = 13306,
    master_log_file = 'mall-mysql-bin.000003',
    master_log_pos = 1182,
    master_connect_retry = 30
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    参数说明

    • master_host 主数据库 ip
    • master_port 主数据库端口
    • master_user 主数据库用于主从同步的账号
    • master_password 主数据库用于主从同步的账号的密码
    • master_log_file 从库监听的 binlog 日志文件,对应主节点组从同步状态的 FILE 字段
    • master_log_pos 从库监听的 binlog 日志文件的位置,对应主节点组从同步状态的 POSITION字段
    • master_connect_retry 失败重连时间间隔,单位 秒

    从节点下开启主从复制

    start slave;
    
    • 1

    从节点查看主从同步状态
    命令行下可以添加 \G 以垂直显示

    SHOW SLAVE STATUS \G
    
    • 1

    若未开启从节点的主从复制,红框处为 No
    在这里插入图片描述

    主从复制验证
    在主库创建一个数据库验证效果
    在这里插入图片描述
    在这里插入图片描述

    主从复制失效
    主从复制失效时可以查看下图红框处,可能为 No
    此时查看 Last_Errno,可以看到最后错误的编号,Last_Error 会有最后错误的描述
    在这里插入图片描述
    方式1:

    • 停止主从同步

      stop slave;
      
      • 1
    • 忽略为执行的同步

      set global sql_slave_skip_counter=1;
      
      • 1
    • 重启同步

      start slave;
      
      • 1

    方式2:

    • 配置从库 slave_skip_errors 添加 Last_Errno
    • 重启容器

    §3.4 多主多从

    示意图如下,每个红框为一组主从,每一组主从不一定只有一个从
    mysql 的主从复制是从 从节点 开启的,因此,可以搭建多个主从结构,然后主节点之间互为主从即可
    在这里插入图片描述

  • 相关阅读:
    【Leetcode】2418. Sort the People
    element ui:常用的组件使用情况记录
    【考研数学】八.曲面积分
    SpringCloud&Eureka理论与入门
    生成对抗网络 GAN——Generative Adversarial Nets
    面试题:线程池灵魂8连问,你挡的住吗?
    关于PMP考试免费重考,你想知道的都在这
    利用Dockerfile创建指定镜像
    红包雨中:Redis 和 Lua 的邂逅
    opencv的approxPolyDP函数
  • 原文地址:https://blog.csdn.net/ZEUS00456/article/details/126319859