主动-主动模式的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