美文网首页
MySQL半同步复制

MySQL半同步复制

作者: 吃可爱长大鸭 | 来源:发表于2019-12-13 19:16 被阅读0次

    半同步复制

    从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;

    半同步复制开启方法

    [root@db03 data]# cd /application/mysql/lib/plugin
    
    image.png

    1)安装(主库)

    mysql> show global variables like 'have_dynamic_loading';
    +----------------------+-------+
    | Variable_name        | Value |
    +----------------------+-------+
    | have_dynamic_loading | YES   |
    +----------------------+-------+
    
    #主库安装插件
    INSTALL PLUGIN rpl_semi_sync_master SONAME'semisync_master.so';
    #主库启用插件
    SET GLOBAL rpl_semi_sync_master_enabled = 1;
    
    #检查安装
    mysql> show variables like'rpl%';
    +------------------------------------+----------+
    | Variable_name                      | Value    |
    +------------------------------------+----------+
    | rpl_semi_sync_master_enabled       | ON       |
    | rpl_semi_sync_master_timeout       | 1000     |
    | rpl_semi_sync_master_trace_level   | 32       |
    | rpl_semi_sync_master_wait_no_slave | ON       |
    | rpl_stop_slave_timeout             | 31536000 |
    +------------------------------------+----------+
    
    mysql> show global status like 'rpl_semi%';
    +--------------------------------------------+-------+
    | Variable_name                              | Value |
    +--------------------------------------------+-------+
    | Rpl_semi_sync_master_clients               | 0     |
    | Rpl_semi_sync_master_net_avg_wait_time     | 0     |
    | Rpl_semi_sync_master_net_wait_time         | 0     |
    | Rpl_semi_sync_master_net_waits             | 0     |
    | Rpl_semi_sync_master_no_times              | 1     |
    | Rpl_semi_sync_master_no_tx                 | 136   |
    | Rpl_semi_sync_master_status                | OFF   |
    | Rpl_semi_sync_master_timefunc_failures     | 0     |
    | Rpl_semi_sync_master_tx_avg_wait_time      | 0     |
    | Rpl_semi_sync_master_tx_wait_time          | 0     |
    | Rpl_semi_sync_master_tx_waits              | 0     |
    | Rpl_semi_sync_master_wait_pos_backtraverse | 0     |
    | Rpl_semi_sync_master_wait_sessions         | 0     |
    | Rpl_semi_sync_master_yes_tx                | 0     |
    +--------------------------------------------+-------+
    

    2)从库(操作)

    #从库上安装插件
    INSTALL PLUGIN rpl_semi_sync_slave SONAME'semisync_slave.so';
    
    #从库启动插件
    SET GLOBAL rpl_semi_sync_slave_enabled = 1;
    #重启IO线程
    mysql> stop slave io_thread;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> start slave io_thread;
    Query OK, 0 rows affected (0.01 sec)
    

    注:相关参数说明

    rpl_semi_sync_master_timeout=milliseconds
    设置此参数值(ms),为了防止半同步复制在没有收到确认的情况下发生堵塞,如果Master在超时之前没有收到任何确认,将恢复到正常的异步复制,并继续执行没有半同步的复制操作。
    
    rpl_semi_sync_master_wait_no_slave={ON|OFF}
    如果一个事务被提交,但Master没有任何Slave的连接,这时不可能将事务发送到其它地方保护起来。默认情况下,Master会在时间限制范围内继续等待Slave的连接,并确认该事务已经被正确的写到磁盘上。
    可以使用此参数选项关闭这种行为,在这种情况下,如果没有Slave连接,Master就会恢复到异步复制。
    

    相关文章

      网友评论

          本文标题:MySQL半同步复制

          本文链接:https://www.haomeiwen.com/subject/kpkqnctx.html