資源描述:
《理解mysql——復(fù)制(replication)》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、理解MySQL——復(fù)制(Replication)1、復(fù)制概述1.1、復(fù)制解決的問題數(shù)據(jù)復(fù)制技術(shù)有以下一些特點:(1)???數(shù)據(jù)分布(2)???負載平衡(loadbalancing)(3)???備份(4)???高可用性(highavailability)和容錯1.2、復(fù)制如何工作從高層來看,復(fù)制分成三步:(1)???master將改變記錄到二進制日志(binarylog)中(這些記錄叫做二進制日志事件,binarylogevents);(2)???slave將master的binarylogevents拷貝到它的中
2、繼日志(relaylog);(3)???slave重做中繼日志中的事件,將改變反映它自己的數(shù)據(jù)。下圖描述了這一過程:?該過程的第一部分就是master記錄二進制日志。在每個事務(wù)更新數(shù)據(jù)完成之前,master在二日志記錄這些改變。MySQL將事務(wù)串行的寫入二進制日志,即使事務(wù)中的語句都是交叉執(zhí)行的。在事件寫入二進制日志完成后,master通知存儲引擎提交事務(wù)。下一步就是slave將master的binarylog拷貝到它自己的中繼日志。首先,slave開始一個工作線程——I/O線程。I/O線程在master上打開一
3、個普通的連接,然后開始binlogdumpprocess。Binlogdumpprocess從master的二進制日志中讀取事件,如果已經(jīng)跟上master,它會睡眠并等待master產(chǎn)生新的事件。I/O線程將這些事件寫入中繼日志。SQLslavethread處理該過程的最后一步。SQL線程從中繼日志讀取事件,更新slave的數(shù)據(jù),使其與master中的數(shù)據(jù)一致。只要該線程與I/O線程保持一致,中繼日志通常會位于OS的緩存中,所以中繼日志的開銷很小。此外,在master中也有一個工作線程:和其它MySQL的連接一樣
4、,slave在master中打開一個連接也會使得master開始一個線程。復(fù)制過程有一個很重要的限制——復(fù)制在slave上是串行化的,也就是說master上的并行更新操作不能在slave上并行操作。?2、體驗MySQL復(fù)制MySQL開始復(fù)制是很簡單的過程,不過,根據(jù)特定的應(yīng)用場景,都會在基本的步驟上有一些變化。最簡單的場景就是一個新安裝的master和slave,從高層來看,整個過程如下:(1)在每個服務(wù)器上創(chuàng)建一個復(fù)制帳號;(2)配置master和slave;(3)Slave連接master開始復(fù)制。2.1、創(chuàng)
5、建復(fù)制帳號每個slave使用標準的MySQL用戶名和密碼連接master。進行復(fù)制操作的用戶會授予REPLICATIONSLAVE權(quán)限。用戶名的密碼都會存儲在文本文件master.info中。假如,你想創(chuàng)建repl用戶,如下:mysql>GRANTREPLICATIONSLAVE,REPLICATIONCLIENTON*.*->TOrepl@'192.168.0.%'IDENTIFIEDBY'p4ssword';2.2、配置master接下來對master進行配置,包括打開二進制日志,指定唯一的servrID。例
6、如,在配置文件加入如下值:[mysqld]log-bin=mysql-binserver-id=10重啟master,運行SHOWMASTERSTATUS,輸出如下:??2.3、配置slaveSlave的配置與master類似,你同樣需要重啟slave的MySQL。如下:log_bin??????????=mysql-binserver_id????????=2relay_log????????=mysql-relay-binlog_slave_updates=1read_only????????=1server
7、_id是必須的,而且唯一。slave沒有必要開啟二進制日志,但是在一些情況下,必須設(shè)置,例如,如果slave為其它slave的master,必須設(shè)置bin_log。在這里,我們開啟了二進制日志,而且顯示的命名(默認名稱為hostname,但是,如果hostname改變則會出現(xiàn)問題)。relay_log配置中繼日志,log_slave_updates表示slave將復(fù)制事件寫進自己的二進制日志(后面會看到它的用處)。有些人開啟了slave的二進制日志,卻沒有設(shè)置log_slave_updates,然后查看slave
8、的數(shù)據(jù)是否改變,這是一種錯誤的配置。所以,盡量使用read_only,它防止改變數(shù)據(jù)(除了特殊的線程)。但是,read_only并是很實用,特別是那些需要在slave上創(chuàng)建表的應(yīng)用。?2.4、啟動slave接下來就是讓slave連接master,并開始重做master二進制日志中的事件。你不應(yīng)該用配置文件進行該操作,而應(yīng)該使用CHANGEMASTERTO語句,該語句可以完