這裏搭建的主從是最簡單的單一主從複製(即一個Master和一個slave,沒有任何的熱機備份和多slave),該主從結構的基本拓撲圖以下所示:html
創建基本的主從複製能夠總結爲如下三個基本步驟:mysql
在配置完成以後,咱們會作一個簡單的測試,測試複製是否正常。web
本文所涉及的master和slave服務器均位於同一臺單機上,使用不一樣的端口號區分,基本的環境爲:Window 7 旗艦版 32位,MySQL的版本爲5.6.21 。上一篇筆記(Windows環境下壓縮版MySQL安裝)中,已經介紹了壓縮版mysql配置的基本過程,這裏須要複製一份,並解壓縮到另一個目錄(例如D:/Mysql_slave目錄中)。爲了區分master和slave,咱們分別使用不一樣的端口號:master使用3306,slave使用3307端口號。sql
將服務器配置爲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
其中:spa
(1) server-id=1用於配置服務器ID,是mysql主從集羣中的一個惟一區分號。全部的服務器都應該有本身的惟一ID,若是一個Slave鏈接到Master,可是和Master有相同的ID,則會產生Master和Slave ID相同的錯誤.net
(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的過程和配置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,須要知道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的內容來看,複製已經配置成功了。
下一步,將會繼續探索二進制日誌的相關東西。
參考文獻: