天天看点

mysql5.5以上半同步讲解

1.半同步

半同步复制是主库将binlog日志发给从库,并确认binlog写入从库的relay-log的日志中,这个时候才会返回给主库

2.异步复制

异步复制就是咱们平时说的主从复制,主库将binlog发给从库这个时候就会结束,并不会确认从库是否接收完毕

3.注意事项:

半同步如果出现超时,这个时候主从复制会暂时切换到异步复制的模式,直到一台设置为半同步的数据库能够及时接受信息为止

实验:

mysql主从复制已经做好

主库:

192.168.56.10 

从库:

192.168.56.11

一.主库:

1.查看半同步插件默认是否开启自动加载,可以看出有自动加载功能

mysql> show variables like '%dynamic%';

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

| Variable_name | Value |

| have_dynamic_loading | YES |

1 row in set (0.00 sec)

mysql> 

2.安装插件

mysql>install plugin rpl_semi_sync_master soname 'semisync_master.so';

mysql>show plugins;

mysql>SET GLOBAL rpl_semi_sync_master_enabled = 1; #开启半同步复制,默认是关闭的

vim /etc/my.cnf #确保重启配置文件能够生效

[mysqld]

GLOBAL rpl_semi_sync_master_enabled = 1

二.从库:

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

mysql>show plugins; #查看是否加载成功

mysql>SET GLOBAL rpl_semi_sync_slave_enabled = 1; #开启半同步复制,默认是关闭的

mysql>stop slave;

mysql>start slave;

vim /etc/my.cnf 

rpl_semi_sync_slave_enabled=1

###########到此mysql半同步已经做好#######################################

mysql> show variables like '%semi%';

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

| rpl_semi_sync_master_enabled | ON | ##半同步开启的状态

| rpl_semi_sync_master_timeout | 10000 | #半同步超时时间10s,超过10s切换为异步复制

| rpl_semi_sync_master_trace_level | 32 | #半同步的调试级别

| rpl_semi_sync_master_wait_for_slave_count | 1 |

| rpl_semi_sync_master_wait_no_slave | ON | #master的每个事务都要slave确认

| rpl_semi_sync_master_wait_point | AFTER_SYNC |

6 rows in set (0.00 sec)

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

| rpl_semi_sync_slave_enabled | ON | #可以看出已经打开半同步复制

| rpl_semi_sync_slave_trace_level | 32 | #半同步调试级别为

2 rows in set (0.00 sec)

mysql>

mysql> show status like '%semi%';

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

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

| Rpl_semi_sync_master_no_times | 1 |

| Rpl_semi_sync_master_no_tx | 1 |

| Rpl_semi_sync_master_status | ON |

| Rpl_semi_sync_master_timefunc_failures | 0 |

| Rpl_semi_sync_master_tx_avg_wait_time | 611 |

| Rpl_semi_sync_master_tx_wait_time | 611 |

| Rpl_semi_sync_master_tx_waits | 1 |

| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |

| Rpl_semi_sync_master_wait_sessions | 0 |

| Rpl_semi_sync_master_yes_tx | 1 |

14 rows in set (0.00 sec)

Rpl_semi_sync_master_status表示主服务器使用是异步还是半同步复制

Rpl_semi_sync_master_client表示从服务器有多少个配置成半同步复制

Rpl_semi_sync_master_yes_tx表示从服务器确认成功提交的数量

Rpl_semi_sync_master_no_tx表示从服务器确认失败提交的数量

############################################################

测试 

从库 stop slave;

主库创建一个库

create database te; #创建的时候特别慢 需要超时 10s,但是能创建成功

show status like '%semi%';

Rpl_semi_sync_master_status | OFF ##半同步已经转换为异步复制

从库 start slave;

主库又切换为半同步复制,

反思:有半同步的原理可以知道 半同步在一定程度上确保了主从一致,但是效率确实别异步复制低,具体测试我没测试

本文转自 小小三郎1 51CTO博客,原文链接:http://blog.51cto.com/wsxxsl/2051519,如需转载请自行联系原作者

继续阅读