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

@

§1 镜像

docker pull mysql:5.7

§2 主机目录

目录层级遵循

${prefix}/cluster/host/xx

如:

  • /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

添加 root 外部访问权限

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

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

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

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

§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

添加 root 外部访问权限

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

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

§3.3 配置主从

主节点查看主从同步状态

SHOW MASTER STATUS;

在这里插入图片描述

关联 主节点

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

参数说明

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

从节点下开启主从复制

start slave;

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

SHOW SLAVE STATUS \G

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

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

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

  • 停止主从同步

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

    set global sql_slave_skip_counter=1;
    
  • 重启同步

    start slave;
    

方式2:

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

§3.4 多主多从

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

posted @ 2025-05-20 14:05  问仙长何方蓬莱  阅读(24)  评论(0)    收藏  举报