mysql主从同步原理_mysql主从同步以及原理
mysql主從復制介紹
當前的生產工作中,大多數應用的mysql主從同步都是異步的復制方式,即不是嚴格實時的數據同步。
實時和異步:
同步復制: 指的是客戶端連接到MySQL主服務器寫入一段數據,MySQL主服務器同步給MySQL從服務器需要等待從服務器發出同步完成的響應才返回客戶端OK, 這其中等待同步的過程是阻塞的, 如果有N臺從服務器, 效率極低
異步復制: 指的是客戶端連接到MySQL主服務器寫入一段數據,MySQL主服務器將寫入的數據發送給MySQL從服務器, 然后直接返回客戶端OK, 可能從服務器的數據會和主服務不一致
半同步復制:指的是客戶端連接到MySQL主服務器寫入一段數據,MySQL主服務器只將數據同步復制給其中一臺從服務器, 半同步復制給其他的從服務器, 來達到其中一臺從服務器完全同步的效果
主從復制原理:
從庫需要兩個線程完成,一個叫做I/O線程,一個叫做sql線程
主庫需要一個線程叫做I/O線程
主庫必須要開啟binlog日志才能完成主從同步,當用戶請求到主的庫里面,會將增刪改的東西記錄到binlog日志里面,主從復制是從庫去找主庫的,建立時,我們在從庫上使用change master指定master的ip,端口,二進制文件名稱,pos,master的密碼等信息。并在從庫上開啟start ?slave就會開啟同步。
開啟同步后,先是從向主發起請求。然后主庫進行驗證從庫是否正常,驗證之后,主庫就會給從庫按照信息發送日志,從庫上存放日志的地方叫做中繼日志(relay log),其實從庫里面還有一個master info信息,這個里面記錄的是change master的信息,每一次取日志回來都會對從庫的master ?info信息進行更新,接下來從庫根據master ?info的binlog信息去主庫在取跟新的binlog信息,
放到中繼日志里面,我們如何進行更新?
當主將binlog發送過來放到中繼日志里面的時候,sql線程就會語句經過轉換寫到從庫里面。
注意
1.開啟binlog日志
2.change master(在從庫上)
3.在從庫開啟start slave之前。這兩個庫的數據必須是一樣的,所以講主庫的數據進行備份使用master-data=1,會記錄位置的。然后從庫會指定從主庫備份里面找備份點。
4.要在開關之前建立專門用于主從同步的賬號
5.從庫打開開關的過程,其實就是打來從庫兩個線程的過程
6.start slave
主庫返回的除了binlog日志內容外,還有本次返回日志內容后在Master服務器端的新的binlog文件名稱以及在binlog中的下一個指定更新的位置。這個位置會保存在從庫的master info里面。
>flush tables ?with read ?lock;在主庫上執行加上讀鎖
然后另開一個窗口,連接到主mysql
>show master ?status; ?查看主庫的binlog以及pos值。
下來是備份主庫數據,將備份數據在從庫上執行。目的就是讓從庫和主庫的數據一樣。
從庫將主庫的備份數據導入完了以后要將鎖打來:
>unlocks ?tables;
然后在從庫上執行change ?master語句。這些信息會記錄在從庫的master.info的信息中;(如果你備份的時候指定master-data=1)
最后一步開啟start ?slave;
查看是否成功使用show slave ?status; 查看兩個進程是否為yes。
從庫里面的relay-log.info:記錄sql線程從中繼里面讀取到的日志。
描述mysql主從復制原理
自己總結:從庫的io線程會實時依據master.info信息的去主庫的binlog日志里面讀取更新的內容,將更新的內容取回到自己的中繼日志中,同時會更新master.info信息,此時sql線程實時會從中繼日志中讀取并執行里面的sql語句。
描述mysql主從同步部署
自己總結:
1.將主庫的數據備份,備份的時候時候master-data=1指定。然后在從庫上將備份數據導入
2.在主庫上給開啟主庫的bin-log功能,以及service-id
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave_account'@'10.121.0.220' identified by '123456'
這句的意思是,允許從服務器'10.121.0.220 '使用'slave-account'及'123456'這個帳號密碼對對主服務器的所有數據庫(*.*)進行主從復制('REPLICATION SLAVE').
3.在主庫上執行flush ?tables ?with ?relay ?locks; 讀寫鎖。然后領開啟一個窗口
4.然后只從庫上執行change master ? 里面指定剛才創建的用戶以及密碼
5.執行start ?slave;
6.show slave ?status;看看兩個線程是否啟動
7.在主庫上解鎖。
總結
以上是生活随笔為你收集整理的mysql主从同步原理_mysql主从同步以及原理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 照片边框 app android,Scr
- 下一篇: linux cmake编译源码,linu