mysql 多项式_mysql主从复制原理及实现
一.主從復(fù)制原理
利用MySQL提供的Replication,其實(shí)就是Slave從Master獲取Binary log文件,然后再本地鏡像的執(zhí)行日志中記錄的操作。由于主從復(fù)制的過(guò)程是異步的,因此Slave和Master之間的數(shù)據(jù)有可能存在延遲的現(xiàn)象,此時(shí)只能保證數(shù)據(jù)最終的一致性。
在master與slave之間實(shí)現(xiàn)整個(gè)復(fù)制過(guò)程主要由三個(gè)線(xiàn)程來(lái)完成:
1.Slave SQL thread線(xiàn)程,在slave端
2.Slave I/O thread線(xiàn)程,在slave端
3.Binlog dump thread線(xiàn)程(也可稱(chēng)為IO線(xiàn)程),在master端
注意:如果一臺(tái)主服務(wù)器配兩臺(tái)從服務(wù)器那主服務(wù)器上就會(huì)有兩個(gè)Binlog dump 線(xiàn)程,而每個(gè)從服務(wù)器上各自有兩個(gè)線(xiàn)程。
網(wǎng)絡(luò)上找的一張很清晰的交互圖,流程可以詳細(xì)描述為:
1、slave端的IO線(xiàn)程連接上master端,并請(qǐng)求從指定binlog日志文件的指定pos節(jié)點(diǎn)位置(或者從最開(kāi)始的日志)開(kāi)始復(fù)制之后的日志內(nèi)容。
2、master端在接收到來(lái)自slave端的IO線(xiàn)程請(qǐng)求后,通知負(fù)責(zé)復(fù)制進(jìn)程的IO線(xiàn)程,根據(jù)slave端IO線(xiàn)程的請(qǐng)求信息,讀取指定binlog日志指定pos節(jié)點(diǎn)位置之后的日志信息,然后返回給slave端的IO線(xiàn)程。該返回信息中除了binlog日志所包含的信息之外,還包括本次返回的信息在master端的binlog文件名以及在該binlog日志中的pos節(jié)點(diǎn)位置。
3、slave端的IO線(xiàn)程在接收到master端IO返回的信息后,將接收到的binlog日志內(nèi)容依次寫(xiě)入到slave端的relaylog文件(mysql-relay-bin.xxxxxx)的最末端,并將讀取到的master端的binlog文件名和pos節(jié)點(diǎn)位置記錄到master-info(該文件存slave端)文件中,以便在下一次讀取的時(shí)候能夠清楚的告訴master“我需要從哪個(gè)binlog文件的哪個(gè)pos節(jié)點(diǎn)位置開(kāi)始,請(qǐng)把此節(jié)點(diǎn)以后的日志內(nèi)容發(fā)給我”。
4、slave端的SQL線(xiàn)程在檢測(cè)到relaylog文件中新增內(nèi)容后,會(huì)馬上解析該log文件中的內(nèi)容。然后還原成在master端真實(shí)執(zhí)行的那些SQL語(yǔ)句,并在自身按順豐依次執(zhí)行這些SQL語(yǔ)句。這樣,實(shí)際上就是在master端和slave端執(zhí)行了同樣的SQL語(yǔ)句,所以master端和slave端的數(shù)據(jù)完全一樣的。
二.如何實(shí)現(xiàn)?
這里在本地虛擬機(jī)模擬演示:
準(zhǔn)備工作:兩個(gè)虛擬機(jī):我這里用的是CentOS5.5,IP地址分別是192.168.1.101 和192.168.1.105;
步驟:1.修改mysql的配置文件,打開(kāi)二進(jìn)制日志功能。? 命令:# vi /etc/my.cnf 增加以下三行配置
log-bin=mysql-bin //將mysql二進(jìn)制日志取名為mysql-bin
binlog_format=mixed //二進(jìn)制日志的格式,有三種:statement/row/mixed,具體分別不多做解釋,這里使用mixed
server-id=101 //為服務(wù)器設(shè)置一個(gè)獨(dú)一無(wú)二的id便于區(qū)分,這里使用ip地址的最后一位充當(dāng)server-id
然后修改從服務(wù)器的my.cnf文件,也添加以上內(nèi)容,不過(guò)server-id的值為從服務(wù)器的標(biāo)識(shí)。然后分別重啟主、從mysql。
2.在主服務(wù)器為從服務(wù)器分配用戶(hù)。命令:GRANT replication slave ON *.* TO 'slave'@'%' IDENTIFIED BY '111111';
3.查看主服務(wù)器BIN日志的信息(執(zhí)行完之后記錄下這兩值,然后在配置完從服務(wù)器之前不要對(duì)主服務(wù)器進(jìn)行任何操作,因?yàn)槊看尾僮鲾?shù)據(jù)庫(kù)時(shí)這兩值會(huì)發(fā)生改變)。命令:show master status;
4.進(jìn)入從服務(wù)器,執(zhí)行以下命令設(shè)置master。
MASTER_HOST : 設(shè)置要連接的主服務(wù)器的ip地址
MASTER_USER : 設(shè)置要連接的主服務(wù)器的用戶(hù)名
MASTER_PASSWORD : 設(shè)置要連接的主服務(wù)器的密碼
MASTER_LOG_FILE : 設(shè)置要連接的主服務(wù)器的bin日志的日志名稱(chēng),即第3步得到的信息
MASTER_LOG_POS : 設(shè)置要連接的主服務(wù)器的bin日志的記錄位置,即第3步得到的信息,(這里注意,最后一項(xiàng)不需要加引號(hào)。否則配置失敗)
然后執(zhí)行start slave;命令啟動(dòng)從服務(wù)器。
5.查看是否配置成功。命令:show slave status;
上面兩項(xiàng)為Yes說(shuō)明配置成功。可以在主庫(kù)更新數(shù)據(jù)測(cè)試從庫(kù)是否會(huì)同步。
總結(jié)
以上是生活随笔為你收集整理的mysql 多项式_mysql主从复制原理及实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: matlab multithreadin
- 下一篇: mysql命令行cmd_CMD命令行操作