MySQL主從複製原理

2020-12-17 anyux1

大家好,我是anyux。本文介紹MySQL主從複製原理。

主從複製原理

主從複製中涉及的文件

主庫:binlog

從庫:relaylog (中繼日誌)、master.info(主庫信息文件)、relaylog.info(relaylog應用信息)

主從複製中涉及的線程

主庫:Binlog_Dump Thread : DUMP_T

從庫:SLAVE_IO_THREAD:IO_T、SLAVE_SQL_THREAD:SQL_T

主從複製工作(過程)原理

1.從庫執行change master to 命令(主庫的連接信息+複製的起點)

2.從庫會將以上信息記錄到master.info文件

3.從庫執行start slave命令,立即開啟IO_T和SQL_T線程

4.從庫IO_T讀取master.info文件中的信息,獲取到IP、PORT、USER、PASS,BINLOG的位置信息

5.從庫IO_T請求連接主庫,主庫專門提供一個DUMP_T,負責和IO_T交互

6.IO_T根據binlog的位置信息(log-bin.000005,704),請求主庫新的binlog

7.主庫通過DUMP_T將最新的binlog,通過網絡傳輸給從庫的IO_T

8.IO_T接收到新的binlog日誌,存儲到TCP/IP緩存,立即返回ACK給主庫,並更新master.info

9.IO_T線程將TCP/IP緩存中數據,寫入到磁碟文件relaylog中

10.SQL_T線程讀取relay.info中的信息,獲取上次已經應用過的relaylog的位置信息

11.SQL_T會按照上次的位置點回放到最新的relaylog,再次更新relay.info信息

12.從庫會自動purge應用過relay進行定期清理

補充說明:一旦主從複製構建成功,主庫當中發生了新的變化,都會通過dump_T發送信號給IO_T,增強主從複製的實時性

主從複製監控

查看信息命令

mysql -uroot -proot -S /data/3307/mysql.sock -e "show slave status\G"

主庫相關信息

二進位日誌相關信息

中繼日誌相關信息

從庫relay應用信息有關的(relay.info)

可以查看是繼日誌中的事件

mysql -uroot -proot -S /data/3307/mysql.sock -e "show relaylog in 'db01-relay-bin.000006'"

查看線程運行狀態

mysql -uroot -proot -S /data/3307/mysql.sock -e "show slave status\G" | grep Running:

從庫延時主庫的時間(秒)

Seconds_Behind_Master: 0

延時從庫

SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

GTID複製有關的狀態信息

Retrieved_Gtid_Set: c7da7119-692c-11ea-9e3c-000c2922081d:3-4 Executed_Gtid_Set: c7da7119-692c-11ea-9e3c-000c2922081d:1-4 Auto_Position: 0

主從複製故障

從庫故障:IO 線程故障,SQL 線程故障,連接主庫故障。網絡連接信息錯誤或變更了。防火牆,連接數達到上限

對於主庫來說,如果執行了flush logs,就表示主庫會重新初始化二進位日誌,而從庫無法獲取此信息,因此從庫與主庫失去聯繫。主從複製斷開

主庫重置二進位日誌

flush logs;

再查看主庫二進位日誌狀態

show master status;

僅對於線程故障的問題,解決辦法如下

停止並重置從庫

stop slave; reset slave all;

修改從庫配置信息

CHANGE MASTER TO MASTER_HOST='192.168.255.113', MASTER_USER='repl', MASTER_PASSWORD='repl', MASTER_PORT=3306, MASTER_LOG_FILE='log-bin.000001', MASTER_LOG_POS=704, MASTER_CONNECT_RETRY=10;

啟動從庫複製功能

start slave;

相關焦點

  • 搭建MySQL主從集群,主從複製過程中同步延遲問題
    二、複製過程1)、Mysql的主從同步就是當master(主庫)發生數據變化的時候,會實時同步到slave(從庫)。2)、主從複製可以水平擴展資料庫的負載能力,容錯,高可用,數據備份。從庫數據目錄下存在大量mysql-relay-log日誌,該日誌同步完成之後就會被系統自動刪除,存在大量日誌,說明主從同步延遲很厲害。
  • MySQL資料庫主從複製搭建
    本文介紹MySQL資料庫主從複製搭建。文末有主從複製步驟導圖資料庫批量初始化更多詳細操作,請參考之前的多實例的文章內容為保證數據的純淨,將資料庫中所有數據刪除,並重新初始化rm -rf /data/*因為將server_id為6的實例設置為主庫主庫創建複製用戶 mysql -uroot -proot -e "grant replication slave on *.* to repl@'%' identified by 'repl'"; mysql -uroot -proot -
  • 輕鬆搭建MySQL主從複製、讀寫分離(雙機熱備)
    主從複製:當mysql資料庫的數據量太大的時候,查詢數據就很吃力了,無論怎麼優化都會產生瓶頸,這時我們需要增加伺服器設備來實現分布式資料庫,實現多機熱備份,要想實現多機的熱備,首先要了解主從資料庫伺服器的版本的需求,主從mysql的安裝運行版本需一致。
  • 高性能Mysql主從架構的複製原理及配置詳解
    一旦發現沒法精確複製時, 會自動選著基於行的複製。基於行的複製:把改變的內容複製過去,而不是把命令在從伺服器上執行一遍. 從mysql5.0開始支持混合類型的複製: 默認採用基於語句的複製,一旦發現基於語句的無法精確的複製時,就會採用基於行的複製。
  • MySQL的主從備份
    高峰時資料庫連接數經常超過上限如何解決單點問題增加額外的資料庫伺服器,組建資料庫集群同一集群中的資料庫伺服器需要具有相同的數據集群中的任一伺服器宕機後,其他伺服器可以取代宕機伺服器MySQL主從複製架構
  • 資料庫基礎:mysql主從集群搭建
    還好mysql資料庫提供了一種主從備份的機制,其實就是把主資料庫的所有的數據同時寫到備份的資料庫中。實現mysql資料庫的熱備份。 要想實現雙機的熱備,首先要了解主從資料庫伺服器的版本的需求。要實現熱備mysql的版本都高於3.2。還有一個基本的原則就是作為從資料庫的數據版本可以高於主伺服器資料庫的版本,但是不可以低於主伺服器的資料庫版本。
  • MySQL主從複製高級進階
    本文介紹MySQL主從複製高級進階。延時從庫介紹及配置SQL線程延時:數據已經寫入relaylog中了,SQL線程稍後執行。一般企業建議3-6小時,具體看公司運維人員對於故障的反應時間執行之前在需要先stop slave,否則會報錯,無法執行;stop slave;設置master_delay並重新開啟複製start slave後,,MySQL從庫會清空原有的relay log
  • Docker搭建MySQL主從複製(一主一從)
    進入容器後,切換到 /etc/mysql目錄下,使用vim命令編輯 my.cnf 文件。2、配置從庫和上面一樣進入到 etc/mysql路徑,使用vim命令編輯 my.cnf 文件:配置完成後也需要重啟Docker容器。
  • 「Mysql」資料庫主從搭建-基於docker
    :)通過Docker搭建主從伺服器首先我們需要拉取docker鏡像,我們使用5.7版本的MySQL:docker pull mysql:5.7然後使用此鏡像啟動容器,這裡需要分別啟動主從兩個容器創建Master(主資料庫):docker run -p 3339
  • 聊聊MySQL主從複製的幾種複製方式
    異步複製MySQL的複製默認是異步的,主從複製至少需要兩個MYSQL服務,這些MySQL服務可以分布在不同的伺服器上,也可以在同一臺伺服器上。MySQL主從異步複製是最常見的複製場景。注意:主庫宕機的情況下,DBA可以通過mysqlbinlog工具手工訪問主庫binlog,抽取缺失的日誌並同步到從庫上去;也可以通過配置高可用MHA架構來自動抽取缺失的數據補全從庫,或者啟用Global Transaction Identifiers(GTID)來自動抽取缺失binlog到從庫。
  • mysql主從配置詳細教程
    MySQL主從可以實現MySQL的讀寫分離,簡言之,master上進行寫操作,同步資料庫,slave上進行讀操作,可以極大的提升性能,降低伺服器負載,在此不做贅述,下面以兩臺機器來做主從配置詳解。配置文件,做如下操作:註:mysql安裝方式的不同會導致mysql的配置文件的位置不一樣,大家要根據自己的安裝位置來找配置文件vim /etc/mysql/mysql.conf.d/mysqld.cnf[mysqld]bind_address
  • MySQL系列二 - 搭建MySQL主從集群
    前面一章我們在centos上搭建好了MySQL資料庫,今天我們搭建一個主從同步的MySQL簡單集群。上一章是在虛擬機(192.168.64.123)上搭建的,我用的是vmware15虛擬機搭建的,今天在擴展一臺節點用於搭建主從集群,計劃 IP:192.168.64.123 虛擬機作為主節點,新建的虛擬機 IP:192.168.64.124 做為從節點。124的資料庫搭建什麼的參照上一章步驟執行就行。
  • 主庫n -> 從庫s - MySQL5.7多主一從(多源複製)同步配置 - 計算機...
    但本文重點是講解主從配置,因此簡略描述docker環境構建mysql容器實例。資料庫:MySQL 5.7.x (相比5.5,5.6而言,5.7同步性能更好,支持多源複製,可實現多主一從,主從庫版本應保證一致)作業系統:CentOS 7.x容器:Docker 17.09.0-ce鏡像:mysql:5.7主庫300:IP=192.168.10.212; PORT=4300; server-id=300; database=test3; table=user主庫400
  • 一直搞不清楚什麼是讀寫分離,主從複製的原理,今天總算搞懂了
    說說MySQL主從複製原理?如何解決 MySQL主從同步延時問題?1、MySQL的讀寫分離說到讀寫分離,我們先了解下什麼是主從複製。讀寫分離簡單倆說就是基於主從複製架構,一個主庫,有多個從庫,主庫主要負責寫,寫完後主庫會自動把數據給同步給從庫。
  • MySQL雙機互備熱備自動切換
    在mysql資料庫的備份應用中,主從複製結構是應用的比較廣泛,數據同步和實時性都很高,基本上能滿足大部分的需求。  本方案基於主從複製結構的基礎上,當主庫出現故障時,從庫能自動接管主庫的功能,向外提供服務,且將自身設置為主庫,將這個故障時間和影響縮短至最小,5秒內可切換完成。待原主庫修復後,會自動進入從庫的備份角色,如此循環。
  • MySQL 數據校驗工具-愛可生|mysql|perl|伺服器|node01_網易訂閱
    其原理是在主庫執行基於 statement 的 SQL 語句來生成主庫數據塊的checksum,把相同的 SQL 語句傳遞到從庫執行,並在從庫上計算相同數據塊的 checksum,最後,比較主從庫上相同數據塊的 checksum 值,由此判斷主從數據是否一致。它能在非常大的表上工作的一個原因是,它把每個表分成行塊,並檢查每個塊與單個替換。選擇查詢。它改變塊的大小,使校驗和查詢在所需的時間內運行。
  • Redis的主從複製機制
    Redis的主從複製是面試中經常會被問的,我最近面試的幾家公司只要聊到Redis,都會問我主從複製的原理。1.為什麼需要主從複製?主從複製實踐首先,我在本機開啟2個Redis實例(也可以搞2臺Redis伺服器),分別為127.0.0.1:6379、127.0.0.1:6380。
  • 面試不得不知的Mysql殺手鐧
    sql執行過程先上圖,來源文章mysql執行過程以及順序主要分2層:server層:連接器:用戶連接認證分析器:優化器執行器引擎層:具體執行操作由引擎執行。事務隔離機制串行化:它通過強制事務排序,使之不可能相互衝突,從而解決幻讀問題。簡言之,它是在每個讀的數據行上加上共享鎖。
  • redis的主從複製
    單機有什麼問題機器故障 數據如何同步的問題(高可用)容量瓶頸QPS瓶頸 (分布式)什麼是主從複製一主一從 一主多從runid 和 複製偏移量redis-cli -p 6379 info replication全量複製全量複製開銷
  • 面試官:Redis 主從複製時網絡開小差了怎麼整?
    今天主要講的是主從複製數據一致性相關以及面對網絡中斷如何進行數據同步的問題。不 BB 了,直接上鍾吧!- 思維導圖 -主從模式配置對於 Redis 主從大家可能並不陌生,但是配置的話日常工作中並不會經常操作。在這裡簡單介紹下主從的相關配置。