這裡搭建的主從是最簡單的單一主從復制(即一個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設置默認值,則會使用機器的hZ喎?/kf/ware/vc/” target=”_blank” class=”keylink”>vc3RuYW1lsvrJ+mxvZy1iaW4taW5kZXjOxLz+o6zV4tH5o6zU2rf+zvHG97XEaG9zdG5hbWW4xLHkuvOjrL/JxNy74bP2z9bO3reo1dK1vcv30v3OxLz+o6y007b4yM/Oqrb+vfjWxs7EvP7B0LHtzqq/1aOstbzWws7et6jV/ci3tcTJ+rPJtv69+NbGYmluLWxvZ6Gjy/nS1KOszca89tOmuMPKudPDu/rG987eudi1xMP719bX986qYmluLWxvZy1pbmRleLXEzsS8/sP7LjwvcD4KPHA+PGltZyBzcmM9″/uploadfile/Collfiles/20141018/2014101809022018.png” alt=”\”>
配置完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》https://www.cnblogs.com/zhangjun516/archive/2013/03/18/2965604.htmlhttps://blog.itpub.net/7607759/viewspace-719707/