如何保持mysql主从数据一致

mysql主从复制有三种方法:
  • 异步复制:也是默认的主从同步方式。这种方式的优点是效率高。缺点是不能保证数据一定会到达slave。可能会受到网络等原因出现延迟,导致主从数据不一致。当前对master中的表进行数据操作,master将事务Binlog事件写入到Binlog文件中,此时主库只会通知一下Dump线程发送这些新的Binlog到slave(slave的 I/O 线程读取并将事件写入relay-log中)然后主库就会继续处理提交操作,而此时不会保证这些Binlog传到任何一个从库节点上。
  • 全同步复制:优点是能够保证数据的强一致性,缺点是效率太低。当master上有提交事务之后,Dump线程发送这些新的Binlog到slave上,并且必须等待所有的slave回复成功(所有从库将事件写入中继日志,并将数据写入数据库)才能继续下一步操作。
  • 半同步复制:优点是在耗费少量性能的基础上能在一定程度上保证数据的一致性。当master上有提交事务之后,Dump线程发送这些新的Binlog到slave上,并且必须等待其中一个slave回复成功(slave将事件写入relay-log)才能继续下一步操作。

对于mysql主从结构数据库如何保障数据一致性官方提供了“半同步插件”

该插件默认不安装

1、要使用半同步复制,必须满足以下要求:
  • MySQL服务器支持动态加载插件的能力。要验证这一点,可以检查 have_dynamic_loading系统变量的值为YES。二进制发行版应支持动态加载。
    mysql> show variables like "%have_dynamic_loading%";
    +----------------------+-------+
    | Variable_name        | Value |
    +----------------------+-------+
    | have_dynamic_loading | YES   |
    +----------------------+-------+
    1 row in set (0.01 sec)
    
  • 主从复制必须已经可以正常工作。
  • 不能配置多个复制通道。半同步复制仅与默认复制通道兼容。(mysql支持多源复制,即slave从多个master同步数据)

    什么是多源复制 ?
    在MySQL多源复制中,一个slave打开多个复制通道,每个源服务器一个。复制通道代表从源流向slave的事务路径。每个复制通道都有其自己的接收器(I / O)线程,一个或多个应用程序(SQL)线程以及中继日志。通道的接收器线程接收到来自源的事务时,会将它们添加到通道的中继日志文件中,并传递到通道的应用程序线程。这样可使每个通道独立运行。

2、安装半同步插件

rpl_semi_sync 半同步插件需要在master跟slave上同时安装才可以。

(1)master主库安装半同步插件
  • 查看是否安装同步插件
    show plugins;
    
  • 主库安装半同步插件
    install plugin rpl_semi_sync_master soname 'semisync_master.so';
    
  • 开启半同步插件
    • 临时开启
      set persist rpl_semi_sync_master_enabled=on;
      
    • 通过修改my.cnf配置永久开启
      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
      rpl_stop_slave_timeout=31536000 
      
(2)slave从库安装半同步插件
  • 查看是否安装同步插件
    show plugins;
    
  • 从库安装半同步插件
    install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
    
  • 开启半同步插件
    • 临时开启
      set persist rpl_semi_sync_slave_enabled=on;
      
    • 通过修改my.cnf配置永久开启
      rpl_semi_sync_slave_enabled=ON
      rpl_semi_sync_slave_trace_level=32
      

你可能感兴趣的:(mysql主从,mysql,mysql)