MySQL主主複製

主動-主動模式的Master-Master(Master-Master in Active-Active Mode)

Master-Master複製也叫雙主服務器複製或雙向複製,包含兩臺服務器,既是master,又是另一臺服務器的slave。這樣,任何一方所做的變更,都會通過複製應用到另外一方的數據庫中。

修改配置文件
db1
===========================================================
server_id  = 31
log-bin = mysql-info
auto_increment_increment=2
auto_increment_offset=1
log_slave_updates = 1
===========================================================

db2
===========================================================
server_id  = 32
log-bin = mysql-info
auto_increment_increment=2
auto_increment_offset=2
log_slave_updates = 1
===========================================================

創建複製用戶,兩臺均執行
mysql> grant replication slave on *.* to 'repluser'@'192.168.90.%' identified by 'mypass';  

查看指定同步位置,兩臺均執行
mysql> show master status ;  

mysql> change master to master_host=host,master_user='repluser',master_password='mypass',  
    -> master_log_file='master_log_file',master_log_pos=master_log_file_pos;  

啓動查看複製正常運行
mysql> start slave;  

mysql> show slave status \G
...  
             Slave_IO_Running: Yes  
            Slave_SQL_Running: Yes  
...

驗證主主複製
[db1]
mysql> create table mm(id int(11) primary key auto_increment,name varchar(10));
mysql> insert into mm value(null,'db1'),(null,'db1'),(null,'db1');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

[db2]
mysql>  insert into mm value(null,'db2'),(null,'db2'),(null,'db2');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from mm;
+----+------+
| id | name |
+----+------+
|  1 | db1  |
|  3 | db1  |
|  5 | db1  |
|  6 | db2  |
|  8 | db2  |
| 10 | db2  |
+----+------+
6 rows in set (0.00 sec)

[db1]
mysql> insert into mm value(null,'db1');
Query OK, 1 row affected (0.01 sec)

[db2]
mysql> insert into mm value(null,'db1');
Query OK, 1 row affected (0.01 sec)

mysql> select * from mm;
+----+------+
| id | name |
+----+------+
|  1 | db1  |
|  3 | db1  |
|  5 | db1  |
|  6 | db2  |
|  8 | db2  |
| 10 | db2  |
| 11 | db1  |
| 12 | db2  |
+----+------+
8 rows in set (0.00 sec)

主動的Master-Master複製缺點:

  • 主動的Master-Master複製最大的問題就是更新衝突

假設一個表只有一行(一列)的數據,其值爲1,如果兩個服務器分別同時執行如下語句:
在第一個服務器上執行:
mysqlUPDATE tbl SET col=col + 1;
在第二個服務器上執行:
mysqlUPDATE tbl SET col=col * 2;
那麼結果是多少呢?一臺服務器是4,另一個服務器是3,但是,這並不會產生錯誤。

  • 如果某一方寫入頻繁,某一方寫入很少,會造成大量的鍵空間浪費。

主動-被動模式的Master-Master(Master-Master in Active-Passive Mode)

這是master-master結構變化而來的,它避免了M-M的缺點,實際上,這是一種具有容錯和高可用性的系統。它的不同點在於其中一個服務只能進行只讀操作。這種配置可以輕易的來回交換主動服務器與被動服務器的角色,這是故障轉移恢復就容易了,他可以在不關閉MySQL服務器的情況執行維護、升級表、升級操作系統及其他任務。可以使用MySQL主主複製管理工具(MySQL Master-Master Replication Manager)來創建管理這種拓撲結構。

整理自網絡

Svoid
2015-02-02
發佈了54 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章