mysql資料庫複製延遲參考(mysql延時複製)

本文目錄一覽:

如何確認mysql replication真正的複製延遲是多少

在主伺服器上建立一個為從伺服器進行複製使用的用戶。該賬戶必須授予 REPLICATION SLAVE 許可權,由於僅僅是進行複製使用所以不需要再授予任何其它許可權。

mysql GRANT REPLICATION SLAVE ON *.* TO ‘replication’@’%’192.168.0.2’ IDENTIFIED BY ‘slavepasswd’;

mysql FLUSH PRIVILEGES;

3、編輯主伺服器的配置文件:/etc/my.cnf的[ mysqld ] 部分:

server-id = 本機資料庫 ID 標示,該部分還應有一個server-id=Master_id選項,其中master_id必須為1到232之間的一個正整數值

log-bin = 二進位日誌的位置和名稱

binlog-do-db = 需要備份的資料庫名,如果備份多個資料庫,重複設置這個選項即可

binlog-ignore-db = 不需要備份的資料庫苦命,如果備份多個資料庫,重複設置這個選項即可

如何檢查MySQL資料庫的主從延時?

MySQL資料庫主從延時如何去判斷呢?本文我們介紹了兩種判斷方法:1. Seconds_Behind_Master vs 2. mk-heartbeat,接下來我們就分別介紹這些內容。 日常工作中,對於MySQL主從複製檢查,一方面我們要保證複製的整體結構是否正常,另一方面需要檢查主從數據是否保持一致。對於前者我們可以通過監控複製線程是否工作正常以及主從延時是否在容忍範圍內,對於後者則可以通過分別校驗主從表中數據的md5碼是否一致,來保證數據一致,可以使用Maatkit工具包中的mk-table- checksum工具去檢查。 方法1: 通過監控show slave status\G命令輸出的Seconds_Behind_Master參數的值來判斷,是否有發生主從延時。其值有這麼幾種: NULL — 表示io_thread或是sql_thread有任何一個發生故障,也就是該線程的Running狀態是No,而非Yes。 0 — 該值為零,是我們極為渴望看到的情況,表示主從複製良好,可以認為lag不存在。 正值— 表示主從已經出現延時,數字越大表示從庫落後主庫越多。 負值— 幾乎很少見,我只是聽一些資深的DBA說見過,其實,這是一個BUG值,該參數是不支持負值的,也就是不應該出現。 show slave status\G,該命令的輸出結果非常豐厚,給我們的監控提供了很多有意義的參數,比如:Slave_IO_Running該參數可作為 io_thread的監控項,Yes表示io_thread的和主庫連接正常並能實施複製工作,No則說明與主庫通訊異常,多數情況是由主從間網路引起的問題;Slave_SQL_Running該參數代表sql_thread是否正常,具體就是語句是否執行通過,常會遇到主鍵重複或是某個表不存在。下面就說到今天的重點Seconds_Behind_Master,該值作為判斷主從延時的指標,那麼它又是怎麼得到這個值的呢,同時,它為什麼又受到很多人的質疑? Seconds_Behind_Master是通過比較sql_thread執行的event的timestamp和 io_thread複製好的event的timestamp(簡寫為ts)進行比較,而得到的這麼一個差值。我們都知道的relay-log和主庫的 bin-log裡面的內容完全一樣,在記錄sql語句的同時會被記錄上當時的ts,所以比較參考的值來自於binlog,其實主從沒有必要與NTP進行同步,也就是說無需保證主從時鐘的一致。 你也會發現,其實比較真正是發生在io_thread與sql_thread之間,而io_thread才真正與主庫有關聯,於是,問題就出來了,當主庫I/O負載很大或是網路阻塞,io_thread不能及時複製binlog(沒有中斷,也在複製),而 sql_thread一直都能跟上io_thread的腳本,這時Seconds_Behind_Master的值是0,也就是我們認為的無延時,但是,實際上不是,你懂得。這也就是為什麼大家要批判用這個參數來監控資料庫是否發生延時不準的原因,但是這個值並不是總是不準,如果當io_thread與 master網路很好的情況下,那麼該值也是很有價值的。 之前,提到Seconds_Behind_Master這個參數會有負值出現,我們已經知道該值是io_thread的最近跟新的ts與sql_thread執行到的ts差值,前者始終是大於後者的,唯一的肯能就是某個event的ts發生了錯誤,比之前的小了,那麼當這種情況發生時,負值出現就成為可能。 方法2: mk-heartbeat,Maatkit萬能工具包中的一個工具,被認為可以準確判斷複製延時的方法。 mk-heartbeat的實現也是藉助timestmp的比較實現的,它首先需要保證主從伺服器必須要保持一致,通過與相同的一個NTP server同步時鐘。它需要在主庫上創建一個heartbeat的表,裡面至少有id與ts兩個欄位,id為server_id,ts就是當前的時間戳 now(),該結構也會被複制到從庫上。 表建好以後,會在主庫上以後台進程的模式去執行一行更新操作的命令,定期去向表中的插入數據,這個周期默認為1 秒,同時從庫也會在後台執行一個監控命令,與主庫保持一致的周期去比較,複製過來記錄的ts值與主庫上的同一條ts值,差值為0表示無延時,差值越大表示延時的秒數越多。 我們都知道複製是非同步的ts不肯完全一致,所以該工具允許半秒的差距,在這之內的差異都可忽略認為無延時。這個工具就是通過實打實的複製,巧妙的借用timestamp來檢查延時,非常好用! 關於檢查MySQL資料庫的主從延時的兩種方法就介紹到這裡了,希望本次的介紹能夠對您有所收穫!

怎樣解決MySQL資料庫主從複製延遲的問題

可以通過監控show slave status\G命令輸出的Seconds_Behind_Master參數的值來判斷,是否有發生主從延時。

其值有這麼幾種:

NULL – 表示io_thread或是sql_thread有任何一個發生故障,也就是該線程的Running狀態是No,而非Yes.

0 – 該值為零,是我們極為渴望看到的情況,表示主從複製良好,可以認為lag不存在。

正值 – 表示主從已經出現延時,數字越大表示從庫落後主庫越多。

負值 – 幾乎很少見,只是聽一些資深的DBA說見過,其實,這是一個BUG值,該參數是不支持負值的,也就是不應該出現。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/241256.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:26
下一篇 2024-12-12 12:26

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • 資料庫第三範式會有刪除插入異常

    如果沒有正確設計資料庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係資料庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • MySQL遞歸函數的用法

    本文將從多個方面對MySQL遞歸函數的用法做詳細的闡述,包括函數的定義、使用方法、示例及注意事項。 一、遞歸函數的定義 遞歸函數是指在函數內部調用自身的函數。MySQL提供了CRE…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的資料庫存儲引擎

    本文將介紹兩款高性能的資料庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • Python怎麼導入資料庫

    Python是一種高級編程語言。它具有簡單、易讀的語法和廣泛的庫,讓它成為一個靈活和強大的工具。Python的資料庫連接類型可以多種多樣,其中包括MySQL、Oracle、Post…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • MySQL左連接索引不生效問題解決

    在MySQL資料庫中,經常會使用左連接查詢操作,但是左連接查詢中索引不生效的情況也比較常見。本文將從多個方面探討MySQL左連接索引不生效問題,並給出相應的解決方法。 一、索引的作…

    編程 2025-04-28

發表回復

登錄後才能評論