這裡搭建的主從是最簡單的單一主從複制(即一個Master和一個slave,沒有任何的熱機備份和多slave),該主從結構的基本拓撲圖如下所示:
建立基本的主從複制可以總結為以下三個基本步驟:- 配置master伺服器
- 配置slave伺服器
- 将slave連接配接到master
在配置完成之後,我們會做一個簡單的測試,測試複制是否正常。
本文所涉及的master和slave伺服器均位于同一台單機上,使用不同的端口号區分,基本的環境為:Window 7 旗艦版 32位,MySQL的版本為5.6.21 。上一篇筆記(Windows環境下壓縮版MySQL安裝)中,已經介紹了壓縮版mysql配置的基本過程,這裡需要複制一份,并解壓縮到另外一個目錄(例如D:/Mysql_slave目錄中)。為了區分master和slave,我們分别使用不同的端口号:master使用3306,slave使用3307端口号。
一、配置Master
将伺服器配置為Master,需要確定伺服器有一個活動的二進制日志(binary log)和唯一的伺服器ID(server-id,用于區分伺服器).二進制日志中包含了Master的所有改變,并且可以在Slave上執行。
配置master的my.ini檔案:
打開master目錄下的my.ini檔案,在檔案中添加如下内容:
server-id = 1
binlog-do-db = test
log-bin=master-bin
log-bin-index=master-bin.index
其中:
(1) server-id=1用于配置伺服器ID,是mysql主從叢集中的一個唯一區分号。所有的伺服器都應該有自己的唯一ID,如果一個Slave連接配接到Master,但是和Master有相同的ID,則會産生Master和Slave ID相同的錯誤
(2) binlog-do-db :指定主從複制的資料庫。
(3) log-bin字段給出了二進制日志所産生的所有檔案的基本名,二進制檔案可以包含多個檔案,如下圖所示:
(4) log-bin-index.這其實是指定了一個索引檔案(純文字,内容為檔案清單),該索引檔案中包含所有二進制檔案的清單。如果沒有為log-bin-index設定預設值,則會使用機器的hostname産生log-bin-index檔案,這樣,在伺服器的hostname改變後,可能會出現無法找到索引檔案,進而認為二進制檔案清單為空,導緻無法正确的生成二進制bin-log。是以,推薦應該使用機器無關的名字作為bin-log-index的檔案名.
配置完ini檔案之後,需要從指令行啟動mysqld服務,進入master的bin目錄(D:.Mysql/bin)并執行下述指令(如果之前配置過mysql,執行之前請關閉已經啟動的mysql服務 net stop mysql):
mysqld –-console
如果啟動成功,cmd視窗會出現如下類似的内容(紅色部分是關鍵):
這時master伺服器已經啟動了.将該cmd視窗最小化不用管它。新開一個cmd視窗,連接配接到master(mysql –u root -pxxx),通過show master status可以檢視master的狀态。
Slave連接配接Master時,會啟動一個标準的用戶端去連接配接Master,并請求Master将所有的改動轉儲給它。是以,在連接配接時,需要Master上有一個具有複制權限的使用者。在master的控制台執行如下指令:
Create user reply_user;
Grant REPLICATION SLAVE On *.* to reply_user IDENTIFIED BY ‘xxxxxxxxx’;
Flush privileges;
Replication slave權限并沒有什麼特别之處,隻是這個使用者能夠從Master上二進制檔案的轉儲資料。完全可以給一個正常的使用者賦予該權限,但最好還是将複制Slave的使用者和其他使用者區分開來,這樣的話,如果想要禁止某些slave的連結,隻要删除該使用者就可以了
二、配置Slave
配置Slave的過程和配置Master的過程基本相同,不同的是,需要配置一個不同的端口号,需要一個不同的server-id号。并且需要為Slave配置relay-log(中繼日志)和relay-log-index(中繼日志的索引檔案)。打開Slave目錄下的my.ini(D:/mysql_slave目錄),添加如下内容:
#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
現在雖然配置好了Master和Slave。但是Master和Slave之間沒有任何的聯系,這時如果在Slave的控制台執行:show slave status;會出現提示:it is not a slave
三、Slave連接配接到Master
将Slave連接配接到Master,需要知道Master的四個基本的資訊:
(1) 主機名或者IP位址,由于這裡都是單機,主機的IP為127.0.0.1
(2) Master使用的端口号,3306
(3) Master上具有REPLICATION SLAVE權限的使用者
(4) 該賬号的密碼。
在配置Master的時候已經建立了一個具有相關權限的使用者,在Slave的控制台運作以下指令:
Change Master to
Master_host=’127.0.0.1’,
Master_port=3306,
Master_user=”reply_user”,
Master_Password=”xxxx”;
執行完之後,可以通過start Slave指令啟動Slave。
這時如果執行show slave status;會輸出以下類似内容(注意标紅部分):
現在,一個基本的mysql主從已經搭建起來了。我們接着做一些簡單的測試,看看複制是否正常。測試步驟如下:
1. 在Master上建立表:
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. 插入資料
Insert into web_user2 (`name`) values ('first'),('test'),('showb'),('blood');
Select * from `web_user2`;
3. 進入Slave檢視是否同步正常
Show tables;
Select * from web_user;
4. 在master的控制台上檢視複制的事件-Binlog events
Flush logs;
Show binlog events;
日志比較長,這裡隻截取了前兩條:
從binlog的内容來看,複制已經配置成功了。
下一步,将會繼續探索二進制日志的相關東西。
參考文獻:
- 《高可用Mysql》
- http://www.cnblogs.com/zhangjun516/archive/2013/03/18/2965604.html
- http://blog.itpub.net/7607759/viewspace-719707/
知識改變命運,碼農拯救人生