MySQL主從復(fù)制的原理及使用分析
怎么理解主從復(fù)制呢?
主從復(fù)制,是指將一臺Redis服務(wù)器的數(shù)據(jù),復(fù)制到其他的Redis服務(wù)器。 前者稱為主節(jié)點 (master),后者稱為從節(jié)點 (slave); 數(shù)據(jù)的復(fù)制是單向的,只能由主節(jié)點到從節(jié)點。 默認情況下,每臺Redis服務(wù)器都是主節(jié)點,且一個主節(jié)點可以有多個從節(jié)點 (或沒有從節(jié)點),但一個從節(jié)點只能有一個主節(jié)點。
一臺主 MySQL 服務(wù)器帶兩臺從 MySQL 服務(wù)器做數(shù)據(jù)復(fù)制前端應(yīng)用在進行數(shù)據(jù)庫寫操作時,對主服務(wù)器進行操作,在進行數(shù)據(jù)庫讀操作時對兩臺從服務(wù)器進行操作,這樣大量減輕了對主服務(wù)器的壓力。
一. MySQL 主從復(fù)制原理
MySQL 的主從復(fù)制和 MySQL的讀寫分離兩者有著緊密聯(lián)系,首先要部署主從復(fù)制,只有主從復(fù)制完成了,才能在此基礎(chǔ)上進行數(shù)據(jù)的讀寫分離。
1. MySQL 支持的復(fù)制類型
①基于語句的復(fù)制。在主服務(wù)器上執(zhí)行的 SQL 語句,在從服務(wù)器上執(zhí)行同樣的語句,MySQL 默認采用基于語句的復(fù)制,效率比較高。
②基于行的復(fù)制。把改變的內(nèi)容復(fù)制過去,而不是把命令在從服務(wù)器上執(zhí)行一遍
③混合類型的復(fù)制。默認采用基于語句的復(fù)制,一旦發(fā)現(xiàn)基于語句無法精確復(fù)制時,就會采用基于行的復(fù)制。
2. 復(fù)制的工作過程
①在每個事務(wù)更新數(shù)據(jù)完成之前,Master 將這些改變記錄進二進制日志。寫入二進制日志完成后,Master 通知存儲引擎提交事務(wù)。
②Slave 將 Master 的 Binary log 復(fù)制到其中繼日志(Relay log)。首先,Slave 開始一個工作線程--I/0 線程,I/0 線程在 Master 上打開一個普通的連接,然后開始 Binlog dump process。Binlog dump process 從 Master 的二進制日志中讀取事件,如果已經(jīng)跟上 Master,它會睡眠并等待 Master 產(chǎn)生新的事件。I/0 線程將這些事件寫入中繼日志。
③ SQL slave thread(SQL 從線程)處理該過程的最后一步。SQL 線程從中繼日志讀取事件,并重放其中的事件而更新 Slave 數(shù)據(jù),使其與 Master 中的數(shù)據(jù)保持一致。只要該線程與 I/0 線程保持一致,中繼日志通常會位于0S 的緩存中,所以中繼日志的開銷很小。復(fù)制過程有一個很重要的限制,即復(fù)制在 S1ave 上是串行化的,也就是說 Master 上的并行更新操作不能在 Slave 上并行操作。
二. 案例實施
1. 搭建MySQL主從復(fù)制在所有節(jié)點進行時間同步
關(guān)閉防火墻
安裝數(shù)據(jù)庫參考前面的文章
這個用的是腳本安裝的mysql
直接用bash執(zhí)行腳本
設(shè)置配置文件
2. 配置master主服務(wù)器登錄MySQL程序
給從服務(wù)器授權(quán)
在show命令前用flush privileges;更新一下
其中 File 列顯示日志名,Position 列顯示偏移量,這兩個值在后面配置從服務(wù)器的時候需要。Slave 應(yīng)從該點上進行新的更新。
3. 配置Slave 從服務(wù)器在/etc/my.cnf 中修改或者增加下面內(nèi)容
這里要注意 server-id 不能相同。
重啟服務(wù)器
登錄到mysql,配置同步
4. 驗證主從復(fù)制效果在主從服務(wù)器登錄查看庫
兩臺數(shù)據(jù)庫執(zhí)行結(jié)果應(yīng)該相同
- 主:
- 從:
在主服務(wù)器創(chuàng)建數(shù)據(jù)庫 aaa 然后在主從服務(wù)器查看
- 主 :
- 從:
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL性能全面優(yōu)化方法參考,從CPU,文件系統(tǒng)選擇到mysql.cnf參數(shù)優(yōu)化
本文整理了一些MySQL的通用優(yōu)化方法,做個簡單的總結(jié)分享,大部分情況下都介紹了適用的場景,如果你的應(yīng)用場景和本文描述的不太一樣,那么建議根據(jù)實際情況進行調(diào)整2018-03-03mysql通過INSERT IGNORE INTO插入拼音字符無效問題及解決
這篇文章主要介紹了mysql通過INSERT IGNORE INTO插入拼音字符無效問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08