這里搭建的主從是最簡單的單一主從復(fù)制(即一個Master和一個slave,沒有任何的熱機備份和多slave),該主從結(jié)構(gòu)的基本拓?fù)鋱D如下所示: 建立基本的主從復(fù)制可以總結(jié)為以下三個基本步驟:
在配置完成之后,我們會做一個簡單的測試,測試復(fù)制是否正常。 本文所涉及的master和slave服務(wù)器均位于同一臺單機上,使用不同的端口號區(qū)分,基本的環(huán)境為:Window 7 旗艦版 32位,MySQL的版本為5.6.21 。上一篇筆記(Windows環(huán)境下壓縮版MySQL安裝)中,已經(jīng)介紹了壓縮版mysql配置的基本過程,這里需要復(fù)制一份,并解壓縮到另外一個目錄(例如D:/Mysql_slave目錄中)。為了區(qū)分master和slave,我們分別使用不同的端口號:master使用3306,slave使用3307端口號。 一、配置Master將服務(wù)器配置為Master,需要確保服務(wù)器有一個活動的二進制日志(binary log)和唯一的服務(wù)器ID(server-id,用于區(qū)分服務(wù)器).二進制日志中包含了Master的所有改變,并且可以在Slave上執(zhí)行。 配置master的my.ini文件: 打開master目錄下的my.ini文件,在文件中添加如下內(nèi)容: server-id = 1 binlog-do-db = test log-bin=master-bin log-bin-index=master-bin.index 其中: (1) server-id=1用于配置服務(wù)器ID,是mysql主從集群中的一個唯一區(qū)分號。所有的服務(wù)器都應(yīng)該有自己的唯一ID,如果一個Slave連接到Master,但是和Master有相同的ID,則會產(chǎn)生Master和Slave ID相同的錯誤 (2) binlog-do-db :指定主從復(fù)制的數(shù)據(jù)庫。 (3) log-bin字段給出了二進制日志所產(chǎn)生的所有文件的基本名,二進制文件可以包含多個文件,如下圖所示: (4) log-bin-index.這其實是指定了一個索引文件(純文本,內(nèi)容為文件列表),該索引文件中包含所有二進制文件的列表。如果沒有為log-bin-index設(shè)置默認(rèn)值,則會使用機器的hostname產(chǎn)生log-bin-index文件,這樣,在服務(wù)器的hostname改變后,可能會出現(xiàn)無法找到索引文件,從而認(rèn)為二進制文件列表為空,導(dǎo)致無法正確的生成二進制bin-log。所以,推薦應(yīng)該使用機器無關(guān)的名字作為bin-log-index的文件名. 配置完ini文件之后,需要從命令行啟動mysqld服務(wù),進入master的bin目錄(D:.Mysql/bin)并執(zhí)行下述命令(如果之前配置過mysql,執(zhí)行之前請關(guān)閉已經(jīng)啟動的mysql服務(wù) net stop mysql): mysqld –-console 如果啟動成功,cmd窗口會出現(xiàn)如下類似的內(nèi)容(紅色部分是關(guān)鍵): 這時master服務(wù)器已經(jīng)啟動了.將該cmd窗口最小化不用管它。新開一個cmd窗口,連接到master(mysql –u root -pxxx),通過show master status可以查看master的狀態(tài)。 Slave連接Master時,會啟動一個標(biāo)準(zhǔn)的客戶端去連接Master,并請求Master將所有的改動轉(zhuǎn)儲給它。因此,在連接時,需要Master上有一個具有復(fù)制權(quán)限的用戶。在master的控制臺執(zhí)行如下命令: Create user reply_user; Grant REPLICATION SLAVE On *.* to reply_user IDENTIFIED BY ‘xxxxxxxxx’; Flush privileges; Replication slave權(quán)限并沒有什么特別之處,只是這個用戶能夠從Master上二進制文件的轉(zhuǎn)儲數(shù)據(jù)。完全可以給一個常規(guī)的用戶賦予該權(quán)限,但最好還是將復(fù)制Slave的用戶和其他用戶區(qū)分開來,這樣的話,如果想要禁止某些slave的鏈接,只要刪除該用戶就可以了 二、配置Slave配置Slave的過程和配置Master的過程基本相同,不同的是,需要配置一個不同的端口號,需要一個不同的server-id號。并且需要為Slave配置relay-log(中繼日志)和relay-log-index(中繼日志的索引文件)。打開Slave目錄下的my.ini(D:/mysql_slave目錄),添加如下內(nèi)容: #mysql slave port port = 3307 #slave server id server_id = 2 #replication database replicate-do-db=test #relay log file relay-log=slave-relay-bin #relay log index file relay-log-index=slave-relay-bin.index 修改完Slave后。同樣需要通過命令啟動slave的mysqld: d: cd mysql_slave/bin mysqld –-console 現(xiàn)在雖然配置好了Master和Slave。但是Master和Slave之間沒有任何的聯(lián)系,這時如果在Slave的控制臺執(zhí)行:show slave status;會出現(xiàn)提示:it is not a slave 三、Slave連接到Master將Slave連接到Master,需要知道Master的四個基本的信息: (1) 主機名或者IP地址,由于這里都是單機,主機的IP為127.0.0.1 (2) Master使用的端口號,3306 (3) Master上具有REPLICATION SLAVE權(quán)限的用戶 (4) 該賬號的密碼。 在配置Master的時候已經(jīng)創(chuàng)建了一個具有相關(guān)權(quán)限的用戶,在Slave的控制臺運行以下命令: Change Master to Master_host=’127.0.0.1’, Master_port=3306, Master_user=”reply_user”, Master_Password=”xxxx”; 執(zhí)行完之后,可以通過start Slave命令啟動Slave。 這時如果執(zhí)行show slave status;會輸出以下類似內(nèi)容(注意標(biāo)紅部分): 現(xiàn)在,一個基本的mysql主從已經(jīng)搭建起來了。我們接著做一些簡單的測試,看看復(fù)制是否正常。測試步驟如下: 1. 在Master上創(chuàng)建表: CREATE TABLE `web_user2` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(30) NOT NULL DEFAULT '', `creatime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; 2. 插入數(shù)據(jù) Insert into web_user2 (`name`) values ('first'),('test'),('showb'),('blood'); Select * from `web_user2`; 3. 進入Slave查看是否同步正常 Show tables; Select * from web_user; 4. 在master的控制臺上查看復(fù)制的事件-Binlog events Flush logs;
Show binlog events; 日志比較長,這里只截取了前兩條: 從binlog的內(nèi)容來看,復(fù)制已經(jīng)配置成功了。 下一步,將會繼續(xù)探索二進制日志的相關(guān)東西。 參考文獻:
|
|