萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> mysql主主復制(雙主復制)配置步驟

mysql主主復制(雙主復制)配置步驟

以前我們介紹的都是主從復制,這裡給各位介紹一個雙主復制了,下面都希望兩個主服務器數據自動復制的話可參考一下此文章。


MySQL主主復制結構區別於主從復制結構。在主主復制結構中,兩台服務器的任何一台上面的數據庫存發生了改變都會同步到另一台服務器上,這樣兩台服務器互為主從,並且都能向外提供服務。
有了上一節的主從復制,那麼主主復制就很容易了。

一、先修改配置文件

服務器A(192.168.1.254)配置如下

 
log-bin   = mysql-bin
server-id = 1
expire-logs-days  = 100
replicate-do-db   = test
binlog-ignore-db  = mysql
binlog-ignore-db  = information_schema
auto-increment-increment = 2
auto-increment-offset = 1
服務器B(192.168.1.252)配置

 
log-bin   = mysql-bin
server-id = 2
expire-logs-days  = 100
replicate-do-db   = test
binlog-ignore-db  = mysql
binlog-ignore-db  = information_schema
auto-increment-increment = 2
auto-increment-offset = 2
兩台服務器都重啟

 
mysql> service mysqld restart
注:二都只有server-id不同和 auto-increment- offset不同
auto-increment-offset是用來設定數據庫中自動增長的起點的,回為這兩能服務器都設定了一次自動增長值2,所以它們的起點必須得不同,這樣才能避免兩台服務器數據同步時出現主鍵沖突
replicate-do-db 指定同步的數據庫,我們只在兩台服務器間同步test數據庫
另:auto-increment-increment的值應設為整個結構中服務器的總數,本案例用到兩台服務器,所以值設為2

二、同步數據

本文是用test做的實驗,導出將test.sql文件從254服務器拷貝到252服務器
備份數據前先鎖表,保證數據一致性


 
mysql> FLUSH TABLES WITH READ LOCK;

 
# mysqldump -uroot -p123456 test> /tmp/test.sql;

 
mysql> UNLOCK TABLES;

 scp /tmp/test.sql [email protected]:/tmp
三、相互授權用戶(在A服務器授權一個允許B訪問的用戶,反之亦然)

在服務器A(192.168.1.254)上


 
mysql> GRANT REPLICATION SLAVE ON *.* TO 'mysync'@'192.168.1.252' IDENTIFIED BY PASSWORD '123456';
mysql> flush privileges;
在服務器B(192.168.1.252)上

 
mysql> GRANT REPLICATION SLAVE ON *.* TO 'mysync'@'192.168.1.254' IDENTIFIED BY PASSWORD '123456';
mysql> flush privileges;
四、互告bin-log信息

在服務器A(192.168.1.254)


 
mysql> show master status;
+------------------+----------+--------------+--------------------------+
| File     | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+--------------------------+
| mysql-bin.000006 |      106 |      | mysql,information_schema |
+------------------+----------+--------------+--------------------------+
在服務器A(192.168.1.252)

 
mysql> show master status;
+------------------+----------+--------------+--------------------------+
| File     | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+--------------------------+
| mysql-bin.000008 |      192 |      | mysql,information_schema |
+------------------+----------+--------------+--------------------------+
在A服務器(192.168.1.254)上執行


 
mysql> change master to master_host='192.168.1.252',master_user='mysync',master_password='123456',master_log_file='mysql-bin.000008',master_log_pos=192;
在B服務器(192.168.1.252)上執行


 
mysql> change master to master_host='192.168.1.254',master_user='mysync',master_password='123456',master_log_file='mysql-bin.000006',master_log_pos=106;
五、在兩服務器都執行以下命令

mysql> start slave;

六、查看狀態

mysql> show slave status\G
A服務器(192.168.1.254)狀態如下:

 Slave_IO_State: Waiting for master to send event
  Master_Host: 192.168.1.252
  Master_User: mysync
  Master_Port: 3306
Connect_Retry: 60
      Master_Log_File: mysql-bin.000008
  Read_Master_Log_Pos: 192
       Relay_Log_File: mysqld-relay-bin.000009
Relay_Log_Pos: 337
Relay_Master_Log_File: mysql-bin.000008
     Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
      Replicate_Do_DB: test
B服務器(192.168.1.252)狀態如下:


  Slave_IO_State: Waiting for master to send event
  Master_Host: 192.168.1.254
  Master_User: mysync
  Master_Port: 3306
Connect_Retry: 60
      Master_Log_File: mysql-bin.000006
  Read_Master_Log_Pos: 106
       Relay_Log_File: mysqld-relay-bin.000014
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000006
     Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
      Replicate_Do_DB: test
當看到了兩個yes,即:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
說明已經配置成功了

接下來看可以做一下實驗,測試一下是否同步

PS:
在測試的過程當中,我也遇到一些問題主要是兩台機器互相通信的問題
請注意,一定要保持兩台的服務器的mysql端口都向對方打開,要不然是不能成功同步的。

copyright © 萬盛學電腦網 all rights reserved