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

mysql半同步复制实现

2015-12-13 17:06 本站整理 浏览(3)

mysql半同步复制和异步复制的区别如上述架构图所看到的:在mysql异步复制的情况下。Mysql Master Server将自己的Binary Log通过复制线程传输出去以后,Mysql Master Sever就自己主动返回数据给client。而无论slave上是否接受到了这个二进制日志。在半同步复制的架构下。当master在将自己binlog发给slave上的时候。要确保slave已经接受到了这个二进制日志以后,才会返回数据给client。

对照两种架构:异步复制对于用户来说,能够确保得到高速的响应结构,可是不能确保二进制日志确实到达了slave上。半同步复制对于客户的请求响应略微慢点,可是他能够保证二进制日志的完整性。

以下来配置一个半同步复制实现的主从架构:

192.168.1.141为mysql的主server

192.168.1.142为mysql的从server

1.为mysql主server提供配置编辑/etc/my.cnf,提供下面的配置

log_bin=index

server_id=1

在主server上授权

# mysql> grant replication slave,replication client on user@'192.168.1.142' identified by "123456";

# mysql> flush privileges;

2.为mysql从服务提供配置编辑/etc/my.cnf,提供下面的配置

server_id=10

relay_log=relay

read_only=on

skip-slave-start=1

进入mysql命令行接口

# mysql > change master to MASTER_HOST="192.168.1.141",MASTER_USER="user",MASTER_PASSWORD="123456",MASTER_LOG_FILE="index.000004",MASTER_LOG_POS=429;

# mysql > start slave;

假设可以看到Slave_IO_Running: Yes和Slave_SQL_Running:Yes两行信息的话。证明主从配置已经成功。

要使用mysql的半同步复制功能须要为mysql装插件,mysql默认支持的插件在/usr/local/mysql/lib/plugin/,里面有两个semisync_master.so和semisync_slave.so的共享库是我们实现mysql半同步复制的关键

3.设置半同步复制在mysql主server的命令行接口下运行例如以下代码:

# mysql > install plugin rpl_semi_sync_master SONAME 'semisync_master.so';

# mysql > show variables like "%semi%";(假设看到新增的semi变量的话证明安装模块成功)

| rpl_semi_sync_master_enabled | OFF | 是否启动半同步复制,默认关闭

| rpl_semi_sync_master_timeout | 10000 | 等待从server告诉接受到的超时时间,假设时间到了。还没接受到,自己主动降级为异步

| rpl_semi_sync_master_trace_level | 32 | 执行级别

| rpl_semi_sync_master_wait_no_slave | ON | 没有slave的时候是否也须要等待。默觉得也须要等待

# mysql > set global rpl_semi_sync_master_enabled = 1;

# mysql > set global rpl_semi_sync_master_timeout = 1000;

在mysql从server的命令行接口下运行例如以下代码:

# mysql > install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';

# mysql > show variables like "%semi%";(假设看到新增的semi变量的话证明安装模块成功)

# mysql > set global rpl_semi_sync_slave_enabled = 1;

# stop slave;

# start slave;

最后把经常使用的配置參数写如配置文件里:

192.168.1.141:

[mysqld]

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

192.168.1.142:

[mysqld]

rpl_semi_sync_slave_enabled=1

4.查看半同步复制的状况信息在192.168.1.141运行例如以下命令:

mysql> show status like "%semi%";

+-------------------------------------------------------------------+----------+

| Variable_name | Value |

+-------------------------------------------------------------------+----------+

| Rpl_semi_sync_master_clients | 1 | 半同步复制客户端的个数

| Rpl_semi_sync_master_net_avg_wait_time | 555 | 平均等待时间(默认毫秒)

| Rpl_semi_sync_master_net_wait_time | 1665 | 总共等待时间

| Rpl_semi_sync_master_net_waits | 3 | 等待次数

| Rpl_semi_sync_master_no_times | 0 | 关闭半同步复制的次数

| Rpl_semi_sync_master_no_tx | 0 | 表示没有成功接收slave提交的次数

| Rpl_semi_sync_master_status | ON | 表示当前是异步模式还是半同步模式。on为半同步

| Rpl_semi_sync_master_timefunc_failures | 0 | 调用时间函数失败的次数

| Rpl_semi_sync_master_tx_avg_wait_time | 575 | 事物的平均传输时间

| Rpl_semi_sync_master_tx_wait_time | 1725 | 事物的总共传输时间

| Rpl_semi_sync_master_tx_waits | 3 | 事物等待次数

| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |

| Rpl_semi_sync_master_wait_sessions | 0 | 当前有多少个session由于slave的回复而造成等待

| Rpl_semi_sync_master_yes_tx | 3 | 成功接受到slave事物回复的次数

+-------------------------------------------------------------------+---------+

5.取消半同步复制的插件192.168.1.141上:

# mysql > uninstall plugin rpl_semi_sync_master;

# mysql > show status like "%semi%"

192.168.1.142上:

# mysql > uninstall plugin rpl_semi_sync_slave;

# mysql > show status like "%semi%"