MySQL數(shù)據(jù)庫主從復(fù)制與讀寫分離
一.主從復(fù)制
???????主從復(fù)制:在實際的生產(chǎn)中,為了解決Mysql的單點故障以及提高MySQL的整體服務(wù)性能,一般都會采用主從復(fù)制。即:對數(shù)據(jù)庫中的數(shù)據(jù)、語句做備份。
主從復(fù)制三線程
???????Mysql的主從復(fù)制中主要有三個線程:master(binlog dump thread)、slave(I/O thread 、SQL thread),Master一條線程和Slave中的兩條線程。
主從復(fù)制過程
主從復(fù)制的過程:
master主要負責(zé)Master庫中有數(shù)據(jù)更新的時候,會按照binlog格式,將更新的事件類型寫入到主庫的binlog文件中。Master會創(chuàng)建log dump線程通知Slave主庫中存在數(shù)據(jù)更新。
I/O thread線程在Slave中創(chuàng)建,該線程用于請求Master,Master會返回binlog的名稱以及當前數(shù)據(jù)更新的位置、binlog文件位置的副本。然后,將binlog保存在 relay log(中繼日志) 中,中繼日志也是記錄數(shù)據(jù)更新的信息。
SQL線程也是在Slave中創(chuàng)建的,當Slave檢測到中繼日志有更新,會將更新的內(nèi)容同步到Slave數(shù)據(jù)庫中,保證了主從的數(shù)據(jù)的同步。
主從復(fù)制策略
主從復(fù)制的策略:
同步策略:Master會等待所有的Slave都回應(yīng)后才會提交,這個主從的同步 的性能會嚴重的影響。
半同步策略:Master至少會等待一個Slave回應(yīng)后提交。
異步策略:Master不用等待Slave回應(yīng)就可以提交。
延遲策略:Slave要落后于Master指定的時間。
對于不同的業(yè)務(wù)需求,有不同的策略方案,但是一般都會采用最終一致性,不會要求強一致性,強一致性會嚴重影響性能。
主從復(fù)制高延遲
???????主從復(fù)制高延遲的原因
master 服務(wù)器高并發(fā),形成大量事務(wù)
網(wǎng)絡(luò)延遲
主從硬件設(shè)備導(dǎo)致(cpu 主頻、內(nèi)存 io、硬盤 io)
本來就不是同步復(fù)制、而是異步復(fù)制
???????主從復(fù)制高延遲的解決辦法
從庫優(yōu)化 Mysql 參數(shù)。比如增大 innodb_buffer_pool_size,讓更多操作在 - mysql 內(nèi)存中完成,減少磁盤操作
從庫使用高性能主機(高性能 cpu、大內(nèi)存),避免使用虛擬云主機,使用物理主機,提升 I/O 吞吐量
從庫使用 SSD 磁盤
網(wǎng)絡(luò)優(yōu)化,避免跨機房實現(xiàn)同步
二.讀寫分離
讀寫分離概念
???????讀寫分離:讀寫分離是讓主數(shù)據(jù)庫處理事務(wù)性增、刪、改操作(INSERT、UPDATE、DELETE),而從數(shù)據(jù)庫處理查(SELECT) 操作。數(shù)據(jù)庫復(fù)制被用來把事務(wù)性操作導(dǎo)致的變更同步到集群中的從數(shù)據(jù)庫中。
讀寫分離原因與場景
???????讀寫分離原因:讀寫量很大,為了提升數(shù)據(jù)庫讀寫性能,將讀寫進行分離;多機房下如果寫少讀多,同時基于數(shù)據(jù)一致性考慮,只有一個主庫存入所有的數(shù)據(jù)寫入,本地再做從庫提供讀取,減少多機房間直接讀取帶來的時延。
???????讀寫分離使用場景:程序使用數(shù)據(jù)庫較多時,而更新少,查詢多的情況下會考慮使用。利用數(shù)據(jù)庫主從同步,再通過讀寫分離可以分擔(dān)數(shù)據(jù)庫壓力,提高性能。
總結(jié)
到此這篇關(guān)于MySQL數(shù)據(jù)庫主從復(fù)制與讀寫分離的文章就介紹到這了,更多相關(guān)MySQL主從復(fù)制與讀寫分離內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解mysql 使用left join添加where條件的問題分析
這篇文章主要介紹了詳解mysql 使用left join添加where條件的問題分析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02MYSQL row_number()與over()函數(shù)用法詳解
這篇文章主要介紹了MYSQL row_number()與over()函數(shù)用法詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下2021-08-08insert...on?duplicate?key?update語法詳解
本文主要介紹了insert...on?duplicate?key?update語法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01mysql數(shù)據(jù)表的基本操作之表結(jié)構(gòu)操作,字段操作實例分析
這篇文章主要介紹了mysql數(shù)據(jù)表的基本操作之表結(jié)構(gòu)操作,字段操作,結(jié)合實例形式分析了mysql表結(jié)構(gòu)操作,字段操作常見增刪改查實現(xiàn)技巧與操作注意事項,需要的朋友可以參考下2020-04-04sql查詢語句教程之插入、更新和刪除數(shù)據(jù)實例
如果要在程序運行過程中操作數(shù)據(jù)庫中的數(shù)據(jù),那得先學(xué)會使用SQL語句,下面這篇文章主要給大家介紹了關(guān)于sql查詢語句教程之插入、更新和刪除數(shù)據(jù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-06-06