当前位置:首页 » Mysql技术教程

mysql 半同步复制

2012-12-05 19:49 本站整理 浏览(9)

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 (黑名单)

本文出自 “vincekey” 博客,请务必保留此出处http://vincekey.blog.51cto.com/815438/1079692