首頁 > 軟體

Mysql雙主設定的詳細步驟

2022-06-23 14:02:59

前言

特點:在雙主設定中,兩臺mysql互為主從節點。節點A是節點B的master,同時節點B也是節點A的master。

安裝mysql步驟略過

一、mysql組態檔

(1)節點A設定

# 設定server-id,兩節點必須不一樣
server-id = 100
 
 
# 開啟bin_log,模式為ROW,允許最大紀錄檔為1G
log_bin = mysql-bin
binlog_format = ROW
max_binlog_size = 1024M
 
 
# mysql5.7的版本不需要設定log-slave-updates=1
# log-slave-updates = 1
 
 
# 實現資料庫宕機恢復後,自動同步缺少的資料
relay_log = mysql-relay-bin
 
 
# 設定自增ID初始值為2,每次自增量為2。即都是偶數2,4,6,8,...
auto_increment_offset = 2
auto_increment_increment = 2
 
 
# 開啟gtid
gtid_mode = ON
enforce_gtid_consistency = 1
 
 
# 忽略不需要同步的schema
replicate-ignore-db = mysql
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
replicate-ignore-db = sys

(2)節點B設定

只列出了與節點A不同的設定

# 設定server-id,兩節點必須不一樣
server-id = 200
 
# 設定自增ID初始值為1,每次自增量為2。即都是奇數1,3,5,7,...
auto_increment_offset = 1
auto_increment_increment = 2

二、設定節點A為節點B的master(主從模式)

節點A為master,節點B為slave。

(1)登入節點A,建立slave(節點B)使用的賬號。

# 在節點A上建立賬號repl_user,允許從任意IP存取,密碼為slave@100,
grant replication slave on *.* to 'repl_user'@'%' identified by 'slave@100';
flush privileges;

(2)檢視節點A的master資訊

如下圖所屬,節點A的bin_log紀錄檔為mysql-bin.000001,位置是154

# 清空master資訊。初次設定可以使用,若已執行了同步,切記不要使用!
reset master;
 
# 檢視master資訊
show master status;
 
+------------------+----------+--------------+------------------+---------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                           |
+------------------+----------+--------------+------------------+---------------------------------------------+
| mysql-bin.000001 |     154 |              |                  | c2cf218e-2317-11ec-a36f-5cf9dd4fd6a8:1-5    |
+------------------+----------+--------------+------------------+---------------------------------------------+

(3)登入節點B,設定節點B的master為節點A

# 停止節點B上的slave
stop slave;
 
# 將節點B的master設為節點A,以下的設定資訊均表示節點A
# MASTER_LOG_FILE和MASTER_LOG_POS,是在第(2)步中檢視節點A的master資訊
CHANGE MASTER TO 
       MASTER_HOST='127.0.0.1', 
       MASTER_PORT=3307,
       MASTER_USER='repl_user', 
       MASTER_PASSWORD='slave@100', 
       MASTER_LOG_FILE='mysql-bin.000001', 
       MASTER_LOG_POS=154;
 
# 開啟節點B上的slave
start slave;

(4)確認節點B的slave是否執行成功。當返回的結果中,Slave_IO_Running和Slave_SQL_Running都為YES時,表示成功。如果為NO或Connecting時,請在mysql的data目錄中檢視.err結尾的紀錄檔檔案,找出[ERROR]級別的紀錄檔檢視。初次設定時,一般都是my.ini設定問題,或同步賬號建立問題導致的。

# 在節點B中檢視slave狀態
show slave statusG;
 
*************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event
                  Master_Host: 127.0.0.1
                  Master_User: repl_user
                  Master_Port: 3307
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 2207
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 1143
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
                           ......

(5)若slave設定出現異常,可使用以下語句重置

reset slave all;

三、完成雙主設定

        此時,已成功設定了節點A與節點B的主從模式,即節點A是節點B的master。接下來重複步驟三的操作,但是節點A、B的操作要顛倒過來,即在節點B上建立同步賬號,檢視master資訊,在節點A上設定節點B為master。設定完成後,同樣檢視節點A的slave狀態,Slave_IO_Running和Slave_SQL_Running是否都為YES。

四、測試

在節點A新增、刪除schema或表或資料,在節點B中檢視是否有正確同步。

測試自增主鍵,分別在節點A、B上新增自增主鍵的資料,與組態檔是否對應。一個為奇數,一個為偶數。增加或刪除資料,主鍵是否會出現衝突的情況。

五、控制同步的庫或表

通過修改my.ini實現

(1)在master端控制

        binlog-do-db            binlog紀錄檔記錄的資料庫(多資料庫用,隔開)

        binlog-ignore-db      binlog紀錄檔中忽略資料庫(多資料庫用,隔開)

只有在binlog中記錄的表,才能同步給從庫

# binlog中記錄這兩個表
binlog-do-db=db_1,db_2      
 
# binlog中不記錄這兩個表 
binlog-ignore-db=db_3,db_4  

  (2)在slave端控制

        replicate-do-db                  設定需要複製的資料庫
        replicate-ignore-db            設定需要忽略的複製資料庫 
        replicate-do-table              設定需要複製的表
        replicate-ignore-table        設定需要忽略的複製表 
        replicate-wild-do-table       同replication-do-table功能一樣,可以萬用字元
        replicate-wild-ignore-table 同replication-ignore-table功能一樣,可以加萬用字元

        注:忽略的設定裡,在從庫的relaylog中仍有資訊,只是沒有執行同步。

# 執行同步的庫
replicate-do-db=db_1
replicate-do-db=db_2
 
# 忽略同步的庫
replicate-ignore-db=db_3
 
# 執行同步的表
replicate-do-table=db_1.table_a
replicate-do-table=db_2.table_b
 
# 忽略同步的表
replicate-ignore-table=db_2.table_c
 
# 只複製哪個庫的哪個表
replicate-wild-do-table=db_4.% 
 
# 忽略哪個庫的哪個表
replicate-wild-ignore-table=mysql.%   

第五部分參照自CSDN博主「Mr. Sun_」的原創文章

原文連結:https://www.jb51.net/article/252656.htm

六、一個賬號多個IP

       當一臺mysql作為主節點,N臺作為從節點時,如果每個從節點都新增一個賬號會非常繁瑣。此時可以在主節點中,建立一個賬號,給此賬號設定多個IP,從而減少新增的賬號個數。

具體做法是,將建立賬號的語句執行多次,每次的IP不同即可。

# 建立一個賬號名,為此賬號設定多個ip
grant replication slave on *.* to 'repl_user'@'192.168.5.10' identified by 'slave@100';
grant replication slave on *.* to 'repl_user'@'192.168.5.20' identified by 'slave@100';
FLUSH PRIVILEGES

第六部分參照自CSDN博主「rucypli」的回答

mysql grant 多個ip-CSDN論壇

總結

到此這篇關於Mysql雙主設定的文章就介紹到這了,更多相關Mysql雙主設定內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com