共計 2488 個字符,預計需要花費 7 分鐘才能閱讀完成。
這篇文章主要介紹了 mysql 主從復制怎么理解的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇 mysql 主從復制怎么理解文章都會有所收獲,下面我們一起來看看吧。
在 mysql 中,主從復制是指數據可以從一個 MySQL 數據庫服務器主節點復制到一個或多個從節點,默認采用異步復制方式。采用主從復制的好處:1、讓主庫負責寫,從庫負責讀,當主庫出現了鎖表的情景,通過讀從庫也可以保證業務的正常運作;2、可以做數據的熱備;3、進行架構的擴展,可降低磁盤 I / O 訪問的頻率,提高單個機器的 I / O 性能。
本教程操作環境:windows7 系統、mysql8 版本、Dell G3 電腦。
什么是 mysql 的主從復制?
MySQL 主從復制是指數據可以從一個 MySQL 數據庫服務器主節點復制到一個或多個從節點。MySQL 默認采用異步復制方式,這樣從節點不用一直訪問主服務器來更新自己的數據,數據的更新可以在遠程連接上進行,從節點可以復制主數據庫中的所有數據庫或者特定的數據庫,或者特定的表。
為什么需要主從復制?
1、在業務復雜的系統中,有這么一個情景,有一句 sql 語句需要鎖表,導致暫時不能使用讀的服務,那么就很影響運行中的業務,使用主從復制,讓主庫負責寫,從庫負責讀,這樣,即使主庫出現了鎖表的情景,通過讀從庫也可以保證業務的正常運作。
2、做數據的熱備
3、架構的擴展。業務量越來越大,I/ O 訪問頻率過高,單機無法滿足,此時做多庫的存儲,降低磁盤 I / O 訪問的頻率,提高單個機器的 I / O 性能。
mysql 復制原理
原理:
(1)master 服務器將數據的改變記錄二進制 binlog 日志,當 master 上的數據發生改變時,則將其改變寫入二進制日志中;
(2)slave 服務器會在一定時間間隔內對 master 二進制日志進行探測其是否發生改變,如果發生改變,則開始一個 I /OThread 請求 master 二進制事件
(3)同時主節點為每個 I / O 線程啟動一個 dump 線程,用于向其發送二進制事件,并保存至從節點本地的中繼日志中,從節點將啟動 SQL 線程從中繼日志中讀取二進制日志,在本地重放,使得其數據和主節點的保持一致,最后 I /OThread 和 SQLThread 將進入睡眠狀態,等待下一次被喚醒。
也就是說:
從庫會生成兩個線程, 一個 I / O 線程, 一個 SQL 線程;
I/ O 線程會去請求主庫的 binlog, 并將得到的 binlog 寫到本地的 relay-log(中繼日志) 文件中;
主庫會生成一個 log dump 線程, 用來給從庫 I / O 線程傳 binlog;
SQL 線程, 會讀取 relay log 文件中的日志, 并解析成 sql 語句逐一執行;
注意:
–master 將操作語句記錄到 binlog 日志中,然后授予 slave 遠程連接的權限(master 一定要開啟 binlog 二進制日志功能;通常為了數據安全考慮,slave 也開啟 binlog 功能)。
–slave 開啟兩個線程:IO 線程和 SQL 線程。其中:IO 線程負責讀取 master 的 binlog 內容到中繼日志 relay log 里;SQL 線程負責從 relay log 日志里讀出 binlog 內容,并更新到 slave 的數據庫里,這樣就能保證 slave 數據和 master 數據保持一致了。
–Mysql 復制至少需要兩個 Mysql 的服務,當然 Mysql 服務可以分布在不同的服務器上,也可以在一臺服務器上啟動多個服務。
–Mysql 復制最好確保 master 和 slave 服務器上的 Mysql 版本相同(如果不能滿足版本一致,那么要保證 master 主節點的版本低于 slave 從節點的版本)
–master 和 slave 兩節點間時間需同步
具體步驟:
1、從庫通過手工執行 change master to 語句連接主庫,提供了連接的用戶一切條件(user、password、port、ip),并且讓從庫知道,二進制日志的起點位置(file 名 position 號);start slave
2、從庫的 IO 線程和主庫的 dump 線程建立連接。
3、從庫根據 change master to 語句提供的 file 名和 position 號,IO 線程向主庫發起 binlog 的請求。
4、主庫 dump 線程根據從庫的請求,將本地 binlog 以 events 的方式發給從庫 IO 線程。
5、從庫 IO 線程接收 binlog events,并存放到本地 relay-log 中,傳送過來的信息,會記錄到 master.info 中
6、從庫 SQL 線程應用 relay-log,并且把應用過的記錄到 relay-log.info 中,默認情況下,已經應用過的 relay 會自動被清理 purge
mysql 主從形式
(一)一主一從
(二)主主復制
(三)一主多從
(四)多主一從
(五)聯級復制
mysql 主從同步延時分析
mysql 的主從復制都是單線程的操作,主庫對所有 DDL 和 DML 產生的日志寫進 binlog,由于 binlog 是順序寫,所以效率很高,slave 的 sql thread 線程將主庫的 DDL 和 DML 操作事件在 slave 中重放。DML 和 DDL 的 IO 操作是隨機的,不是順序,所以成本要高很多,另一方面,由于 sql thread 也是單線程的,當主庫的并發較高時,產生的 DML 數量超過 slave 的 SQL thread 所能處理的速度,或者當 slave 中有大型 query 語句產生了鎖等待,那么延時就產生了。
解決方案:
1. 業務的持久化層的實現采用分庫架構,mysql 服務可平行擴展,分散壓力。
2. 單個庫讀寫分離,一主多從,主寫從讀,分散壓力。這樣從庫壓力比主庫高,保護主庫。
3. 服務的基礎架構在業務和 mysql 之間加入 memcache 或者 redis 的 cache 層。降低 mysql 的讀壓力。
4. 不同業務的 mysql 物理上放在不同機器,分散壓力。
5. 使用比主庫更好的硬件設備作為 slave,mysql 壓力小,延遲自然會變小。
6. 使用更加強勁的硬件設備
關于“mysql 主從復制怎么理解”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“mysql 主從復制怎么理解”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道。