码迷,mamicode.com
首页 > 数据库 > 详细

MySQL学习笔记12半同步复制

时间:2017-08-27 09:56:01      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:failure   连接   slave   半同步   事务   select   bsp   时间   异步   

1.1.1. 相关概念

 

默认情况下,MySQL使用异步复制,即master上的事务执行与slave上的复制操作不需要同步,master不需要等待slave上的复制线程将Binary Log接收完毕即可执行其它事务。

半同步复制时,master上的事务执行与slave上的复制操作需要在某个步骤上进行同步,master需要等待slave上的复制线程接收完毕Binary Log

异步复制的工作效率比较高,但是在特定条件下,有可能造成masterslave的数据不一致。半同步复制可以降低数据不一致的概率。半同步复制仅支持单源复制,不支持多源复制。

 

1.1.2. 部署半同步复制

 

建立半同步复制的环境,在已经建立好master-slave复制环境的情况下,还需要执行以下操作。

(1)master上安装半同步复制插件。

mysql> show variables like ‘%semi%‘;

Empty set (0.02 sec)

 

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so‘;

Query OK, 0 rows affected (0.05 sec)

 

mysql> show variables like ‘%semi%‘;

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

| Variable_name                             | Value      |

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

| rpl_semi_sync_master_enabled              | OFF        |

| rpl_semi_sync_master_timeout              | 10000      |

| rpl_semi_sync_master_trace_level          | 32         |

| rpl_semi_sync_master_wait_for_slave_count | 1          |

| rpl_semi_sync_master_wait_no_slave        | ON         |

| rpl_semi_sync_master_wait_point           | AFTER_SYNC |

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

6 rows in set (0.00 sec)

 

其中 rpl_semi_sync_master_timeout变量控制半同步的超时时间,单位为毫秒,默认为10000,即10秒钟。

 

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS

    -> FROM INFORMATION_SCHEMA.PLUGINS

    -> WHERE PLUGIN_NAME LIKE ‘%semi%‘;

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

| PLUGIN_NAME          | PLUGIN_STATUS |

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

| rpl_semi_sync_master | ACTIVE        |

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

1 row in set (0.00 sec)

 

 

(2)slave上安装半同步复制插件。

mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so‘;

Query OK, 0 rows affected (0.03 sec)

 

mysql> show variables like ‘%semi%‘;

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

| Variable_name                   | Value |

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

| rpl_semi_sync_slave_enabled     | OFF   |

| rpl_semi_sync_slave_trace_level | 32    |

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

2 rows in set (0.00 sec)

 

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS

    -> FROM INFORMATION_SCHEMA.PLUGINS

    -> WHERE PLUGIN_NAME LIKE ‘%semi%‘;

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

| PLUGIN_NAME         | PLUGIN_STATUS |

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

| rpl_semi_sync_slave | ACTIVE        |

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

1 row in set (0.00 sec)

 

 

(3)master上启用半同步复制。

master上的MySQL配置文件中:

[mysqld]

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=10000

【此处省略了异步复制必须的其它配置】

 

可以使用SQL命令动态启用半同步复制。

mysql> set global rpl_semi_sync_master_enabled=1;

Query OK, 0 rows affected (0.00 sec)

 

 

(4)slave上启用半同步复制。

slave上的MySQL配置文件中:

[mysqld]

rpl_semi_sync_slave_enabled=1

【此处省略了异步复制必须的其它配置】

 

可以使用SQL命令动态启用半同步复制。

mysql> stop slave;

Query OK, 0 rows affected, 1 warning (0.00 sec)

 

mysql> set global rpl_semi_sync_slave_enabled=1;

Query OK, 0 rows affected (0.00 sec)

 

mysql> start slave;

Query OK, 0 rows affected (0.01 sec)

 

至此半同步复制环境建立成功。

 

 

1.1.3. 监控半同步复制的状态

 

 

(1)查看master上的半同步复制。

 

mysql> SHOW VARIABLES LIKE ‘rpl_semi_sync%‘;

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

| Variable_name                             | Value      |

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

| rpl_semi_sync_master_enabled              | ON         |

| rpl_semi_sync_master_timeout              | 10000      |

| rpl_semi_sync_master_trace_level          | 32         |

| rpl_semi_sync_master_wait_for_slave_count | 1          |

| rpl_semi_sync_master_wait_no_slave        | ON         |

| rpl_semi_sync_master_wait_point           | AFTER_SYNC |

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

6 rows in set (0.01 sec)

 

mysql> SHOW STATUS LIKE ‘Rpl_semi_sync%‘;

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

| 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     |

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

14 rows in set (0.00 sec)

 

其中,Rpl_semi_sync_master_clients表示通过半同步复制已经连接上的slave的数量。

 Rpl_semi_sync_master_yes_tx表示已经成功发送了半同步ACKslave的数量。

 Rpl_semi_sync_master_no_tx表示没有成功发送半同步ACKslave的数量。

 

 

 

(2)查看slave上的半同步复制状态。

mysql> SHOW VARIABLES LIKE ‘rpl_semi_sync%‘;

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

| Variable_name                   | Value |

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

| rpl_semi_sync_slave_enabled     | ON    |

| rpl_semi_sync_slave_trace_level | 32    |

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

2 rows in set (0.00 sec)

 

mysql> SHOW STATUS LIKE ‘Rpl_semi_sync%‘;

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

| Variable_name              | Value |

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

| Rpl_semi_sync_slave_status | ON    |

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

1 row in set (0.00 sec)

其中,Rpl_semi_sync_slave_status表示slave上的半同步复制已经成功启动了。

 

MySQL学习笔记12半同步复制

标签:failure   连接   slave   半同步   事务   select   bsp   时间   异步   

原文地址:http://www.cnblogs.com/coe2coe/p/7439380.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!