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.pswp.cn/web/65828.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65828.shtml
英文地址,請注明出處:http://en.pswp.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說明可參數我前面寫的…