Windows下MySQL的主從複製

首先需要的環境:我在本地安裝了兩個MySQL,分別是5.7和5.5的版本:安裝結束後如下:
Windows下MySQL的主從複製

1、複製原理:
原理:
在MySQL中有一種叫做bin的二進制日誌,這個日誌文件裏面記錄了關於此數據庫的所有修改的sql語句(包括insert,update,delete,grant等等)。而主從複製就是利用這個二進制bin日誌,在主庫上創建一個用戶,從數據庫通過此用戶去讀取bin日誌,然後再在從數據庫上再執行一次。

2、主數據庫配置文件修改:
我在改配置文件過程中碰到的一個問題就是:我的主數據庫選擇5.7版本,但是並沒有my.ini這個文件,只有my-default.ini.如果你是安裝在C盤,你還可能發現一個路徑:C:\programData\mysql\my.ini,改這個就好了。
Windows下MySQL的主從複製
還有其他幾個值可以配置:
binlog-do-db=su #要同步的數據庫名稱,多個寫多行,如果沒配置,則所有都同步;
binlog_format=mixed #日誌混合

3、主數據庫啓動過程:
cmd以管理員方式運行,然後輸入命令:net start MySQL57(安裝時自己取的名字),如下:
Windows下MySQL的主從複製
4、連接主數據庫:
啓動成功後,連接數據庫命令:mysql -u root -p,如下:
Windows下MySQL的主從複製
這個命令如果環境變量沒有配置的話,這個命令是沒法用的。

5、爲從數據庫創建用戶:
先可以看一下二進制日誌文件的狀態,命令爲:show global variables like '%log_bin%';(注意後面有分號),結果如下:
Windows下MySQL的主從複製
爲從服務器創建用戶,即授權給從數據庫,命令爲:grant replication slave on . to 'myslave'@'%' identified by '123456';
%表示除了本地可以訪問,還可以遠程訪問,localhost則只能本地訪問。
replication slave表示只授予slave的權限,也可以加select,insert等等。
授權以後查看主數據庫狀態,如下:
Windows下MySQL的主從複製
記錄下 File及 Position 的值,在後面進行從服務器操作的時候需要用到。

6、從數據庫配置:
Windows下MySQL的主從複製
也可以加其他的:
relay_log = mysql-relay-bin // 中繼日誌
log_slave_updates = 1 // slave將複製事件寫進自己的二進制日誌

7、從數據庫執行過程:
首先啓動從數據庫,然後執行同步SQL語句,如下:
Windows下MySQL的主從複製
然後啓動Slave同步進程,主從同步檢查,如下:
Windows下MySQL的主從複製
當這兩個值都爲YES的時候,表示狀態正常。
現在出現的狀態爲不正常的,提示的原因如下:
Windows下MySQL的主從複製
說是server-id相同,但是我配置的分別爲1和2。則解決辦法可以試試以下:
a、MySQL的一個配置文件auto.cnf裏面記錄了mysql服務器的uuid,server_uuid:服務器身份ID。在第一次啓動Mysql時,會自動生成一個server_uuid並寫入到數據目錄下auto.cnf文件裏,改一下這個值試試看。
b、找一找是不是存在其他的my.ini文件,找到後刪除;
c、通過命令來設置server-id=2:
mysql> set global server_id=2; #此處的數值和my.cnf裏設置的一樣就行
mysql> slave start;

修改成功後進行測試:
Windows下MySQL的主從複製
然後從數據庫的這張表會自動加入這條數據,這樣就算完成了數據庫的主從複製了。

最後來介紹一下MySQL主從複製的過程:
a、主節點啓用這個bin二進制日誌(log-bin);
b、從節點開啓一個線程(I/O Thread),連接主節點上的用戶,讀取這個日誌文件中的事件;
c、主節點啓動一個線程(dump Thread),檢查自己二進制日誌中的事件,跟對方請求的位置對比,如果不帶請求位置參數,則主節點就會從第一個日誌文件中的第一個事件一個一個發送給從節點;
d、從節點接收到主節點發送過來的數據把它放置到中繼日誌(Relay log)文件中。並記錄該次請求到主節點的具哪個二進制日誌文件的哪個位置;
e、從節點啓動另外一個線程(sql Thread ),把replaylog中的事件讀取出來,並在本地再執行一次。
解釋:
I/O Thread:從Master請求二進制日誌事件,並保存於中繼日誌中;
Sql Thread:從中繼日誌中讀取日誌事件,在本地完成重放;
Dump Thread:爲每個Slave的I/O Thread啓動一個dump線程,用於向從節點發送二進制事件;
注意:如果從節點需要作爲其他節點的主節點時,需要開啓二進制日誌文件的(log-bin)。這種情況叫做級聯複製。如果只是作爲從節點,則不需要創建二進制文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章