阿使得肌肤· 发表于 2018-10-2 10:41:58

mysql5.5以上半同步讲解

  1.半同步
  半同步复制是主库将binlog日志发给从库,并确认binlog写入从库的relay-log的日志中,这个时候才会返回给主库
  2.异步复制
  异步复制就是咱们平时说的主从复制,主库将binlog发给从库这个时候就会结束,并不会确认从库是否接收完毕
  3.注意事项:
  半同步如果出现超时,这个时候主从复制会暂时切换到异步复制的模式,直到一台设置为半同步的数据库能够及时接受信息为止
  实验:
  mysql主从复制已经做好
  主库:
  192.168.56.10
  从库:
  192.168.56.11
  一.主库:
  1.查看半同步插件默认是否开启自动加载,可以看出有自动加载功能
  mysql> showvariableslike'%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#确保重启配置文件能够生效
  
  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%';
  +-------------------------------------------+------------+
  | Variable_name                           | Value      |
  +-------------------------------------------+------------+
  | 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)
  从库:
  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.00 sec)
  mysql>
  主库:
  mysql> show status like '%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   |
  | 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)
  mysql>
  Rpl_semi_sync_master_status表示主服务器使用是异步还是半同步复制
  Rpl_semi_sync_master_client表示从服务器有多少个配置成半同步复制
  Rpl_semi_sync_master_yes_tx表示从服务器确认成功提交的数量
  Rpl_semi_sync_master_no_tx表示从服务器确认失败提交的数量
  ############################################################
  测试
  从库 stop slave;
  主库创建一个库
  createdatabase te;   #创建的时候特别慢 需要超时 10s,但是能创建成功
  show status like '%semi%';
  Rpl_semi_sync_master_status                | OFF   ##半同步已经转换为异步复制
  从库 start slave;
  主库又切换为半同步复制,
  反思:有半同步的原理可以知道 半同步在一定程度上确保了主从一致,但是效率确实别异步复制低,具体测试我没测试

页: [1]
查看完整版本: mysql5.5以上半同步讲解