mysql  半同步复制

实验环境

rhel 5.8   +    mysql-5.5.28-linux2.6-i686.tar.gz

主    172.16.111.1

从    172.16.111.123

先确保可以正常启动

默认情况下,MySQL5.5 的复制功能是异步的,这意味着当谈到数据一致性时,主服务器及其从服务器是独立的。异步复制可以提供最佳的性能,因为主服务器在将更新的数据写入它的二进制日志(Binlog)文件中后,无需等待验证更新数据是否已经复制到至少一台拓扑从服务器中,就可以自由处理其它进入的事务处理请求。虽然快,但这也同时带来了很高的风险,如果在主服务器或从服务器端发生故障,会造成主服务器/从服务器数据的不一致,甚至在恢复时造成数据丢失。

 

配置
将半同步复制模块载入mysql
模块位置 /usr/local/mysql/lib/plugin
semisync_master.so      主服务器安装的
semisync_slave.so        从服务安装的


主服务器设置:
mysql>  INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';  
             载入模块至主服务器mysql
mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
             启用半同步复制模块
mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000;
             设置超时时间 这里为1000毫秒


从服务器设置:
mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1; 
             指定模块并启用

 

show plugins;     查看模块加载状况
| PERFORMANCE_SCHEMA       | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| partition                | ACTIVE   | STORAGE ENGINE     | NULL               | GPL     |
| rpl_semi_sync_master     | ACTIVE   | REPLICATION        | semisync_master.so | GPL     |
+--------------------------+----------+--------------------+--------------------+---------+
可以看到模块在组后一行 已经载入

 


show status like 'rpl_%';          查看以rpl打头的 状态变量信息


主服务上

mysql> show status like 'rpl_%';
+--------------------------------------------+-------------+
| Variable_name                              | Value       |
+--------------------------------------------+-------------+
| Rpl_semi_sync_master_clients               | 1           |
| Rpl_semi_sync_master_net_avg_wait_time     | 0           |
| Rpl_semi_sync_master_net_wait_time         | 0           |
| Rpl_semi_sync_master_net_waits             | 0           |
| Rpl_semi_sync_master_no_times              | 0           |
| Rpl_semi_sync_master_no_tx                 | 0           |
| Rpl_semi_sync_master_status                | ON          |
| Rpl_semi_sync_master_timefunc_failures     | 0           |
| Rpl_semi_sync_master_tx_avg_wait_time      | 0           |
| Rpl_semi_sync_master_tx_wait_time          | 0           |
| Rpl_semi_sync_master_tx_waits              | 0           |
| Rpl_semi_sync_master_wait_pos_backtraverse | 0           |
| Rpl_semi_sync_master_wait_sessions         | 0           |
| Rpl_semi_sync_master_yes_tx                | 0           |
| Rpl_status                                 | AUTH_MASTER |
+--------------------------------------------+-------------+
15 rows in set (0.00 sec)


从服务器上
mysql> show status like 'rpl_%';
+----------------------------+-------------+
| Variable_name              | Value       |
+----------------------------+-------------+
| Rpl_semi_sync_slave_status | ON          |
| Rpl_status                 | AUTH_MASTER |
+----------------------------+-------------+
2 rows in set (0.00 sec)

都已经启动了


查看主服务器上的semi_sync是否开启,注意clients 变为1 ,证明主从半同步复制连接成功
mysql> SHOW GLOBAL STATUS LIKE 'rpl_semi%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 1     |
| Rpl_semi_sync_master_net_avg_wait_time     | 0     |
| Rpl_semi_sync_master_net_wait_time         | 0     |

 


也可将命令写入my.cnf配置文件 使其永久有效
主服务区上
[mysqld]
rpl_semi_sync_master_enabled=1
rpl_semi_sync_master_timeout=1000

从服务器
[mysqld]
rpl_semi_sync_slave_enabled=1
read-only=1  从服务器只具有被读的权限  不可写入


可以在主配置文件中指定复制哪些数据库  或哪些表
关键字
replicate_do_db='kaka'       (白名单)只复制kaka这个数据库
rpplicate_ignore_db='kaka'  (黑名单)kaka这个数据库之外的都复制 

replicate_do_table         (白名单)指定表
replicate_ignore_table    (黑名单)