【mysql】實現主從複製、主主複製、雙主多從---實操配置方案

一、如何配置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';<br>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主從複製、主主複製、雙主多從配置我們均已經搞定!

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