1. 程式人生 > >Windows下Mysql主從配置

Windows下Mysql主從配置

由於筆者這兩天在準備專案上線mysql的相關知識點,涉及到配置mysql的主從庫,於是就找了兩臺區域網的windows機器嘗試著配置了一下,其中遇到過一些坑,以此記錄一下配置的過程,方便檢視。關於Mysql主從的概念及原理在這裡就不多說了,這裡只記錄配置的過程。

1.Mysql下載及安裝

筆者下載安裝的mysql版本是5.6.35 下載地址
安裝路徑全部是預設的

2.主庫Master配置

假設主庫的IP地址是172.16.3.53

  • 配置檔案的配置

首先開啟配置檔案,配置檔案預設在C:\ProgramData\MySQL\MySQL Server 5.6\my.ini
在[mysqld]下新增如下內容,配置檔案修改之後重啟mysql服務。
注意:在主庫上用binlog_do_db是很危險的,複製很可能會丟資料的。建議不要在主庫上用binlog_do_db,如果只需要複製部分庫的資料,可以在從庫上加replicate-ignore-db引數

# 注意區別從庫的server-id
server-id=1
# 開啟二進位制日誌,這裡的master-bin是日誌檔案的字首,不用刻意使用該名字
# 注意:=號左右兩邊不要有空格,筆者曾經在網上覆制,都包含了空格,導致mysql服務一直啟動不了,查了錯誤日誌,還以為是不支援該配置,最後嘗試著去掉=號左右兩邊的空格才能正常啟動
log-bin=master-bin
log-bin-index=master-bin.index
# binlog_format可以有三種設定值:row、statement和mixed。row代表二進位制日誌中記錄資料表每一行經過寫操作後被修改的最終值。各個參與同步的Salve節點,也會參照這個最終值,將自己資料表上的資料進行修改;statement形式是在日誌中記錄資料操作過程,而非最終的執行結果。各個參與同步的Salve節點會解析這個過程,並形成最終記錄;mixed設定值,是以上兩種記錄方式的混合體,MySQL服務會自動選擇當前執行狀態下最適合的日誌記錄方式。
binlog_format=mixed
  • 登入mysql配置

cmd進入目錄C:\Program Files\MySQL\MySQL Server 5.6\bin
登入mysql命令

輸入以下命令:

//建立新使用者
create user repl; 
// repl使用者必須具有REPLICATION SLAVE許可權,除此之外沒有必要新增不必要的許可權,密碼為mysql。
// 172.16.3.185為從庫的IP地址
grant replication slave on *.* to 'repl'@'172.16.3.185' identified by 'mysql';

主庫經常用到的命令:

show
master status \G;
#顯示master 狀態 show processlist \G; #顯示程序列表

配置正常情況下的截圖:

show master status \G;

show processlist \G;

3.從庫Slave配置

假設從庫的IP地址是172.16.3.185

  • 配置檔案的配置

首先開啟配置檔案,配置檔案預設在C:\ProgramData\MySQL\MySQL Server 5.6\my.ini
在[mysqld]下新增如下內容,配置檔案修改之後重啟mysql服務

# 注意區別主庫的server-id
server-id=2

# slave沒有必要開啟二進位制日誌,但是在一些情況下,必須設定,例如,如果slave為其它slave的master,必須設定bin_log
# log-bin=master-bin
# log-bin-index=master-bin.index

log_slave_updates=1
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index

# replicate-do-db設定從主庫中要備份的資料庫
# 注意:經過筆者多次嘗試,如果配置replicate-do-db,狀態一切都正常,但是並沒有看到從庫的實時備份,導致了資料丟失,建議使用replicate-ignore-db配置不備份的資料庫
# replicate-do-db=test  
# replicate-ignore-db設定不從主庫中備份的資料庫
replicate-ignore-db=information_schema 
replicate-ignore-db=mysql 
replicate-ignore-db=performance_schema
  • 登入mysql配置

cmd進入目錄C:\Program Files\MySQL\MySQL Server 5.6\bin
登入mysql命令

輸入以下命令:

# 注:'master-bin.000011'和2742 是在主庫中輸入show master status得到的File和Position(大概意思指的是從這個日誌檔案的第2742個位置開始複製備份),其他的都是主庫的相關屬性,所以在開啟之前
change master to  master_host='172.16.3.53',master_port=3306,master_user='repl',master_password='mysql', master_log_file='master-bin.000011',master_log_pos=2742;
# 開始複製執行緒
start slave;

從庫經常用到的命令:

start slave;  #啟動複製執行緒 
stop slave;   #停止複製執行緒 
reset slave;  #重置複製執行緒 
change master to; #動態改變到主伺服器的配置 
show slave status \G;   #顯示slave 狀態 

配置正常情況下的截圖:
show slave status \G;

4.小結:

  1. 主庫一定要開啟二進位制日誌
  2. 主庫不要配置binlog-do-db和binlog-ignore-db;
  3. my.ini配置檔案中的=號左右兩邊最好不要出現空格,避免出錯概率;
  4. 從庫不要配置replicate-do-db,只配置replicate-ignore-db就好了;
  5. 主庫從庫的server-id不能相同。
  6. 在確保配置沒有問題的情況下,當顯示狀態不對,或者修改了my.ini檔案重啟之後,或者顯示的狀態沒問題,但是沒有實時複製的時候,可以使用如下幾個命令嘗試,注意先後順序:
    change master to; #動態改變到主伺服器的配置
    stop slave; #停止複製執行緒
    reset slave; #重置複製執行緒
    start slave; #啟動複製執行緒

注:使用change master to 命令的時候,要去主庫中使用命令(show master status \G;)獲取相關的引數。在啟動備份執行緒之前,要手工將主庫中所有的資料備份到從庫中。如果在備份的時候,有可能有使用者對資料庫進行修改操作的話,記得給主庫加上鎖,避免備份的資料不全。
flush tables with read lock; //主庫上鎖表
unlock tables; //主庫表解鎖