MySQL 主從復制原理及其工作過程

一、MySQL主從復制原理

MySQL 主從復制是一種將數據從一個 MySQL 數據庫服務器(主服務器,Master)復制到一個或多個 MySQL 數據庫服務器(從服務器,Slave)的技術。以下簡述其原理,主要包含三個核心組件和三個主要步驟:

核心組件

  • 二進制日志(Binary Log):位于主服務器上,主服務器會將所有對數據庫進行更改的操作(如 INSERT、UPDATE、DELETE 等)以二進制的形式記錄到二進制日志文件中。這些日志記錄了數據修改的具體內容和執行順序,是主從復制的基礎數據來源。

  • 中繼日志(Relay Log):存在于從服務器上,從服務器通過 I/O 線程從主服務器的二進制日志中讀取更新事件,并將這些事件寫入到本地的中繼日志文件中。中繼日志起到了緩存和中轉的作用,確保從服務器能夠按順序處理主服務器的更新。

  • SQL 線程:從服務器上的 SQL 線程負責讀取中繼日志中的事件,并將這些事件在從服務器上重新執行一遍,從而實現主從數據的同步。

工作步驟

1. 主服務器記錄二進制日志

  • 當主服務器上發生數據更改操作(如插入、更新、刪除數據)時,MySQL 會將這些更改操作記錄到二進制日志中。二進制日志以事件(Event)的形式存儲,每個事件對應一個具體的數據庫更改操作。例如,當執行一條 INSERT 語句向表中插入數據時,主服務器會將該 INSERT 操作作為一個事件記錄到二進制日志中。

2. 從服務器讀取主服務器二進制日志

  • 從服務器上有一個 I/O 線程,它會與主服務器建立連接,并請求主服務器發送其二進制日志。主服務器接收到請求后,會將二進制日志中的更新事件發送給從服務器的 I/O 線程。從服務器的 I/O 線程將接收到的更新事件寫入到本地的中繼日志中。

3. 從服務器執行中繼日志中的事件

  • 從服務器上的 SQL 線程會不斷地監控中繼日志,當發現中繼日志中有新的事件時,會按照事件的順序依次讀取并執行這些事件。例如,如果中繼日志中記錄了一個 INSERT 事件,SQL 線程會在從服務器的相應表中執行相同的 INSERT 操作,從而保證從服務器的數據與主服務器的數據一致。

二、MySQL主從復制步驟

注意:firewall-cmd和getenforce處于關閉狀態

1、基于binlog的主從同步

Master配置

[root@openEuler-1 ~]# yum install -y mysql-server#配置文件(主機克隆),注意://三臺主從庫的id必須不同
#查看命令 vim /var/lib/mysql/auto.cnf[root@openEuler-1 ~]# vim /etc/my.cnf.d/mysql-server.cnf
server_id=1
[root@openEuler-1 ~]# systemctl restart mysqld#授權用戶
mysql> create user rep@'192.168.159.%' identified with mysql_native_password by 'MySQL@123';
mysql> grant replication slave on *.* to rep@'192.168.159.%';
mysql> show master status;  //查看主服務器狀態,日志用于從服務器同步,position是當前定位

Slave配置

#配置文件
[root@openEuler-2 ~]# vim /etc/my.cnf.d/mysql-server.cnf
[root@openEuler-2 ~]# systemctl restart mysqld[root@openEuler-3 ~]# vim /etc/my.cnf.d/mysql-server.cnf
[root@openEuler-3 ~]# systemctl restart mysqld
[root@openEuler-3 ~]##設置復制參數,兩個Slave一樣的配置
mysql> change master to-> master_host='192.168.159.133',-> master_user='rep',-> master_password='MySQL@123',-> master_log_file='binlog.000004',->  master_log_pos=1565;
Query OK, 0 rows affected, 9 warnings (0.03 sec)#啟動復制進程,兩個Slave都啟動
mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.02 sec)

?檢查從庫狀態

mysql> show slave status \G

?

2、 基于gtid的主從同步配置

準備工作,停止從庫的復制

stop slave

?Master配置

#修改配置文件
[root@Master ~]# vim /etc/my.cnf.d/mysql-server.cnf
#在最后添加
gtid_mode=ON
enforce-gtid-consistency=ON#重啟MySQL服務
[root@Master ~]# systemctl restart mysqld.service#重置二進制日志和GTID
mysql> reset master;#創建用戶授予權限
mysql> create user rep@'192.168.159.%' identified with mysql_native_password by 'MySQL@123'; 
mysql> grant replication slave on *.* to rep@'192.168.159.%';#重新加載授權表
mysql> flush privileges;

Slave配置

#修改配置文件
[root@Slave1 ~]# vim /etc/my.cnf.d/mysql-server.cnf
gtid_mode=ON
enforce-gtid-consistency=ON#重啟服務
[root@Slave1 ~]# systemctl restart mysqld.service#配置連接到主庫
mysql> change replication source to-> source_host='192.168.159.133',-> source_port=3306,-> source_user='rep',-> source_password='MySQL@123',-> source_auto_position=1;mysql> start replica;

??檢查從庫狀態

mysql> show slave status \G

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/71457.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71457.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/71457.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【趙渝強老師】Spark RDD的緩存機制

Spark RDD通過persist方法或cache方法可以將計算結果的緩存,但是并不是這兩個方法被調用時立即緩存,而是觸發后面的action時,該RDD才會被緩存在計算節點的內存中并供后面重用。下面是persist方法或cache方法的函數定義: def pers…

設計模式相關知識點

目錄 設計模式 設計模式 代碼設計原則 設計模式 設計模式 干掉if...else,最好用的3種設計模式! | 小傅哥 bugstack 蟲洞棧 代碼設計原則-CSDN博客 23種設計模式-CSDN博客 策略模式(Strategy Pattern)-CSDN博客 責任鏈模式…

ShenNiusModularity項目源碼學習(9:項目結構)

ShenNiusModularity源碼主要有11個project(其實還有officialweb、test兩個文件夾,大致有4、5個project,但看著跟主要項目代碼沒太大關系,暫時不管),這11個project的依賴關系如下圖所示,其中最下…

ubuntu22.4搭建單節點es8.1

下載對應的包 elasticsearch-8.1.1-linux-x86_64.tar.gz 創建es租戶 groupadd elasticsearc useradd elasticsearch -g elasticsearch -p elasticsearch chmod uw /etc/sudoers chmod -R elasticsearch:elasticsearch elasticsearch 修改配置文件 vim /etc/sysctl.conf vm…

Docker 部署 ollama + DeepSeek

拉取并運行 Ollama Docker 鏡像 使用以下命令從 Docker Hub 拉取 Ollama 鏡像并運行容器: docker run -d -p 11434:11434 --name ollama ollama/ollama -d:以守護進程模式運行容器,即讓容器在后臺運行。-p 11434:11434:將容器內…

解決DeepSeek服務器繁忙的有效方法

全球42%的企業遭遇過AI工具服務器過載導致內容生產中斷(數據來源:Gartner 2025)。當競品在凌晨3點自動發布「智能家居安裝指南」時,你的團隊可能正因DeepSeek服務器繁忙錯失「凈水器保養教程」的流量黃金期?。147SEO智能調度系統…

Discuz! X3.5 根目錄權限設置

在 Discuz! X3.5 中,根目錄的權限設置是確保網站安全性和功能正常運行的關鍵。如果權限設置不當,可能會導致文件無法訪問、安全問題(如文件被篡改)或功能異常。以下是關于 Discuz! X3.5 根目錄權限設置的詳細說明和建議: 1. 根目錄位置 Discuz! X3.5 的根目錄通常是網站的…

【C++八股】內存對?

內存對齊是指編譯器按照特定規則安排數據在內存中的存儲位置,以提高程序的執行效率和可移植性。 內存對齊的原因: 1. 性能優化: 現代處理器通常要求數據在內存中按照特定的邊界對齊,以提高內存訪問效率。 如果數據未對齊&#x…

【有啥問啥】DeepSeek 技術原理詳解

DeepSeek 技術原理詳解 DeepSeek 是一款具有突破性技術的大型語言模型,其背后的技術原理涵蓋了多個方面,以下是對其主要技術原理的詳細介紹: 架構創新 多頭潛在注意力機制(MLA) 傳送門鏈接: DeepSeek V3中的Multi-…

ML.NET庫學習008:使用ML.NET進行心臟疾病預測模型開發

文章目錄 ML.NET庫學習008:使用ML.NET進行心臟疾病預測模型開發1. 項目主要目的和原理2. 項目概述實現的主要功能:主要流程步驟:關鍵技術: 3. 主要功能和步驟數據加載與路徑處理模型訓練與評估模型保存與加載 4. 代碼中的數據結構…

FFmpeg 全面知識大綱梳理

1. FFmpeg 簡介 FFmpeg 是什么: 一個開源的多媒體處理框架,用于處理音頻、視頻和流媒體。支持多種格式和編解碼器。提供命令行工具和庫(如 libavcodec, libavformat, libavfilter 等)。主要功能: 格式轉換編解碼流媒體處理音視頻剪輯、合并、分離添加濾鏡、特效壓縮與優化…

人工智能基礎之數學基礎:01高等數學基礎

函數 極限 按照一定次數排列的一列數:“,“,…,"…,其中u 叫做通項。 對于數列{Un}如果當n無限增大時,其通項無限接近于一個常數A,則稱該數列以A為極限或稱數列收斂于A,否則稱數列為發散, 極限值 左…

從零搭建微服務項目Base(第5章——SpringBoot項目LogBack日志配置+Feign使用)

前言: 本章主要在原有項目上添加了日志配置,對SpringBoot默認的logback的配置進行了自定義修改,并詳細闡述了xml文件配置要點(只對日志配置感興趣的小伙伴可選擇直接跳到第三節),并使用Feign代替原有RestT…

【關于電商數據采集】電商數據采集的市場應用及發展

## 電商數據采集應用行業介紹 **一、 行業概述** 電商數據采集應用行業是指利用技術手段,自動或半自動地從電商平臺、社交媒體等渠道獲取商品信息、用戶評論、銷售數據等信息的行業。隨著電子商務的蓬勃發展,數據已成為電商企業的重要資產,…

c++進階———繼承

1.引言 在一些大的項目中,我們可能要重復定義一些類,但是很麻煩,應該怎么辦呢?舉個簡單的例子,我要做一個全校師生統計表,統計學號,教師編號,姓名,年齡,電話…

Golang學習筆記_34——組合模式

Golang學習筆記_31——原型模式 Golang學習筆記_32——適配器模式 Golang學習筆記_33——橋接模式 文章目錄 一、核心概念1. 定義2. 解決的問題3. 核心角色4. 類圖 二、特點分析三、適用場景1. 文件系統2. 圖形界面3. 組織架構 四、代碼示例(Go語言)五、…

【部署優化篇三】《DeepSeek邊緣計算實戰:把目標檢測模型塞進樹莓派,讓AI在巴掌大的設備上“開天眼“》

“誰說只有超級計算機才能跑AI?今天咱們就要在樹莓派上玩轉DeepSeek目標檢測,讓這個巴掌大的小盒子變成會‘看’世界的智能終端!” 本文手把手教你從零開始,把最潮的目標檢測模型塞進樹莓派。全程高能預警,建議準備好你的樹莓派4B/5和散熱風扇,咱們這就開啟邊緣計算的魔法…

Django中數據庫遷移命令

在 Django 中,數據庫遷移是確保數據庫結構與 Django 模型定義保持一致的重要過程。以下是 Django 中常用的數據庫遷移命令: 1. python manage.py makemigrations 功能:此命令用于根據 Django 項目的模型文件(models.py&#xff…

2023年河北省職業院校技能大賽網絡系統管理賽項樣題解法

? 有問題請留言或主頁私信咨詢 配置文件有部分測試時的冗余配置無視即可。 解法只有大致解法,并不完整。請參考配置,自己補全 基礎配置 1.所有交換機和無線控制器開啟SSH服務,用戶名密碼分別為admin、admin1234;密碼為明文類…

React之旅-02 創建項目

創建React項目,常用的方式有兩種: 官方提供的腳手架,官網:https://create-react-app.dev/。如需創建名為 my-app 的項目,請運行如下命令: npx create-react-app my-app 使用Vite包,官網&…