mysql的半同步复制

半同步复制

master:

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';   #安装半同步复制的插件
Query OK, 0 rows affected (0.01 sec)

mysql> set global  rpl_semi_sync_master_enabled=ON;    #热生效:打开半同步
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like  '%semi%';
+-------------------------------------------+------------+
| 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)


参数:

rpl_semi_sync_master_timeout:主库等待从库返回ack的时间(一般设置为无穷大,保证无损)
rpl_semi_sync_master_wait_poin:after-sync   无损复制

 

mysql> show status like  '%rpl_semi_sync%';
+--------------------------------------------+-------+
| Variable_name                              | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients               | 0     |
| 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)

 

slave:

mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
Query OK, 0 rows affected (0.00 sec)

mysql> set global  rpl_semi_sync_slave_enabled=ON;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like  '%semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | ON    |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
2 rows in set (0.01 sec)

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

查看slave的状态:

mysql的半同步复制_第1张图片

 

测试:

1.在master插入数据,在slave上可以复制过来

master:

mysql的半同步复制_第2张图片

slave:

mysql的半同步复制_第3张图片

2. 将等待时间设置为30s,关闭slave,在master上插入数据,查看master的进程信息,会发现master处在等待slave的ack确认的状态,这个时候开启slave,数据同步完成

(1)设置等待时间

mysql> set global rpl_semi_sync_master_timeout=30000;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%semi%time%';
+------------------------------+-------+
| Variable_name                | Value |
+------------------------------+-------+
| rpl_semi_sync_master_timeout | 30000 |
+------------------------------+-------+
1 row in set (0.01 sec)

(2)关掉slave,在master上插入数据,新开一个窗口查看线程状态

slave:

mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)

 

master:

mysql> mysql> insert into userlist values('user3','333');
Query OK, 1 row affected (16.39 sec)

查看线程状态:

mysql的半同步复制_第4张图片

重新开启slave,可以查看到数据同步到slave上

mysql的半同步复制_第5张图片

你可能感兴趣的:(运维,mysql的半同步复制)