一、如何配置MYSQL的主從復制?
1. 兩台數據庫服務器,IP分別為 192.168.216.128 和 192.168.216.129,在服務器上裝MYSQL(我的配置版本為5.5.56)
2. 打開 192.168.216.128 服務器上的MYSQL的配置文件 /etc/my.cnf (路徑根據自己服務器的情況來看),將其中的 server-id 設為1(默認為1,總之兩台服務器要設置為不同的ID),然后重啟MYSQL服務
3. 打開 192.168.216.129 服務器上的MYSQL的配置文件 /etc/my.cnf (路徑根據自己服務器的情況來看),將其中的 server-id 設為2(默認為1),然后重啟MYSQL服務
4. 設 192.168.216.128 為主服務器,那么在主服務器上加一個從服務器可以登錄的用戶,語句如下:
GRANT REPLICATION SLAVE ON *.* TO 'sally'@'192.168.216.129' IDENTIFIED BY 'ilovesally';
FLUSH PRIVILEGES
建好后,在192.168.216.129 服務器上執行以下語句
mysql -h 192.168.216.128 -usally -pilovesally
然后試一下可不可以連上,如果可以,則正確,如果連不上,看一下什么原因,是否是防火牆的原因,如果是則去配置防火牆的規則。
5. 以上完成后在主服務器上執行以下語句,查詢master的狀態
show master status;
可以看到以上結果,這兒只需要看 File 和 Position,其它的兩個分別是白名單和黑名單,意思為同步哪幾個數據庫和不同步哪幾個數據庫,可自行根據需求進行設置。記錄了前兩個字段后,在從庫上執行以下語句:
CHANGE MASTER TO MASTER_HOST='192.168.216.128', MASTER_USER='sally', MASTER_PASSWORD='ilovesally', MASTER_LOG_FILE='mysql-bin.000020', MASTER_LOG_POS=1441;
6. 執行完畢后,在從庫上繼續執行如下語句:
slave start;
show slave status\G;
這樣,查看從服務器的狀態,如果狀態中的用紅線標出來兩個參數的值都為YES,那證明配置已經成功,否則可以檢查一下具體問題出現在什么地方。
這樣,就算配置完成了。在主庫中新建數據庫,新建一張表,插幾條數據,到從庫上查詢一下看是否已經同步過來。
如果失敗,可以從以下幾個方面去排查問題:
1.首先試一下主從服務器相互之間是否 PING 得通
2.試一下遠程連接是否正確,如果連不上,則有可能是網卡不一致、防火牆沒有放行 3306 端口
3.server-id 是否配成一致
4.bin-log 的信息是否正確
二、如何配置MYSQL的主主復制?
上面說了主從復制的配置方法,現在接着上面的配置繼續,然后實現雙主復制,讓以上的兩個服務器互為主從。
1. 在主服務器上配置 /etc/my.cnf 文件,配置如下:
auto_increment_increment=2 #步進值auto_imcrement。一般有n台主MySQL就填n auto_increment_offset=1 #起始值。一般填第n台主MySQL。此時為第一台主MySQL binlog-ignore=mysql #忽略mysql庫【我一般都不寫】 binlog-ignore=information_schema #忽略information_schema庫【我一般都不寫】
配置之后重啟MYSQL服務
2.在從服務器上配置 /etc/my.cnf 文件,配置如下
auto_increment_increment=2 #步進值auto_imcrement。一般有n台主MySQL就填n auto_increment_offset=2 #起始值。一般填第n台主MySQL。此時為第二台主MySQL binlog-ignore=mysql #忽略mysql庫【我一般都不寫】 binlog-ignore=information_schema #忽略information_schema庫【我一般都不寫】
配置之后重啟MYSQL服務
3. 在從服務器上添加一個主服務器可以訪問的用戶,命令如下:
GRANT REPLICATION SLAVE ON *.* TO 'sally1'@'192.168.216.128' IDENTIFIED BY 'ilovesally'; FLUSH PRIVILEGES
建好后,在192.168.216.128 服務器上執行以下語句
mysql -h 192.168.216.129 -usally1 -pilovesally
如果可以連上,則進行下一步,連不上的話,參考上面進行問題排查。
4. 因為要互為主從,所以現在從服務器也是master ,所以也要查看一下狀態
show master status;
查到相應的信息后,在原來的主服務器上執行以下命令(因為現在它現在也是另一台的從服務器)
CHANGE MASTER TO MASTER_HOST='192.168.216.129', MASTER_USER='sally1', MASTER_PASSWORD='ilovesally', MASTER_LOG_FILE='mysql-bin.000021', MASTER_LOG_POS=1457;
5. 執行完畢后,在原主庫上繼續執行如下語句:
start slave;
show slave status\G;
同上,如果出現如下畫面,則證明配置成功。
6. 在兩台服務器的MYSQL中分別進行一些建庫、建表、插入、更新等操作,看一下另一台會不會進行同步,如果可以則證明主主配置成功,否則還是上面的排錯方法,進行錯誤排查。
三、如何配置MYSQL的雙主多從?
現在已經是雙主配置了,但是如果要進行讀寫分離,那么我們要再增加N台從庫,如何做呢?非常簡單,按如下操作即可:
1. 新增加一台數據庫服務器,192.168.216.130,數據庫配置均與前兩台相同
2. 確定一下要將哪一台當作自己的主服務器,我們姑且設 192.168.216.128 為主服務器
3. 在第三台服務器中編輯 /etc/my.cnf ,將其 server-id 設為 3(保證與前兩個不一樣即可),然后重啟MYSQL服務
4. 在主服務器中,增加一條用戶記錄,用於當前服務器對主庫對的連接,代碼如下:
GRANT REPLICATION SLAVE ON *.* TO 'farrow'@'192.168.216.130' IDENTIFIED BY 'ilovesally'; FLUSH PRIVILEGES;
5. 在 192.168.216.130 服務器上測試是否可以連接到主庫
mysql -h 192.168.216.130 -ufarrow -pilovesally
如果可以連上,則可以進行下一步,否則根據上面的提示排查問題。
6. 在 192.168.216.130 服務器上查詢 master 當前狀態
看到相關信息后,我們執行如下操作:
CHANGE MASTER TO MASTER_HOST='192.168.216.128', MASTER_USER='sally', MASTER_PASSWORD='ilovesally', MASTER_LOG_FILE='mysql-bin.000020', MASTER_LOG_POS=1441;
7. 執行完畢后,我們查詢一下當前服務器的狀態
start slave;
show slave status;
如果狀態如下,則說明配置正確
如果此處有問題,參考上面所提排查並解決問題。
8. 此時我們在 192.168.216.128 上建庫、建表、插入、更新、刪除數據,在 另外兩台上分別進行查看,發現均已經同步。但是如果我們在 192.168.216.129 上做相應的操作,則發現只有 192.168.216.128 上進行了相應的同步,而 192.168.216.130 上的數據並未同步。這是為什么呢?因為我們設置的主庫是 192.168.216.128,所以在 192.168.216.129 進行數據操作的時候並未同步,這顯然不符合我們的需求,那么,我們要怎么修改呢?非常簡單,在互為主從的兩台服務器的配置文件中均加入以下語句:
log-slave-updates=on
加上后將兩台服務器的MYSQL重啟,然后再進行測試,發現數據已經可以同步了。如果要再多加一些從服務器,和以上類似,現在我們做的是雙主一從,我們可以再加N台從服務器,配置也是一樣的。
至此,MYSQL主從復制、主主復制、雙主多從配置我們均已經搞定!