Mysql--运维篇--主从复制和集群(主从复制I/O线程,SQL线程,二进制日志,中继日志,集群NDB)

一、主从复制

MySQL的主从复制(Master-Slave Replication)是一种数据冗余和高可用性的解决方案,它通过将一个或多个从服务器(Slave)与主服务器(Master)同步来实现。主从复制的基本原理是:在主服务器上记录所有的数据变更操作(如INSERT、UPDATE、DELETE等),然后这些变更被传输到从服务器,并在从服务器上重放这些操作,从而保持数据的一致性。

1、主从复制的工作原理

(1)、二进制日志 (Binary Log)
  • 主服务器上的所有更改都会被记录到二进制日志中。
  • 二进制日志包含所有对数据库结构或数据进行更改的操作,以及每个事件的时间戳和执行时间。
(2)、I/O线程(IO Thread)
  • 从服务器启动一个I/O线程连接到主服务器,并请求获取二进制日志中的更新。
  • 主服务器接收到这个请求后,会创建一个二进制日志转储线程(Binlog Dump Thread),将二进制日志的内容发送给从服务器的I/O线程。
  • I/O线程接收到的数据会被写入到从服务器的中继日志(Relay Log)中。
(3)、SQL线程(SQL Thread)
  • 从服务器上的SQL线程读取中继日志中的事件,并在本地数据库上重放这些事件,以使从服务器的数据与主服务器保持一致。
  • SQL线程可以并行地应用多个表上的事件,提高复制效率(取决于配置和MySQL版本)。
(4)、位置跟踪
  • 为了确保从服务器能够正确地应用主服务器上的所有更改,主服务器和从服务器之间需要维持一个位置跟踪机制。通常,这通过二进制日志文件名和位置(即日志序列号,LSN)来实现。
  • 每个从服务器都有自己的master.info文件,其中保存了当前正在读取的主服务器二进制日志的位置信息。
(5)、心跳检测
  • 从服务器定期向主服务器发送心跳包,以监测连接状态。
  • MySQL 5.7引入了半同步复制,其中主服务器只有在至少一个从服务器确认已经接收到并记录下最新的二进制日志事件之后才会提交事务。这种方式提高了数据的安全性和一致性。

2、实现主从复制的步骤

准备工作:

  • 备份主服务器:确保主服务器上有最新的备份,以便在出现问题时可以从备份中恢复。
  • 确定主服务器的二进制日志位置:在开始复制之前,记录下主服务器当前的二进制日志文件名和位置。可以通过SHOW MASTER STATUS;命令查看。
(1)、配置主服务器

1、启用二进制日志
确保主服务器配置文件(通常是my.cnf或my.ini)中有以下设置。
配置示例:

[mysqld]
server-id=1
log-bin=mysql-bin

解释:

  • server-id必须为唯一的正整数(主从集群中不能重复),用于标识每个服务器实例。
  • log-bin指定了二进制日志的前缀名称。

2、重启MySQL服务
使配置生效。
命令示例:

systemctl restart mysqld;

3、创建复制用户
在主服务器上创建一个专门用于复制的用户,并授予适当的权限。
sql示例:

CREATE USER 'replication_user'@'%' IDENTIFIED with mysql_native_password BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%';
FLUSH PRIVILEGES;

解释:

  • 创建用户replication_user,%表示用户可以通过任何ip地址连接到Mysql,使用密码password认证。
  • 授予复制所需的权限给replication_user用户。
  • 刷新权限,使更改立即生效
(2)、配置从服务器

1、设置唯一server-id
在从服务器的配置文件中设置不同的server-id值,例如server-id=2。确保每个从服务器的server-id都是唯一的。

2、指定主服务器信息
使用CHANGE MASTER TO命令配置从服务器连接到主服务器的信息,包括主机名、端口、用户名、密码以及二进制日志文件名和位置。
sql示例:

 CHANGE MASTER TOMASTER_HOST='master_host_ip',MASTER_USER='replication_user',MASTER_PASSWORD='password',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=12345;

注意:
这里的MASTER_LOG_FILE和MASTER_LOG_POS应该对应于你在主服务器上记录的二进制日志位置。

3、启动复制
执行START SLAVE;命令启动复制进程。你可以使用SHOW SLAVE STATUS;检查复制的状态,确保没有错误。
在这里插入图片描述

(3)、验证复制
  • 测试数据同步:在主服务器上插入一些测试数据,然后检查从服务器是否也有了相同的数据。
  • 监控复制状态:定期使用SHOW SLAVE STATUS;检查从服务器的复制状态,特别关注以下几个字段:
    • Slave_IO_Running: 应该是Yes,表示I/O线程正在运行。
    • Slave_SQL_Running: 应该是Yes,表示SQL线程正在运行。
    • Last_Error: 如果为空,则说明没有遇到错误。
    • Seconds_Behind_Master: 显示从服务器落后主服务器的秒数,理想情况下应接近0。

示例:

SHOW SLAVE STATUS;

运行结果:
在这里插入图片描述

(4)、注意事项
  • 网络稳定性:确保主服务器和从服务器之间的网络连接稳定可靠,因为任何中断都可能导致复制失败。
  • 性能影响:虽然主从复制本身不会显著影响主服务器的性能,但在高并发写入的情况下,可能会增加一些负担。因此,合理规划硬件资源和优化查询非常重要。
  • 延迟问题:由于网络延迟或其他因素,从服务器可能会落后于主服务器。如果延迟过大,可能需要考虑调整复制策略或优化系统配置。
  • 安全性:保护好复制用户的凭据,避免泄露,并且只赋予必要的权限。
  • 故障转移:当主服务器发生故障时,可以手动将从服务器提升为主服务器,但这通常涉及到更复杂的配置和管理,比如设置自动故障转移机制或者使用集群技术。

二、集群

MySQL集群(MySQL Cluster)是一种高可用性和可扩展性的解决方案,它通过分布式的架构来提供数据冗余、故障转移和负载均衡。MySQL Cluster使用NDB(Network Database)存储引擎,这与传统的InnoDB或MyISAM存储引擎不同,NDB是专门为分布式环境设计的。

原理示意图:
在这里插入图片描述

1、MySQL Cluster的核心组件

(1)、管理节点(Management Node):
  • 管理节点负责配置和监控整个集群的状态。它不直接参与数据处理,而是作为集群的“大脑”,协调其他节点的工作。
  • 每个管理节点运行ndb_mgmd守护进程,并且通常建议至少有两个管理节点以实现高可用性。
(2)、数据节点(Data Node):
  • 数据节点是存储实际数据的片段。为了保证高可用性,每个数据副本都会被分片并分布在多个数据节点上。即使某个节点发生故障,其他节点仍然可以继续提供服务。
  • 数据节点运行ndbd或ndbmtd守护进程(多线程版本)。根据硬件资源和性能需求,可以选择单线程或多线程模式。
(3)、SQL节点(SQL Node)
  • SQL节点是应用程序与MySQL Cluster交互的接口。它们执行SQL查询并将结果返回给客户端。SQL节点可以是普通的MySQL服务器实例,运行mysqld守护进程。
  • 一个集群中可以有多个SQL节点,以便于负载均衡和提高并发处理能力。
(4)、API节点(API Node)
  • API节点允许应用程序通过编程接口(如C++、Java等)直接访问NDB存储引擎,而不需要经过SQL解析层。这对于某些高性能要求的应用场景非常有用。
  • API节点不是必须的,但提供了额外的灵活性和性能优势。

2、MySQL Cluster的工作原理

  • 数据分片 (Sharding):MySQL Cluster采用哈希分片的方式将表中的行分配到不同的数据节点。每个分片都包含至少一份完整的数据副本,确保了即使某个节点失效,数据仍然可用。
  • 同步复制:所有写操作都会立即同步到所有的数据副本上,确保了数据的一致性。读操作可以在任意一个数据节点上执行,因为每个节点都持有相同的数据副本。
  • 自动故障检测和恢复:管理节点会定期检查各个数据节点的健康状态。如果发现某个节点不可用,它会自动将流量重新路由到健康的节点,并尝试重启失败的节点。
  • 在线扩展:可以通过添加新的数据节点和SQL节点来水平扩展集群,而无需停机。这使得MySQL Cluster非常适合需要动态调整资源的应用场景。

3、配置和部署MySQL Cluster

(1)、安装软件包

首先,你需要安装MySQL Cluster的相关软件包。可以从官方MySQL网站(https://dev.mysql.com/downloads/cluster/)下载适用于你操作系统的安装包,或者使用包管理器进行安装。

需要下载和安装的软件包括:
1、MySQL Cluster管理节点(Management Node)软件包

  • mysql-cluster-community-management-server(对于社区版)
  • mysql-cluster-enterprise-management-server(对于企业版)
    这些软件包包含了管理节点所需的ndb_mgmd守护进程,用于配置和监控集群。

2、MySQL Cluster数据节点(Data Node)软件包

  • mysql-cluster-community-data-node(对于社区版)
  • mysql-cluster-enterprise-data-node(对于企业版)
    这些软件包包含了数据节点所需的ndbd或ndbmtd守护进程,用于存储和处理数据。ndbmtd是多线程版本,适用于高性能需求的场景。

3、MySQL Cluster SQL节点(SQL Node)软件包

  • mysql-cluster-community-server(对于社区版)
  • mysql-cluster-enterprise-server(对于企业版)
    这些软件包包含了标准的MySQL服务器(mysqld),并且启用了对NDB存储引擎的支持。SQL 节点是应用程序与MySQL Cluster交互的接口,负责解析SQL 查询并将结果返回给客户端。

4、MySQL Cluster客户端工具(Client Tools)

  • mysql-client 或 mysql-cluster-community-client(对于社区版)
  • mysql-cluster-enterprise-client(对于企业版)
    这些软件包提供了常用的 MySQL 客户端工具,如mysql命令行客户端、mysqladmin等,用于管理和操作MySQL Cluster。

5、MySQL Cluster开发库(Development Libraries)

  • mysql-cluster-community-devel(对于社区版)
  • mysql-cluster-enterprise-devel(对于企业版)
    这些软件包包含了开发库和头文件,允许你编写使用NDB API的应用程序,直接与NDB存储引擎进行交互。

6、MySQL Cluster备份工具(Backup Tools)

  • mysql-cluster-community-backup(对于社区版)
  • mysql-cluster-enterprise-backup(对于企业版)
    这些软件包提供了专门的备份工具,帮助你管理和恢复 MySQL Cluster 的数据。

7、MySQL Cluster监控工具(Monitoring Tools)

  • mysql-cluster-community-monitor(对于社区版)
  • mysql-cluster-enterprise-monitor(对于企业版)
    这些软件包提供了监控工具,帮助你实时监控 MySQL Cluster 的状态和性能。
(2)、配置管理节点

编辑配置文件(通常是config.ini),定义集群的拓扑结构,包括管理节点、数据节点和SQL节点的数量及地址。

示例:

[NDBD DEFAULT]
NoOfReplicas=2
DataMemory=800M
IndexMemory=184M[TCP DEFAULT][MYSQLD]
# 可以添加多个SQL节点
[MYSQLD][NDB_MGMD]
NodeId=1
HostName=management_node_ip[NDBD]
NodeId=2
HostName=data_node_1_ip[NDBD]
NodeId=3
HostName=data_node_2_ip
(3)、启动管理节点

在管理节点上启动管理守护进程:

ndb_mgmd -f /path/to/config.ini --initial

–initial选项用于初始化配置,之后可以省略。

(4)、启动数据节点

在每个数据节点上启动数据守护进程:

ndbd

对于多线程版本,使用ndbmtd命令。

(5)、配置SQL节点

在每个SQL节点上,编辑MySQL配置文件(my.cnf或my.ini),指定集群连接参数:

[mysqld]
ndbcluster
ndb-connectstring=management_node_ip

然后启动MySQL服务。

(6)、创建数据库和表

登录到任何一个SQL节点,创建数据库和表,并指定使用NDB存储引擎:
示例:

CREATE DATABASE my_cluster_db;
USE my_cluster_db;CREATE TABLE my_table (id INT NOT NULL AUTO_INCREMENT,name VARCHAR(50),PRIMARY KEY (id)
) ENGINE=NDBCLUSTER;

4、监控和维护

  • 管理命令:使用ndb_mgm工具可以连接到管理节点,查看集群状态、停止或启动节点等。例如:
ndb_mgm
show
  • 日志分析:检查管理节点和数据节点的日志文件,了解集群的运行情况和潜在问题。

  • 性能优化:根据应用的需求,调整配置参数(如内存分配、线程数等),以获得最佳性能。

  • 备份和恢复:定期备份集群数据,并制定灾难恢复计划。可以使用mysqldump工具或NDB专用的备份工具。

5、注意事项

  • 网络要求:MySQL Cluster对网络延迟非常敏感,因此建议使用低延迟、高带宽的网络连接。此外,尽量减少跨广域网(WAN)的部署,除非你已经采取了适当的措施来保证网络稳定性。

  • 资源消耗:由于数据会被复制到多个节点,MySQL Cluster会占用更多的磁盘空间和内存资源。确保你的硬件配置能够满足集群的需求。

  • 适用场景:虽然MySQL Cluster提供了高可用性和可扩展性,但它并不适合所有类型的应用。特别是对于那些涉及大量复杂查询、事务或大对象存储的应用,可能需要考虑其他解决方案。

  • 版本兼容性:确保所有节点使用相同的MySQL Cluster版本,以避免兼容性问题。

乘风破浪会有时,直挂云帆济沧海!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/65828.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【EI会议征稿通知】第十一届机械工程、材料和自动化技术国际会议(MMEAT 2025)

本次大会旨在汇聚全球机械工程、材料科学及自动化技术的创新学者和行业专家,为他们提供一个卓越的交流与合作平台。随着全球对可持续技术和智能制造需求的不断增加,MMEAT 2025将重点关注这些领域的最新发展趋势和未来前景。此次大会的主要目标是推动机械…

OpenCV基础:视频的采集、读取与录制

从摄像头采集视频 相关接口 - VideoCapture VideoCapture 用于从视频文件、摄像头或其他视频流设备中读取视频帧。它可以捕捉来自多种源的视频。 主要参数: cv2.VideoCapture(source): source: 这是一个整数或字符串,表示视频的来源。 如果是整数&a…

解读Linux Bridge中的东西流向与南北流向

解读Linux Bridge中的东西流向与南北流向 在现代云计算和虚拟化环境中,网络流量的管理和优化变得越来越重要。Linux Bridge作为Linux内核提供的一个强大的二层交换机工具,在虚拟化和容器化应用中扮演着至关重要的角色。本文将深入探讨Linux Bridge中的两…

在线实用工具 json格式化,base64转码,正则表达式测试工具

1、在线json格式化工具: https://json.openai2025.com/ 2、在线base64转码工具 https://base64.openai2025.com/ 3、在线正则表达式测试工具 https://reg.openai2025.com/ 4、在线去水印工具 https://watermark.openai2025.com

java 中 main 方法使用 KafkaConsumer 拉取 kafka 消息如何禁止输出 debug 日志

pom 依赖&#xff1a; <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>2.5.14.RELEASE</version> </dependency> 或者 <dependency><groupId>org.ap…

车联网安全--TLS握手过程详解

目录 1. TLS协议概述 2. 为什么要握手 2.1 Hello 2.2 协商 2.3 同意 3.总共握了几次手&#xff1f; 1. TLS协议概述 车内各ECU间基于CAN的安全通讯--SecOC&#xff0c;想必现目前多数通信工程师们都已经搞的差不多了&#xff08;不要再问FvM了&#xff09;&#xff1b;…

RuoYi Cloud项目解读【四、项目配置与启动】

四、项目配置与启动 当上面环境全部准备好之后&#xff0c;接下来就是项目配置。需要将项目相关配置修改成当前相关环境。 1 后端配置 1.1 数据库 创建数据库ry-cloud并导入数据脚本ry_2024xxxx.sql&#xff08;必须&#xff09;&#xff0c;quartz.sql&#xff08;可选&…

C#对象池

一、资源管理的困境与破局 在软件开发的征程中&#xff0c;我们时常陷入资源管理的泥沼。以一个繁忙餐厅为例&#xff0c;每个顾客都急需一个盘子盛美食&#xff0c;可盘子数量有限&#xff0c;如果每次顾客用完盘子后&#xff0c;都不假思索地去清洗一个全新的盘子来供下一位…

Vue.js组件开发-如何使用moment.js

在Vue.js组件开发中&#xff0c;需要处理日期和时间&#xff0c;moment.js 是一个非常有用的库。moment.js 提供了丰富的API来解析、验证、操作和显示日期和时间。 步骤&#xff1a; 1. 安装moment.js 首先&#xff0c;需要通过npm或yarn安装moment.js。在项目根目录下运行以…

微信小程序mp3音频播放组件,仅需传入url即可

// index.js // packageChat/components/audio-player/index.js Component({/*** 组件的属性列表*/properties: {/*** MP3 文件的 URL*/src: {type: String,value: ,observer(newVal, oldVal) {if (newVal ! oldVal && newVal) {// 如果 InnerAudioContext 已存在&…

要避免除数绝对值远远小于被除数绝对值的除法

要避免除数绝对值远远小于被除数绝对值的除法 用绝对值小的数作除数&#xff0c;舍人误差会增大&#xff0c;如计算 x y \frac xy yx​,若 0 < ∣ y ∣ < ∣ x ∣ 0<|y|<|x| 0<∣y∣<∣x∣&#xff0c;则可能对计算结果带来严重影响&#xff0c;应尽量避免…

深入了解OpenStack中的隧道网络

在OpenStack环境中&#xff0c;隧道网络是一项关键技术&#xff0c;它确保了虚拟机之间以及虚拟机与外部网络之间的安全通信。通过隧道机制&#xff0c;我们可以有效地隔离不同租户的流量&#xff0c;并支持多租户环境下的复杂网络需求。之前我们介绍了隧道网络&#xff0c;下面…

4. scala高阶之隐式转换与泛型

背景 上一节&#xff0c;我介绍了scala中的面向对象相关概念&#xff0c;还有一个特色功能&#xff1a;模式匹配。本文&#xff0c;我会介绍另外一个特别强大的功能隐式转换&#xff0c;并在最后介绍scala中泛型的使用 1. 隐式转换 Scala提供的隐式转换和隐式参数功能&#…

pandas与sql对应关系【帮助sql使用者快速上手pandas】

本页旨在提供一些如何使用pandas执行各种SQL操作的示例&#xff0c;来帮助SQL使用者快速上手使用pandas。 目录 SQL语法一、选择SELECT1、选择2、添加计算列 二、连接JOIN ON1、内连接2、左外连接3、右外连接4、全外连接 三、过滤WHERE1、AND2、OR3、IS NULL4、IS NOT NULL5、B…

第432场周赛:跳过交替单元格的之字形遍历、机器人可以获得的最大金币数、图的最大边权的最小值、统计 K 次操作以内得到非递减子数组的数目

Q1、跳过交替单元格的之字形遍历 1、题目描述 给你一个 m x n 的二维数组 grid&#xff0c;数组由 正整数 组成。 你的任务是以 之字形 遍历 grid&#xff0c;同时跳过每个 交替 的单元格。 之字形遍历的定义如下&#xff1a; 从左上角的单元格 (0, 0) 开始。在当前行中向…

《探索鸿蒙Next上开发人工智能游戏应用的技术难点》

在科技飞速发展的当下&#xff0c;鸿蒙Next系统为应用开发带来了新的机遇与挑战&#xff0c;开发一款运行在鸿蒙Next上的人工智能游戏应用更是备受关注。以下是在开发过程中可能会遇到的一些技术难点&#xff1a; 鸿蒙Next系统适配性 多设备协同&#xff1a;鸿蒙Next的一大特色…

Harry技术添加存储(minio、aliyun oss)、短信sms(aliyun、模拟)、邮件发送等功能

Harry技术添加存储&#xff08;minio、aliyun oss&#xff09;、短信sms&#xff08;aliyun、模拟&#xff09;、邮件发送等功能 基于SpringBoot3Vue3前后端分离的Java快速开发框架 项目简介&#xff1a;基于 JDK 17、Spring Boot 3、Spring Security 6、JWT、Redis、Mybatis-P…

Vue2: el-table为每一行添加超链接,并实现光标移至文字上时改变形状

为表格中的某一列添加超链接 一个表格通常有许多列,网上许多教程都可以实现为某一列添加超链接,如下,实现了当光标悬浮在“姓名”上时,改变为手形,点击可实现跳转。 <el-table :data="tableData"><el-table-column label="姓名" prop=&quo…

R数据分析:多分类问题预测模型的ROC做法及解释

有同学做了个多分类的预测模型,结局有三个类别,做的模型包括多分类逻辑回归、随机森林和决策树,多分类逻辑回归是用ROC曲线并报告AUC作为模型评估的,后面两种模型报告了混淆矩阵,审稿人就提出要统一模型评估指标。那么肯定是统一成ROC了,刚好借这个机会给大家讲讲ROC在多…

A3. Springboot3.x集成LLama3.2实战

本文将介绍集成ollama官网提供的API在Springboot工程中进行整合。由于没找到java-llama相关合适的sdk可以使用,因此只好对接官方给出的API开发一套RESTFull API服务。下面将从Ollama以下几个API展开介绍,逐渐的了解其特性以及可以干些什么。具体llama API说明可参数我前面写的…