Docker环境构建:MySQL 双主四从集群

article/2025/7/28 11:38:29

Java系列文章


文章目录

  • Java系列文章
  • 前言
  • 一、环境准备与Docker配置
    • 1.1 环境配置
    • 1.2 目录结构
    • 1.3 读写分离
      • 1.3.1 读写分离方案
      • 1.3.2 自定义Docker网络
  • 二、双主四从节点配置
    • 2.1 创建MySQL_1节点
      • 2.1.1 Mysql_1容器
      • 2.1.2 Navicat创建连接
      • 2.1.3 创建配置账户
    • 2.2 创建MySQL_2节点
      • 2.2.1 Mysql_2容器
      • 2.2.2 配置my.cnf
      • 2.2.3 日志订阅
    • 2.3 创建MySQL_3节点
      • 2.3.1 Mysql_3容器
      • 2.3.2 配置my.cnf
      • 2.3.3 日志订阅
    • 2.4 创建MySQL_4节点
      • 2.4.1 Mysql_4容器
      • 2.4.2 配置my.cnf
    • 2.5 创建MySQL_5节点
      • 2.5.1 Mysql_5容器
      • 2.5.2 配置my.cnf
      • 2.5.3 日志订阅
    • 2.6 创建MySQL_6节点
      • 2.6.1 Mysql_6容器
      • 2.6.2 配置my.cnf
      • 2.6.3 日志订阅
  • 三、配置双向主从同步
    • 3.1 配置MySQL_1节点
    • 3.2 配置MySQL_4节点
    • 3.3 数据演示


前言

本文将介绍如何使用docker搭建mysql双主四从集群服务。


一、环境准备与Docker配置

1.1 环境配置

  • 系统:Linux (CentOS/Ubuntu)
  • 资源:建议 4核CPU/8GB内存+
  • Docker 版本:≥20.10
  • Mysql 版本:5.0+

1.2 目录结构

在这里插入图片描述

1.3 读写分离

1.3.1 读写分离方案

一共要创建6个MySQL节点,其中前三个和后三个节点。

  • mysql_1和mysql_4为主节点
  • mysql_2和mysql_3节点订阅mysql_1的日志文件,实现主从同步
  • mysql_5和mysql_6节点订阅mysql_4的日志文件,实现主从同步
  • mysql_1和mysql_4配置订阅日志,实现双向同步数据
    在这里插入图片描述

1.3.2 自定义Docker网络

Docker默认的网段是172.17.0.x的,需要创建一个新的网段,创建容器的时候,把它们的IP地址绑定到该网段。

docker network create --subnet=172.18.0.0/18 mynet

二、双主四从节点配置

2.1 创建MySQL_1节点

2.1.1 Mysql_1容器

docker run -it -d --name mysql_1 -p 7001:3306 \
--net mynet --ip 172.18.0.2 \
-m 400m -v /root/mysql_1/data:/var/lib/mysql \
-v /root/mysql_1/config:/etc/mysql/conf.d  \
-e MYSQL_ROOT_PASSWORD=abc123456 \
-e TZ=Asia/Shanghai --privileged=true \
mysql:5.7.41 \
--lower_case_table_names=1

2.1.2 Navicat创建连接

使用Navicat连接云主机的7001端口

在这里插入图片描述

2.1.3 创建配置账户

在Navicat上面给MySQL_1创建一个新账户,将来MySQL_2和MySQL_3订阅binlog日志的时候就用这个帐户登陆MySQL_1节点。
在这里插入图片描述
新账户的用户名为sync,密码是abc123456,密码加密策略设置成mysql_native_password。
在这里插入图片描述
服务器权限,勾选下面的三个订阅日志的权限。
在这里插入图片描述
2.1.4 配置my.cnf
修改配置文件,所以要先关闭MySQL容器,配置完成后重新启动容器,在/root/mysql_1/config目录里创建my.cnf文件,配置文件的内容如下:

[mysqld]
#数据库字符集
character_set_server = utf8
#MySQL编号(只可以是数字)
server_id = 1#开启binlog日志,规定日志文件名称
log_bin = mysql_bin
#开启relaylog日志,规定日志文件名称
relay_log = relay_bin
#从库的写操作是否写入binlog日志
log-slave-updates = 1
#采用严格的SQL语句模式
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

2.2 创建MySQL_2节点

2.2.1 Mysql_2容器

docker run -it -d --name mysql_2 -p 7002:3306 \
--net mynet --ip 172.18.0.3 \
-m 400m -v /root/mysql_2/data:/var/lib/mysql \
-v /root/mysql_2/config:/etc/mysql/conf.d  \
-e MYSQL_ROOT_PASSWORD=abc123456 \
-e TZ=Asia/Shanghai --privileged=true \
mysql:5.7.41 \
--lower_case_table_names=1

2.2.2 配置my.cnf

在/root/mysql_2/config目录里创建my.cnf文件:

[mysqld]
#数据库字符集
character_set_server = utf8
#MySQL编号(只可以是数字)
server_id = 2#为什么从节点要开启binlog日志?(下面有解答)
log_bin = mysql_bin
relay_log = relay_bin#限制普通帐户无法INSERT、DELETE、UPDATE语句,但是该配置对管理员帐户无效
read-only = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

2.2.3 日志订阅

在Navicat上面通过MySQL_2节点执行SQL语句,让MySQL_2订阅MySQL_1的日志文件,实现数据同步。

#停止数据同步服务
stop slave;#设置与MySQL_1同步数据
change master to master_host='172.18.0.2',master_port=3306,master_user='sync',master_password='abc123456';#开启数据同步服务
start slave;#查询数据同步状态
show slave status;

出现两个YES,主从同步就配置成功了。
在这里插入图片描述

2.3 创建MySQL_3节点

2.3.1 Mysql_3容器

docker run -it -d --name mysql_3 -p 7003:3306 \
--net mynet --ip 172.18.0.4 \
-m 400m -v /root/mysql_3/data:/var/lib/mysql \
-v /root/mysql_3/config:/etc/mysql/conf.d  \
-e MYSQL_ROOT_PASSWORD=abc123456 \
-e TZ=Asia/Shanghai --privileged=true \
mysql:5.7.41 \
--lower_case_table_names=1

2.3.2 配置my.cnf

在/root/mysql_3/config目录里创建my.cnf文件:

[mysqld]
#数据库字符集
character_set_server = utf8
#MySQL编号(只可以是数字)
server_id = 3log_bin = mysql_bin
relay_log = relay_binread-only = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

2.3.3 日志订阅

MySQL_3订阅MySQL_1的日志文件,实现数据同步

#停止数据同步服务
stop slave;#设置与MySQL_1同步数据
change master to master_host='172.18.0.2',master_port=3306,master_user='sync',master_password='abc123456';#开启数据同步服务
start slave;#查询数据同步状态
show slave status;

2.4 创建MySQL_4节点

2.4.1 Mysql_4容器

docker run -it -d --name mysql_4 -p 7004:3306 \
--net mynet --ip 172.18.0.5 \
-m 400m -v /root/mysql_4/data:/var/lib/mysql \
-v /root/mysql_4/config:/etc/mysql/conf.d  \
-e MYSQL_ROOT_PASSWORD=abc123456 \
-e TZ=Asia/Shanghai --privileged=true \
mysql:5.7.41 \
--lower_case_table_names=1

2.4.2 配置my.cnf

在/root/mysql_4/config目录里创建my.cnf文件:

[mysqld]
#数据库字符集
character_set_server = utf8
server_id = 4log_bin = mysql_bin
relay_log = relay_bin
log-slave-updates = 1
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

2.5 创建MySQL_5节点

2.5.1 Mysql_5容器

docker run -it -d --name mysql_5 -p 7005:3306 \
--net mynet --ip 172.18.0.6 \
-m 400m -v /root/mysql_5/data:/var/lib/mysql \
-v /root/mysql_5/config:/etc/mysql/conf.d  \
-e MYSQL_ROOT_PASSWORD=abc123456 \
-e TZ=Asia/Shanghai --privileged=true \
mysql:5.7.41 \
--lower_case_table_names=1

2.5.2 配置my.cnf

在/root/mysql_5/config目录里创建my.cnf文件:

[mysqld]
#数据库字符集
character_set_server = utf8
#MySQL编号(只可以是数字)
server_id = 5log_bin = mysql_bin
relay_log = relay_binread-only = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

2.5.3 日志订阅

MySQL_5订阅MySQL_4的日志文件,实现数据同步

#停止数据同步服务
stop slave;#设置与MySQL_1同步数据
change master to master_host='172.18.0.5',master_port=3306,master_user='sync',master_password='abc123456';#开启数据同步服务
start slave;#查询数据同步状态
show slave status;

2.6 创建MySQL_6节点

2.6.1 Mysql_6容器

docker run -it -d --name mysql_6 -p 7006:3306 \
--net mynet --ip 172.18.0.7 \
-m 400m -v /root/mysql_6/data:/var/lib/mysql \
-v /root/mysql_6/config:/etc/mysql/conf.d  \
-e MYSQL_ROOT_PASSWORD=abc123456 \
-e TZ=Asia/Shanghai --privileged=true \
mysql:5.7.41 \
--lower_case_table_names=1

2.6.2 配置my.cnf

在/root/mysql_6/config目录里创建my.cnf文件:

[mysqld]
#数据库字符集
character_set_server = utf8
#MySQL编号(只可以是数字)
server_id = 6log_bin = mysql_bin
relay_log = relay_binread-only = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

2.6.3 日志订阅

MySQL_6订阅MySQL_4的日志文件,实现数据同步

stop slave;change master to master_host='172.18.0.5',master_port=3306,master_user='sync',master_password='abc123456';start slave;show slave status;

三、配置双向主从同步

MySQL_1和MySQL_4之间要配置双向主从同步。

3.1 配置MySQL_1节点

在Navicat上面,到MySQL_1节点上执行4条SQL语句。以MySQL_4为主节点,订阅日志同步数据

stop slave;change master to master_host='172.18.0.5',master_port=3306,master_user='sync',master_password='abc123456';start slave;show slave status;

3.2 配置MySQL_4节点

在Navicat上面,MySQL_4节点上执行4条SQL语句,以MySQL_1为主节点,订阅日志同步数据。

stop slave;change master to master_host='172.18.0.2',master_port=3306,master_user='sync',master_password='abc123456';start slave;show slave status;

3.3 数据演示

Mysql_1节点创建测试数据库,测试其它节点是否订阅日志同步数据。
在这里插入图片描述


http://www.hkcw.cn/article/nIBobRmdym.shtml

相关文章

低频 500kHz vs 高频 1MHz,FP6291C与FP6291升压芯片应用在不同场景该怎么选择?

FP6291C 与 FP6291 均为电流模式升压型 DC-DC 转换器,内置功率 MOSFET 和内部补偿网络。这一特性极大简化了外部电路设计,不仅降低了 PCB 空间占用,还能有效控制成本。两者均支持软启动功能,可显著减少浪涌电流,提升系…

leetcode题解513:找树左下角的值(递归中的回溯处理)!

一、题目内容: 题目要求找到一个二叉树的最底层最左边节点的值。具体来说,我们需要从根节点开始遍历二叉 树,找到最深的那层中的最左边的节点,并返回该节点的值。因为要先找到最底层左侧的值,所以我们选择遍历顺序一定…

React项目在ios和安卓端要做一个渐变色背景,用css不支持,可使用react-native-linear-gradient

以上有个模块是灰色逐渐到白的背景色过渡 如果是css,以下代码就直接搞定 background: linear-gradient(180deg, #F6F6F6 0%, #FFF 100%);但是在RN中不支持这种写法,那应该写呢? 1.引入react-native-linear-gradient插件,我使用的是…

Nginx进阶篇(Nginx静态资源概述、Nginx静态资源配置指令、Nginx静态资源优化配置、Nginx静态资源压缩)

文章目录 1. Nginx静态资源概述2. Nginx静态资源配置指令2.1 listen指令2.2 server_name指令2.2.1 精确匹配2.2.2 补充知识:hosts文件2.2.3 通配符匹配2.2.4 正则表达式匹配2.2.5 匹配的执行顺序 2.3 location指令2.3.1 uri以指定模式开始(/)…

SAP 生产订单收货数量超额报错问题研究

工单收货接口报错有点奇怪,明明是生产订单收货,报错消息中却一直说采购订单收货。 其实之前有发现,只是知道原因(收货数量超过工单总数量),没太关注描述问题,这次好好研究下。 首先检查消息号&…

【连接器专题】SD卡座规格书审查需要审哪些方面?

在审查SD卡座规格书时,我们需要考虑哪些方面? 首先在拿到一份SD卡座的详细规格书时,一般供应商给到的规格书中包括了一些基础信息、产品图纸信息、技术参数信息,同时有些供应商会给出产品可靠性测试报告。因此我们会从这几个要素去看规格书。 基础信息 基础信息一般会给变更…

sward V1.1.4版本发布,支持文档审批及文档导出

sward是一款国产开源企业级知识管理工具,包含知识库管理、文档管理、文档协作、文档分享等模块,支持普通文档、markdown等格式,产品简洁易用、开源免费。本周sward发布V1.1.4版本,增加了文档审批和文档导出为word的功能&#xff0…

谷云科技发布业内首份 Oracle OSB 迁移到 iPaaS 技术白皮书

随着企业数字化转型的加速推进,从传统企业服务总线ESB向现代化集成平台iPaaS迁移已成为行业发展的必然趋势。Oracle Service Bus(OSB)在ESB产品市场中长期以来一直占据着较高的市场份额。然而,许多用户由于担心技术迁移的复杂性和…

特伦斯 S75 电钢琴:重塑音乐感知,臻享艺术之境

在音乐文化蓬勃发展的当下,电钢琴已成为音乐爱好者探索旋律世界的热门之选。在这方充满无限可能的音乐领域,特伦斯 S75 电钢琴以其超凡的设计与卓越的性能,打破传统电钢琴的局限,为用户带来无与伦比的音乐体验,宛如一颗…

立控信息智能装备柜:科技赋能军队装备管理现代化

在军事装备管理领域,高效、安全、智能化的存储解决方案至关重要。传统的人工管理模式不仅效率低下,还容易因人为疏忽导致装备丢失或管理混乱。​LKONE智能装备柜凭借先进的物联网技术、生物识别安全系统和智能管理功能,为军队提供了一套高效、…

【freertos-kernel】queue(接收)

文章目录 xQueueReceivexQueueReceiveFromISRxQueuePeekxQueuePeekFromISR xQueueReceive 从队列中接收一个数据项。 和发送数据的过程有点类似,不逐行解释代码了。 vTaskPlaceOnEventList把当前任务放进队列的等待链表的同时也会把当前任务从就绪列表移除&#x…

Clish中xml文件配置的使用方法

1&#xff0c;引入 之前介绍了klish的源码如何安装和使用&#xff0c;本次介绍一下klish的xml配置文件是如何使用的&#xff0c;介绍其中的<COMMAND>/<PARAM>/<PTYPE>等基础配置&#xff0c;方便以后查看。 2&#xff0c;clish中xml文件的基本语法 1&#…

Compose仿微信底部导航栏NavigationBar :底部导航控制滑动并移动

文章目录 1、准备工作1.1 参考1.2 依赖添加&#xff1a;1.3 主要控件NavigationBarHorizontalPager、VerticalPager 2、功能描述&#xff1a;3、实现过程3.1 创建一个数据类3.2 创建一个list变量3.3 具体实现3.3.1 创建共享的Pager状态3.3.2 将页面索引与页面标题同步3.3.3 创建…

由反汇编代码确定结构体的完整声明

C程序中遇到下面的代码 typedef struct {int left;a_struct a[CNT];int right; } b_struct;void test( int i, b_struct *bp) {int nbp->leftbp->right;a_struct *ap&bp->a[i];ap->x[ap->idx]n; } 下面是test函数的反汇编代码 结合C程序中的代码与test函数…

生成式人工智能:重塑社会的双刃剑与人类文明的抉择

普罗米修斯之火与文明的抉择 当古希腊神话中的普罗米修斯盗取天火赠予人间时&#xff0c;人类文明开启了从蒙昧走向理性的征程。今天&#xff0c;生成式人工智能&#xff08;GenAI&#xff09;正以类似的方式重塑人类认知的边界——它既是照亮未来的火炬&#xff0c;也是可能灼…

TestHubo V1.1.0版本发布,新增用例评审功能,确保测试用例质量,提升测试用例覆盖率

TestHubo是一款开源免费的测试管理工具&#xff0c;提供一站式测试解决方案&#xff0c;涵盖功能测试、接口测试、性能测试以及 Web 和 App 测试等多个维度。本周TestHubo V1.1.0版本发布&#xff0c;新增用例评审功能。 1、版本更新日志 新增 ➢ 用例评审&#xff1a;通过评…

正点原子Z15I ZYNQ 开发板发布!板载PCIe2.0、SPFx2、MIPI CSI等接口,资料丰富!

正点原子Z15I ZYNQ 开发板发布&#xff01;板载PCIe2.0、SPFx2、MIPI CSI等接口&#xff0c;资料丰富&#xff01; 正点原子Z15I ZYNQ开发板&#xff0c;核心板全工业级设计&#xff0c;主控芯片的型号是XC7Z015CLG485-2I。开发板由核心板&#xff0b;底板组成&#xff0c;外设…

易路 iBuilder:解构企业 AI 落地困境,重构智能体时代生产力范式

一、从大模型到智能体的产业跃迁 2024 年堪称中国人工智能产业的 "战略拐点" 之年。当 DeepSeek R1 模型以 "技术 价格" 双重普惠模式掀起行业震荡时&#xff0c;各企业纷纷意识到&#xff0c;大模型的真正价值不在于技术炫技&#xff0c;而在于成为企业…

DiTAR: Diffusion Transformer Autoregressive Modeling for Speech Generation

kaiming 文章的codepaper abstract LLM 预测连续embedding&#xff0c;直接接DiT。和kaiming-Autoregressive Image Generation without Vector Quantization的文章思路一样。- LLM是casual attention&#xff0c;和diffusion 一起训练&#xff0c;相比于full attention会有性…

AC220V整流滤波电路Multisim仿真

一、仿真电路&#xff1a; 二、遇到的问题 1、仿真运行保险丝会熔断&#xff0c;然后输出电压不对。 解&#xff1a;这里可能是整流桥的模型不对&#xff0c;更换了一个新的模型&#xff0c;仿真就可以正常运行了。 2、整流桥的电流方向和问题 正半周&#xff1a; 负半周&a…