【MySQL集群一】CentOS 7上搭建MySQL集群:一主一从、多主多从
CentOS 7上搭建MySQL集群
- 介绍
- 一主一从
- 步骤1:准备工作
- 步骤2:安装MySQL
- 步骤3:配置主服务器
- 步骤4:创建复制用户
- 步骤5:备份主服务器数据,如果没有数据则省略这一步
- 步骤6:配置从服务器
- 步骤7:配置主从复制
- 步骤8:测试主从复制
- 处理宕机情况
- 处理Slave宕机
- 处理Master宕机
- 一主多从
- 多主多从

介绍
MySQL集群允许您创建高可用性的数据库环境,提供故障容忍性和负载均衡。在本博客中,我们将演示如何在两台CentOS 7服务器上搭建MySQL集群,包括一主一从和多主多从的配置。
一主一从
步骤1:准备工作
在开始之前,确保您已经完成以下准备工作:
- 两台CentOS 7服务器,可以是物理机或虚拟机。
- 确保服务器之间可以互相访问,互相能ping通。
- 演示环境是两台试用云服务器。
腾讯云服务器
步骤2:安装MySQL
在两台服务器上安装MySQL,请参考:CentOS7服务器Yum安装MySQL5.7
步骤3:配置主服务器
在主服务器上编辑MySQL配置文件:
sudo vim /etc/my.cnf
添加或修改以下配置项:
[mysqld]
# 每个MySQL服务器都需要一个唯一的标识符(server-id),用于区分主从服务器,以及避免复制冲突。
server-id=22
# 用于开启MySQL的日志功能,以便记录增删改操作。二进制日志文件将记录所有这些更改,并用于主从复制。
log-bin = mysql-bin
# 设置logbin格式
binlog_format=STATEMENT
# 用于指定需要同步的数据库。如果你希望同步特定的数据库,可以设置多个binlog-do-db选项,每个选项指定一个数据库;可设置为通配符模式:ddz_*(表示同步以ddz_开头的数据库)
binlog-do-db=ddz_test
# 屏蔽不需要同步的系统库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
# 从服务器是否记录自己的日志。如果启用(1),从服务器会记录在执行复制时的所有更改。
log-slave-updates=1
# 用于指定错误日志的文件名和位置。
# log-error=
# 指定MySQL服务器进程ID的文件名和位置。
# pid-file=
# 控制MySQL在处理已经建立的连接时,允许待处理的的最大连接数。
# back_log=
# 限制MySQL的最大连接数。
# max_connections=
# 限制每个用户允许的最大连接数。
# max_user_connections=
# 限制通信缓冲区中的数据量大小,默认大小为1MB。
# max_allowed_packet=
可更具自己需要灵活配置。
binlog_format 主要是用来调整binlog的记录格式。
MySQL的binlog(二进制日志)用于记录数据库中的所有更改,这些日志可以用于主从复制和数据恢复等。binlog_format 选项可以控制binlog的记录格式,它有三个可选值:STATEMENT、ROW和MIXED。
STATEMENT:每一条修改数据的SQL语句都会记录到binlog中,但不会记录每一条sql语句和每一行的数据变化。在slave端复制时,sql进程会解析成和原来master端执行过的相同的sql再次执行。优点是减少binlog日志量,节约磁盘IO,提高性能。缺点是在某些情况下会导致主从复制不一致,比如sleep()函数、last_insert_id()以及user-defined functions(udf)等可能会出现问题。
ROW:在ROW格式下,binlog中会记录每一行数据被修改后的情况,然后在slave端对相同的数据进行修改。优点是可以清楚地记录每一行数据修改的细节。缺点是数据量太大,可能会增加磁盘IO和内存消耗。
MIXED:MIXED模式是以上两种模式的混合使用。一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog。MySQL会根据执行的SQL语句选择日志保存方式。
保存并关闭文件。然后重启MySQL服务:
sudo systemctl restart mysqld
步骤4:创建复制用户
登录到MySQL服务器,创建用于复制的用户:
# 登录
mysql -u root -p# 在MySQL中执行以下命令
# 创建用户
CREATE USER 'replication'@'%' IDENTIFIED BY 'your_password';
# 指定IP
# CREATE USER 'replication'@'192.168.1.13' IDENTIFIED BY 'your_password';
# 配置授权
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';
# 指定IP
# GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.1.13';
# 刷新缓存
FLUSH PRIVILEGES;
查看是创建成功,只需执行一下SQL:
SELECT USER,HOST FROM mysql.user;

步骤5:备份主服务器数据,如果没有数据则省略这一步
在主服务器上创建数据备份:
mysqldump -u root -p --database mydb > mydb.sql
步骤6:配置从服务器
在从服务器上编辑MySQL配置文件:
sudo vim /etc/my.cnf
添加或修改以下配置项:
[mysqld]
# 每个MySQL服务器都需要一个唯一的标识符(server-id),用于区分主从服务器,以及避免复制冲突。
server-id=33
# 用于指定需要同步的数据库。如果你希望同步特定的数据库,可以设置多个binlog-do-db选项,每个选项指定一个数据库;可设置为通配符模式:ddz_*(表示同步以ddz_开头的数据库)
binlog-do-db=ddz_test
# 屏蔽不需要同步的系统库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
# 主从复制架构中非常重要的一部分,它用于确保从服务器能够及时地获取和应用主服务器的更改,以保持与主服务器的数据一致性。
relay-log=mysql-relay
保存并关闭文件,重启mysql。
sudo systemctl restart mysqld
然后导入主服务器的数据备份(没有数据则省略这一步)
mysql -u root -p < mydb.sql
步骤7:配置主从复制
回到主服务器,获取主服务器的状态:
mysql -u root -p# 在MySQL中执行以下命令
SHOW MASTER STATUS;

记录下返回的文件名和位置。
回到从服务器,配置从服务器连接到主服务器:
# 登录
mysql -u root -p# 在MySQL中执行以下命令,将 'file_name' 和 'position' 替换为上一步中记录的值
CHANGE MASTER TO MASTER_HOST='主服务器的IP地址', MASTER_USER='replication', MASTER_PASSWORD='your_password', MASTER_LOG_FILE='file_name', MASTER_LOG_POS=position;# 开启同步功能
START SLAVE;
查看是否开启成功:
SHOW SLAVE STATUS;
这两项都为Yes则开启成功。

步骤8:测试主从复制
在主服务器上创建一个新的数据库并添加一些数据,然后在从服务器上验证是否同步。
# 创建数据库
CREATE DATABASE ddz_test;
# 创建表
CREATE TABLE ddz_test.test_user (`id` INT NOT NULL AUTO_INCREMENT,`name` VARCHAR ( 50 ) DEFAULT NULL,
PRIMARY KEY ( `id` )) ENGINE = INNODB DEFAULT CHARSET = utf8;
# 新增一条数据
INSERT INTO ddz_test.test_user(`name`)VALUES('测试你个老六');
进入主从MySQL上验证是否都有数据。
处理宕机情况
处理Slave宕机
MySQL slave服务器宕机后重启,它不会自动恢复同步复制Master的数据,我们需要做一些操作来手动重新同步。具体步骤如下:
- 首先,你需要在Slave服务器上暂停复制。你可以使用以下SQL命令来操作:
STOP SLAVE;
- 进入Master服务备份数据:
# 备份所有数据库
mysqldump -u root -p --all-databases --master-data > backup.sql
# 备份指定数据库 ddz替换成你的数据库
mysqldump -u root -p --databases ddz --master-data > backup.sql
- 进入Slave导入数据:
# 导入所有数据库
mysql -u [username] -p < backup.sql
# 导入指定数据库
mysql -u [username] -p ddz < backup.sql
- 然后,你需要获取Master服务器上当前的二进制日志文件和位置。在Master服务器上,你可以使用以下SQL命令获取:
SHOW MASTER STATUS;
- 在Slave服务器上,你需要配置Master服务器的这些信息。你可以使用以下SQL命令设置:
RESET SLAVE;
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='replication_user', MASTER_PASSWORD='replication_user_password', MASTER_LOG_FILE='recorded_log_file', MASTER_LOG_POS=recorded_log_position;
这里的 recorded_log_file 和 recorded_log_position 就是你备份时记录的 master 的 binlog 文件和位置。
- 最后,你需要在Slave服务器上重新开始复制。你可以使用以下SQL命令开始复制:
START SLAVE;
如果步骤正确,Slave服务器现在应该重新开始复制Master服务器上的数据。
另外,如果你希望Slave服务器在重启后自动开始复制,你可以在my.cnf(MySQL配置文件)中设置一个参数,如下:
[mysqld]
skip-slave-start=false
然后重启你的MySQL服务。
但是必须注意,如果Master和Slave不处于同步状态,开启这个选项可能会导致数据不一致的问题。所以按需开启。
处理Master宕机
- 调用 SHOW SLAVE STATUS 获取 Relay_Master_Log_File 和 Exec_Master_Log_Pos, 记录下得到的这两个值。
SHOW SLAVE STATUS;
- 调用 STOP SLAVE; 命令停止复制过程。调用 RESET MASTER; 命令清空二进制日志。
STOP SLAVE;
RESET MASTER;
- 提升 Slave 为新 Master :
CHANGE MASTER TO MASTER_LOG_FILE='<Relay_Master_Log_File>', MASTER_LOG_POS=<Exec_Master_Log_Pos>;
- 然后调用 START SLAVE; 在停止进程的位置启动复制进程。
START SLAVE;
-
确保所有的 Slave 重新连接新的 Master:如果有多个 Slave,需要在每个 Slave 上更新他们的 Master 信息,以指向新的 Master。
-
检查数据完整性:在所有的重要操作之后,别忘记对数据库进行必要的检验,确保数据的完整性和准确性。
-
恢复原 Master :修复原 Master 服务器后,可以将其设置为新的 Slave,然后将数据从新的 Master 同步过去,之后再将其提升为 Master,完成故障恢复。
一主多从
要配置多主多从,重复步骤6到步骤8在另一台服务器上。
多主多从
要配置多主多从,重复步骤3到步骤8在另一对服务器上。
总结:
通过完成上述步骤,您将在两台CentOS 7服务器上成功搭建了MySQL集群,包括一主一从和多主多从的配置。这将提高数据库的可用性和性能,使您能够更好地处理数据库工作负载和故障容忍性。如果需要更多节点,只需重复配置多主多从的步骤。希望这个博客对您有所帮助!
相关文章:
【MySQL集群一】CentOS 7上搭建MySQL集群:一主一从、多主多从
CentOS 7上搭建MySQL集群 介绍一主一从步骤1:准备工作步骤2:安装MySQL步骤3:配置主服务器步骤4:创建复制用户步骤5:备份主服务器数据,如果没有数据则省略这一步步骤6:配置从服务器步骤7…...
RGB格式
Qt视频播放器实现(目录) RGB的使用场景 目前,数字信号源(直播现场的数字相机采集的原始画面)和显示设备(手机屏幕、笔记本屏幕、个人电脑显示器屏幕)使用的基本上都是RGB格式。 三原色 RGB是…...
认识面向对象-PHP8知识详解
面向对象编程,也叫面向对象程序设计,是在面向过程程序设计的基础上发展而来的,它比面向过程编程具有更强的灵活性和扩展性。 它用类、对象、关系、属性等一系列东西来提高编程的效率,其主要的特性是可封装性、可继承性和多态性。…...
毕业设计|基于51单片机的空气质量检测PM2.5粉尘检测温度设计
基于51单片机的空气质量检测PM2.5粉尘检测温度设计 1、项目简介1.1 系统构成1.2 系统功能 2、部分电路设计2.1 LED信号指示灯电路设计2.2 LCD1602显示电路2.3 PM2.5粉尘检测电路设计 3、部分代码展示3.1 串口初始化3.1 定时器初始化3.2 LCD1602显示函数 4 演示视频及代码资料获…...
星闪空口技术初探
星闪技术设计目标 在星闪技术的应用场景中,最低的时延要求达到了20us量级,比如智能座舱的主动降噪。最高的可靠性要求达到了99.9999%,比如智能制造的传感器与执行器的消息收发。除了低时延和高可靠之外,高精度同步、多并发和信息…...
如何在不失去理智的情况下调试 TensorFlow 训练程序
一、说明 关于tensorflow的调试,是一个难啃的骨头,除了要有耐力,还需要方法;本文假设您是一个很有耐力的开发者,为您提供一些方法;这些方法也许不容易驾驭,但是依然强调您只要有耐力,…...
24. 图论 - 图的表示种类
Hi,你好。我是茶桁。 之前的一节课中,我们了解了图的来由和构成,简单的理解了一下图的一些相关概念。那么这节课,我们要了解一下图的表示,种类。相应的,我们中间需要穿插一些新的知识点用于更好的去理解图…...
C++ 读bin文件,部分代码。赚经验。
编号:1 Head: magicWord[0] 0x0102 magicWord[1] 0x0304 magicWord[2] 0x0506 magicWord[3] 0x0708 version 0x02010004 totalPacketLen 288 platform 0x000a1443 frameNumber 12 timeCpuCycles 172969774 numDetectedObj 99 numTLVs 2 subFrameNumber 0 TLV…...
vue3 父子组件传值
一,子传父 父组件 <script setup> import HelloWorld from ./components/HelloWorld.vue import { ref } from vue//直接赋值页面不会自动渲染,使用ref存储响应式数据 import { defineExpose } from "vue";父传子 let val ref(); con…...
【看懂MPLS LSP表项】
IP网络 R1根据路由表项去查FIB表 目的网络、出口、下一跳 MPLS网络 R1根据LFIB表现去查表, 路由,出口、(标签) 要实现MPLS网络全局可达性,R1应具有到每一个LSR、LSE的路由。 1、R1去FEC(转发等价类) /去往2.2.2.2的路由《路由方…...
代码随想录训练营 单调栈
代码随想录训练营 单调栈 84. 柱状图中最大的矩形🌸 最后一天~ 84. 柱状图中最大的矩形🌸 给定 n 个非负整数,用来表示柱状图中各个柱子的高度。每个柱子彼此相邻,且宽度为 1 。 求在该柱状图中,能够勾勒出来的矩形的最…...
Android MQTT
MQTT Android MQTT连接,重新编译Service-1.1.1兼容Android高版本服务 Paho Android Service-1.1.1 Paho Client Mqtt3-1.1.0 资源 名字资源AAR下载GitHub查看Gitee查看 Maven 1.build.grade allprojects {repositories {...maven { url https://jitpack.io }} }2./app/bu…...
Codeforces Round 823 (Div. 2)C
更好的阅读体验 C. Minimum Notation 思路:我们可以进行的操作时将一个位置的数删除然后在任意位置处添加一个比当前数大1并且小于9的数,所以我们的操作只会让一个数变大,我们统计一个最大值的后缀,贪心的考虑如果当前数的后面有…...
npm发布vue3自定义组件库--方法一
npm发布vue3自定义组件库 创建项目 vue create test-ui自定义组件 创建自定义组件,组件名称根据你的需求来,最好一个组件一个文件夹,下图是我的示例。 src/components 组件和你写页面一样,所谓组件就是方便实用,不…...
Centos7原生hadoop环境,搭建Impala集群和负载均衡配置
Centos7原生hadoop环境,搭建Impala集群和负载均衡配置 impala介绍 Impala集群包含一个Catalog Server (Catalogd)、一个Statestore Server (Statestored) 和若干个Impala Daemon (Impalad)。Catalogd主要负责元数据的获取和DDL的执行,Statestored主要负…...
如何在macOS上安装Go并搭建本地编程环境
引言 Go是一种诞生于挫折中的编程语言。在谷歌,开发人员厌倦了在为新项目选择语言时必须做出权衡。有些语言执行效率很高,但需要很长时间编译,而另一些语言易于编写,但在生产环境中运行效率很低。因此,谷歌发明了Go语…...
postgresql-存储过程
postgresql-存储过程 简述PL/pgSQL 代码块结构示例嵌套子块 声明与赋值控制结构IF 语句CASE 语句简单case语句搜索 CASE 语句 循环语句continuewhilefor语句遍历查询结果 foreach 游标游标传参 错误处理报告错误和信息检查断言 捕获异常自定义函数重载VARIADIC 存储过程示例事务…...
改造user ,使得userId相同视为一个对象,user是Key,User的username做value
如果您想要将具有相同userId的用户视为一个对象,其中User对象是键,而User对象的username是值,您可以使用Java的Map<User, String>数据结构来实现。以下是示例代码: java import java.util.*;class User {private int userI…...
力扣刷题-数组-滑动窗口法相关题目总结
209. 长度最小的子数组(最小滑窗) 给定一个含有 n 个正整数的数组和一个正整数 s ,找出该数组中满足其和 ≥ s 的长度最小的 连续 子数组,并返回其长度。如果不存在符合条件的子数组,返回 0。 示例: 输入&…...
Qt创建线程(线程池)
1.线程池可以创建线程统一的管理线程(统一创建、释放线程) 2.使用线程池方法实现点击开始按钮生成10000个随机数,然后分别使用冒泡排序和快速排序排序这10000个随机数,最后在窗口显示排序后的数字: mainwindow.h文件…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
MongoDB学习和应用(高效的非关系型数据库)
一丶 MongoDB简介 对于社交类软件的功能,我们需要对它的功能特点进行分析: 数据量会随着用户数增大而增大读多写少价值较低非好友看不到其动态信息地理位置的查询… 针对以上特点进行分析各大存储工具: mysql:关系型数据库&am…...
【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...
Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战
说明:这是一个机器学习实战项目(附带数据代码文档),如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下,风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...
08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险
C#入门系列【类的基本概念】:开启编程世界的奇妙冒险 嘿,各位编程小白探险家!欢迎来到 C# 的奇幻大陆!今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类!别害怕,跟着我,保准让你轻松搞…...
