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中的两…

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

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

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

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

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

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

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

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

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

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

记一次学习skynet中的C/Lua接口编程解析protobuf过程

1.引言 最近在学习skynet过程中发现在网络收发数据的过程中数据都是裸奔,就想加入一种数据序列化方式,json、xml简单好用,但我就是不想用,于是就想到了protobuf,对于protobuf C/C的使用个人感觉有点重,正好…

SQLAlchemy

https://docs.sqlalchemy.org.cn/en/20/orm/quickstart.htmlhttps://docs.sqlalchemy.org.cn/en/20/orm/quickstart.html 声明模型 在这里,我们定义模块级构造,这些构造将构成我们从数据库中查询的结构。这种结构被称为 声明式映射,它同时定…

Trimble自动化激光监测支持历史遗产实现可持续发展【沪敖3D】

故事桥(Story Bridge)位于澳大利亚布里斯班,建造于1940年,全长777米,横跨布里斯班河,可载汽车、自行车和行人往返于布里斯班的北部和南部郊区。故事桥是澳大利亚最长的悬臂桥,是全世界两座手工建…

Playwright vs Selenium:全面对比分析

在现代软件开发中,自动化测试工具在保证应用质量和加快开发周期方面发挥着至关重要的作用。Selenium 作为自动化测试领域的老牌工具,长期以来被广泛使用。而近年来,Playwright 作为新兴工具迅速崛起,吸引了众多开发者的关注。那么…

Windows 程序设计3:宽窄字节的区别及重要性

文章目录 前言一、宽窄字节简介二、操作系统及VS编译器对宽窄字节的编码支持1. 操作系统2. 编译器 三、宽窄字符串的优缺点四、宽窄字节数据类型总结 前言 Windows 程序设计3:宽窄字节的区别及重要性。 一、宽窄字节简介 在C中,常用的字符串指针就是ch…

进阶——十六届蓝桥杯嵌入式熟练度练习(LED的全开,全闭,点亮指定灯,交替闪烁,PWM控制LED呼吸灯)

点亮灯的函数 void led_show(unsigned char upled) { HAL_GPIO_WritePin(GPIOC,GPIO_PIN_All,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOC,upled<<8,GPIO_PIN_RESET); HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET); HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_RE…

力扣 最大子数组和

动态规划&#xff0c;前缀和&#xff0c;维护状态更新。 题目 从题可以看出&#xff0c;找的是最大和的连续子数组&#xff0c;即一个数组中的其中一个连续部分。从前往后遍历&#xff0c;每遍历到一个数可以尝试做叠加&#xff0c;注意是尝试&#xff0c;因为有可能会遇到一个…

Homestyler 和 Tripo AI 如何利用人工智能驱动的 3D 建模改变定制室内设计

让设计梦想照进现实 在Homestyler,我们致力于为每一个梦想设计师提供灵感的源泉,而非挫折。无论是初学者打造第一套公寓,或是专业设计师展示作品集,我们的直观工具都能让您轻松以惊人的3D形式呈现空间。 挑战:实现定制设计的新纪元 我们知道,将个人物品如传家宝椅子、…

算法练习4——一个六位数

这道题特别妙 大家仔细做一做 我这里采用的是动态规划来解这道题 结合题目要求找出数与数之间的规律 抽象出状态转移方程 题目描述 有一个六位数&#xff0c;其个位数字 7 &#xff0c;现将个位数字移至首位&#xff08;十万位&#xff09;&#xff0c;而其余各位数字顺序不…

client-go 的 QPS 和 Burst 限速

1. 什么是 QPS 和 Burst &#xff1f; 在 kubernetes client-go 中&#xff0c;QPS 和 Burst 是用于控制客户端与 Kubernetes API 交互速率的两个关键参数&#xff1a; QPS (Queries Per Second) 定义&#xff1a;表示每秒允许发送的请求数量&#xff0c;即限速器的平滑速率…

太原理工大学软件设计与体系结构 --javaEE

这个是简答题的内容 选择题的一些老师会给你们题库&#xff0c;一些注意的点我会做出文档在这个网址 项目目录预览 - TYUT复习资料:复习资料 - GitCode 希望大家可以给我一些打赏 什么是Spring的IOC和DI IOC 是一种设计思想&#xff0c;它将对象的创建和对象之间的依赖关系…

深度学习知识点:LSTM

文章目录 1.应用现状2.发展历史3.基本结构4.LSTM和RNN的差异 1.应用现状 长短期记忆神经网络&#xff08;LSTM&#xff09;是一种特殊的循环神经网络(RNN)。原始的RNN在训练中&#xff0c;随着训练时间的加长以及网络层数的增多&#xff0c;很容易出现梯度爆炸或者梯度消失的问…