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