一.主從復制
主從復制:在實際的生產中,為了解決mysql的單點故障以及提高mysql的整體服務性能,一般都會采用主從復制。即:對數據庫中的數據、語句做備份。
主從復制三線程
mysql的主從復制中主要有三個線程:master(binlog dump thread)、slave(i/o thread 、sql thread),master一條線程和slave中的兩條線程。
主從復制過程
主從復制的過程:
master主要負責master庫中有數據更新的時候,會按照binlog格式,將更新的事件類型寫入到主庫的binlog文件中。master會創建log dump線程通知slave主庫中存在數據更新。
i/o thread線程在slave中創建,該線程用于請求master,master會返回binlog的名稱以及當前數據更新的位置、binlog文件位置的副本。然后,將binlog保存在 relay log(中繼日志) 中,中繼日志也是記錄數據更新的信息。
sql線程也是在slave中創建的,當slave檢測到中繼日志有更新,會將更新的內容同步到slave數據庫中,保證了主從的數據的同步。
主從復制策略
主從復制的策略:
同步策略:master會等待所有的slave都回應后才會提交,這個主從的同步 的性能會嚴重的影響。
半同步策略:master至少會等待一個slave回應后提交。
異步策略:master不用等待slave回應就可以提交。
延遲策略:slave要落后于master指定的時間。
對于不同的業務需求,有不同的策略方案,但是一般都會采用最終一致性,不會要求強一致性,強一致性會嚴重影響性能。
主從復制高延遲
主從復制高延遲的原因
master 服務器高并發,形成大量事務
網絡延遲
主從硬件設備導致(cpu 主頻、內存 io、硬盤 io)
本來就不是同步復制、而是異步復制
主從復制高延遲的解決辦法
從庫優化 mysql 參數。比如增大 innodb_buffer_pool_size,讓更多操作在 - mysql 內存中完成,減少磁盤操作
從庫使用高性能主機(高性能 cpu、大內存),避免使用虛擬云主機,使用物理主機,提升 i/o 吞吐量
從庫使用 ssd 磁盤
網絡優化,避免跨機房實現同步
二.讀寫分離
讀寫分離概念
讀寫分離:讀寫分離是讓主數據庫處理事務性增、刪、改操作(insert、update、delete),而從數據庫處理查(select) 操作。數據庫復制被用來把事務性操作導致的變更同步到集群中的從數據庫中。
讀寫分離原因與場景
讀寫分離原因:讀寫量很大,為了提升數據庫讀寫性能,將讀寫進行分離;多機房下如果寫少讀多,同時基于數據一致性考慮,只有一個主庫存入所有的數據寫入,本地再做從庫提供讀取,減少多機房間直接讀取帶來的時延。
讀寫分離使用場景:程序使用數據庫較多時,而更新少,查詢多的情況下會考慮使用。利用數據庫主從同步,再通過讀寫分離可以分擔數據庫壓力,提高性能。
總結
到此這篇關于mysql數據庫主從復制與讀寫分離的文章就介紹到這了,更多相關mysql主從復制與讀寫分離內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!
原文鏈接:https://blog.csdn.net/g564231/article/details/122113137