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