• 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就会恢复到异步复制。
    
  • 相关阅读:
    尽可能装满的背包问题
    mysql的下载与安装
    IDEA中安装ibatis插件
    tomcat启动失败,提示信息:Unable to ping server at localhost:1099
    http响应头
    查看电脑的IP地址及配置
    IDEA中不同项目配置不同JDK
    Navicat for mysql的下载及破解
    java中String的equals()和 ==
    BeanUtils出现Java.lang.NoClassDefFoundError解决
  • 原文地址:https://www.cnblogs.com/tcy1/p/13378004.html
Copyright © 2020-2023  润新知