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

news2025/1/16 23:23:25

一、主从复制

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 TO
  MASTER_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.coloradmin.cn/o/2277748.html

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

相关文章

实战threeJS数字孪生开源 数字工厂

threeJS数字孪生 数字工厂 设备定位 基于three.js的数字工厂开源项目介绍 一、项目概述 本项目是一款基于three.js的数字工厂项目,旨在通过3D可视化技术,为工业制造领域提供一个直观、高效、智能的生产监控与管理平台。该项目结合了现代前端技术栈&…

回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测

回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测 目录 回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 RVM-Adaboost相关向量机集成学习多输入单输出回归预测是一种先进的机器学习方法,用于处理…

计算机网络 (44)电子邮件

一、概述 电子邮件(Electronic Mail,简称E-mail)是因特网上最早流行的应用之一,并且至今仍然是因特网上最重要、最实用的应用之一。它利用计算机技术和互联网,实现了信息的快速、便捷传递。与传统的邮政系统相比&#…

向量数据库Milvus详解

向量数据库Milvus详解 0. 什么是向量数据库? 在现实世界中,并非所有数据都可以整齐地放到行和列中。在处理图像、视频和自然语言等复杂的非结构化数据时尤其如此。这就是向量数据库的用武之地。 向量数据库是一种以高维向量的形式来存储数据的数据库,这些向量本质上是表示…

通信与网络安全管理之ISO七层模型与TCP/IP模型

一.ISO参考模型 OSI七层模型一般指开放系统互连参考模型 (Open System Interconnect 简称OSI)是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统提供了一种功能结构的框架。 它从低到高分别是…

Redis--21--大Key问题解决方案

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言Redis--20--大Key问题解析 一、如何发现Redis大Key1. 使用Redis命令行工具**MEMORY USAGE****RANDOMKEY****DEBUG OBJECT****SCAN命令****redis-cli 工具&#…

微信小程序订阅消息提醒-云函数

微信小程序消息订阅分2种: 1.一次性订阅:用户订阅一次就可以推送一次,如果需要多次提醒需要多次订阅。 2.长期订阅:只有公共服务领域,如政务、医疗、交通、金融和教育等。‌在用户订阅后,在很长一段时间内…

Ubuntu上,ffmpeg如何使用cuda硬件解码、编码、转码加速

本文使用 Ubuntu 环境。Ubuntu 直接使用 APT 安装的就支持 CUDA 加速。本文使用这样下载的版本进行演示,你自己编译或者其他源的版本可能会不同。 ffmpeg 的一些介绍,以及 macOS 版本的 ffmpeg 硬件加速请见《macOS上如何安装(不需要编译安装…

了解Python中的SciPy库

么是 SciPy? SciPy(发音为“Sigh Pie”)是 Scientific Python 的首字母缩写词,它是 Python 的开源库,用于科学和技术计算。它是 Python 编程语言中称为 Numpy 的基本数组处理库的扩展,旨在支持高级科学和工…

51单片机入门基础

目录 一、基础知识储备 (一)了解51单片机的基本概念 (二)掌握数字电路基础 (三)学习C语言编程基础 二、开发环境搭建 (一)硬件准备 (二)软件准备 三、…

【Qt】01-了解QT

踏入QT的殿堂之路 前言一、创建工程文件1.1 步骤介绍1.2 编译介绍方法1、方法2、编译成功 二、了解框架2.1 main.cpp2.2 .Pro文件2.2.1 注释需要打井号。2.2.2 F1带你进入帮助模式2.2.3 build文件 2.3 构造函数 三、编写工程3.1 main代码3.2 结果展示 四、指定父对象4.1 main代…

【Uniapp-Vue3】使用defineExpose暴露子组件的属性及方法

如果我们想要让父组件访问到子组件中的变量和方法,就需要使用defineExpose暴露: defineExpose({ 变量 }) 子组件配置 父组件配置 父组件要通过onMounted获取到子组件的DOM 传递多个属性和方法 子组件 父组件

qml XmlListModel详解

1、概述 XmlListModel是QtQuick用于从XML数据创建只读模型的组件。它可以作为各种view元素的数据源,比如ListView、GridView、PathView等;也可以作为其他和model交互的元素的数据源。通过XmlRole定义角色,如name、age和height,并…

登录系统网址作业

目录 主页代码 主页​编辑 效果1 登录页面代码 登录页面 效果2 注册页面代码 注册页面 效果3 主页代码 <!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta name"viewport" content&qu…

生产管理看板助力节能科技公司实现数据自动化管理

在节能科技公司的生产过程中&#xff0c;数据管理的自动化是提高生产效率和产品质量的关键。然而&#xff0c;许多公司在数据记录、展示、对比和存档方面仍面临诸多痛点&#xff0c;如产品检测数据无法自动记录、缺乏直观的产线状态展示、检测数据对比繁琐耗时&#xff0c;以及…

论文阅读:Searching for Fast Demosaicking Algorithms

今天介绍一篇有关去马赛克的工作&#xff0c;去马赛克是 ISP 流程里面非常重要的一个模块&#xff0c;可以说是将多姿多彩的大千世界进行色彩还原的重要一步。这篇工作探索的是如何从各种各样的去马赛克算法中&#xff0c;选择最佳的一种。 Abstract 本文提出了一种方法&…

nginx 修改内置 404 页面、点击劫持攻击。

1、在部署前端项目的目录下增加 404.html 页面&#xff1a;/opt/web/404.html。 2、在 nginx 配置中增加 404 配置&#xff1a; root /opt/web; # 设置根目录的配置error_page 404 404.html; location /404.html {root /opt/web;# 指定 404 页面所在的根目录internal;# 确保…

金融项目实战 04|JMeter实现自动化脚本接口测试及持续集成

目录 一、⾃动化测试理论 二、自动化脚本 1、添加断言 1️⃣注册、登录 2️⃣认证、充值、开户、投资 2、可重复执行&#xff1a;清除测试数据脚本按指定顺序执行 1️⃣如何可以做到可重复执⾏&#xff1f; 2️⃣清除测试数据&#xff1a;连接数据库setup线程组 ①明确…

【SH】Xiaomi9刷Windows10系统研发记录 、手机刷Windows系统教程、小米9重装win10系统

文章目录 参考资料云盘资料软硬件环境手机解锁刷机驱动绑定账号和设备解锁手机 Mindows工具箱安装工具箱和修复下载下载安卓和woa资源包第三方Recovery 一键安装Windows准备工作创建分区安装系统 效果展示Windows和Android一键互换Win切换安卓安卓切换Win 删除分区 参考资料 解…

3 前端(上): Web开发相关概念 、HTML语法、CSS语法

文章目录 前言:导学1 Web开发相关概念2 Web标准(网页标准)3 软件架构(CS/BS)(1)C/S: Client/Server 客户端 / 服务器端(2)B/S: Browser/Server 浏览器 / 服务器端VSCode配置前段开发环境一、HTML概念1 概念2 HTML快速入门(1)语法快速入门(2)VSCode一个 !(快捷键…