• MySQL主从半同步复制


    一、半同步复制

    1.半同步复制概念

    从MYSQL5.5开始,支持半自动复制。之前版本的MySQL Replication都是异步(asynchronous)的,主库在执行完一些事务后,
    是不会管备库的进度的。如果备库不幸落后,而更不幸的是主库此时又出现Crash(例如宕机),这时备库中的数据就是不完整的。
    简而言之,在主库发生故障的时候,我们无法使用备库来继续提供数据一致的服务了。
    
    半同步复制(Semi synchronous Replication)则一定程度上保证提交的事务已经传给了至少一个备库。
    出发点是保证主从数据一致性问题,安全的考虑。
    
    5.5 出现概念,但是不建议使用,性能太差
    5.6 出现group commit 组提交功能,来提升开启半同步复制的性能
    5.7 更加完善了,在group commit基础上出现了MGR
    5.7 的增强半同步复制的新特性:after commit; after sync;
    
    #缺点:
    1.性能差,影响主库效率
    2.半同步复制,有一个超时时间,超过这个时间恢复主从复制
    
    # 半同步复制原理:
    主要为了保证主库的binlog事务被可靠写入到从库中,主库在每次事务成功提交时,并不及时反馈给前端应用用户,
    而是等待其中的一个从库也接收到Binlog事务并成功写入中继日志后,由从库的binlog返回一个ack给主库,主库只有接到从库发来的ACK确认,主库事务才能commit成功。
    半同步复制保证了事务成功提交后,至少有两份日志记录,一份在主库的Binlog日志上,另一份在至少一个从库的中继日志Relay log上,从而更近一步保证了数据的完整性。
    
    # 半同步复制和全同步的区别:
    和mysql全同步复制的区别为,全同步复制需要保证每一个binlog事务都写入到从库中,而半同步复制只需要保证所有的从库中有一个binlog事务写入到从库中即可。
    

    2.配置半同步

    1)主库操作

    #登录数据库
    [root@db01 ~]# mysql -uroot -p123
    #查看是否有动态支持
    mysql> show global variables like 'have_dynamic_loading';
    #安装自带插件
    mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME'semisync_master.so';
    #启动插件
    mysql> SET GLOBAL rpl_semi_sync_master_enabled = 1;
    #设置超时
    mysql> SET GLOBAL rpl_semi_sync_master_timeout = 1000;
    #修改配置文件
    [root@db01 ~]# vim /etc/my.cnf
    #在[mysqld]标签下添加如下内容(不用重启库)
    [mysqld]
    rpl_semi_sync_master_enabled=1
    rpl_semi_sync_master_timeout=1000
    检查安装:
    mysql> show variables like'rpl%';
    mysql> show global status like 'rpl_semi%';
    

    2)从库操作

    #登录数据库
    [root@mysql-db02 ~]# mysql -uroot -poldboy123
    #安装slave半同步插件
    mysql>  INSTALL PLUGIN rpl_semi_sync_slave SONAME'semisync_slave.so';
    #启动插件
    mysql> SET GLOBAL rpl_semi_sync_slave_enabled = 1;
    #重启io线程使其生效
    mysql> stop slave io_thread;
    mysql> start slave io_thread;
    #编辑配置文件(不需要重启数据库)
    [root@mysql-db02 ~]# vim /etc/my.cnf
    #在[mysqld]标签下添加如下内容
    [mysqld]
    rpl_semi_sync_slave_enabled =1
    

    3)额外参数

    rpl_semi_sync_master_timeout=milliseconds
    设置此参数值(ms),为了防止半同步复制在没有收到确认的情况下发生堵塞,如果Master在超时之前没有收到任何确认,将恢复到正常的异步复制,
    并继续执行没有半同步的复制操作。
    
    rpl_semi_sync_master_wait_no_slave={ON|OFF}
    如果一个事务被提交,但Master没有任何Slave的连接,这时不可能将事务发送到其它地方保护起来。默认情况下,Master会在时间限制范围内继续等待Slave的连接,
    并确认该事务已经被正确的写到磁盘上。
    可以使用此参数选项关闭这种行为,在这种情况下,如果没有Slave连接,Master就会恢复到异步复制。
    
  • 相关阅读:
    Eclipse / android studio 添加第三方jar包 步骤
    Android checkbox 自定义点击效果
    Android 程序打包和安装过程
    Android 基础
    (转)Genymotion安装virtual device的“unable to create virtual device, Server returned Http status code 0”的解决方法
    (转)eclipse 导入Android 项目 步骤
    微信开放平台注册 步骤
    Android Studio 初级安装
    数组
    作用域问题代码
  • 原文地址:https://www.cnblogs.com/tcy1/p/13378004.html
Copyright © 2020-2023  润新知