zoukankan      html  css  js  c++  java
  • Mysql5.6.x版本半同步主从复制的开启方法

    介绍

        先了解一下mysql的主从复制是什么回事,我们都知道,mysql主从复制是基于binlog的复制方式,而mysql默认的主从复制方式,其实是异步复制.

        主库实际上并不关心从库是否把数据拉完没有,也不关心从库有没有把数据写进硬盘入库,反正数据丢过去,让从库自己慢慢跑,而实际上这也并不影响主库任何使用的情况.

        细心的人就会发现,这种情况下,假如主库临时挂了,binlog还没传输完毕,即使是集群也不能保证说这挂了之后的数据一致性,因为你不能排除别人在主库是正常提交的,而从库没有数据的情况.

        然后在某个位面的时间上,就有人提出同步复制的概念,意思就是说,只要从库没写入,主库就不返回完成,这个时候即使主库挂了,这也只是一个未完成的事务,从库也不会记录,能保证数据一致性.

        看上去,数据一致性是解决了,但是呢,每个事务的延时就增大了,如果是大事务的话,就更惨,这得看网络带宽能不能顶得住,不然延时更低,性能更差.

        最后,在mysql5.5之后,半同步就提出来了,意思就是说,每个事务的复制,至少保证一个从库已经收到了binlog,主库才返回事务完成,但不需要理会从库是否写入硬盘.

        这样做虽然延时还是有,但是比起完全的同步方式还是好太多,对于数据一致性要求高的情况,牺牲性能来换取一定的价值,是在所难免的.

      

    大家留意上面的数字,

    第一部,客户端提交sql语句,

    第二部,提交给存储引擎解析并处理数据修改,

    第三部,事务在主库处理完毕,处于待完成状态,等待最终完成,

    第四部,同时提交给各从库,等待完成,

    第五部,从库返回状态给主库,标记已完成,半同步只需要一个从库返回就可以,其他会转成异步

    第六部,返回客户端,整个事务已完成.

    看上去还是比较不错,主从的数据一致性得到很大的提高,但是延时也不含糊,就是牺牲性能来提高一致性的问题了.

    不过我还是得负责任的讲句,在极端的情况下,还是可能会丢一些数据的,所以定期做主从数据校验还是有必要的,例如使用PT工具什么的,至于为什么,这个不仿让大家思考一下,而对于大事务来说,半同步也是比较无力的情况,性能损耗较大.

    安装使用

    下面来看看如何安装使用半同步,大部分mysql本身并没有预装半同步的组件,需要另外安装,但是一般mysql的包里面会自带so文件,所以只要手动加载一下就可以用了.

    安装使用

    下面来看看如何安装使用半同步,大部分mysql本身并没有预装半同步的组件,需要另外安装,但是一般mysql的包里面会自带so文件,所以只要手动加载一下就可以用了.

    #查找mysql插件目录位置

    mysql> show variables like 'plugin_dir';
    +---------------+---------------------------------+
    | Variable_name | Value                           |
    +---------------+---------------------------------+
    | plugin_dir    | /roobo/server/mysql/lib/plugin/ |
    +---------------+---------------------------------+
    1 row in set (0.00 sec)
    

     #查看文件

    [root@m2 ~]# cd /roobo/server/mysql/lib/plugin/ 
    
    [root@m2 plugin]# ll
    总用量 1048
    -rwxr-xr-x. 1 mysql mysql  16445 5月   8 2017 adt_null.so
    -rwxr-xr-x. 1 mysql mysql  25459 5月   8 2017 auth.so
    -rwxr-xr-x. 1 mysql mysql  12532 5月   8 2017 auth_socket.so
    -rwxr-xr-x. 1 mysql mysql  24544 5月   8 2017 auth_test_plugin.so
    -rw-r--r--. 1 mysql mysql    227 5月   8 2017 daemon_example.ini
    drwxr-xr-x. 2 mysql mysql   4096 5月   8 2017 debug
    -rwxr-xr-x. 1 mysql mysql  38715 5月   8 2017 libdaemon_example.so
    -rwxr-xr-x. 1 mysql mysql  17827 5月   8 2017 mypluglib.so
    -rwxr-xr-x. 1 mysql mysql  11865 5月   8 2017 mysql_no_login.so
    -rwxr-xr-x. 1 mysql mysql  18079 5月   8 2017 qa_auth_client.so
    -rwxr-xr-x. 1 mysql mysql  23862 5月   8 2017 qa_auth_interface.so
    -rwxr-xr-x. 1 mysql mysql  12934 5月   8 2017 qa_auth_server.so
    -rwxr-xr-x. 1 mysql mysql 414708 5月   8 2017 semisync_master.so  #有semisync开头的文件,就说明插件安装成功了。
    -rwxr-xr-x. 1 mysql mysql 247783 5月   8 2017 semisync_slave.so   #有semisync开头的文件,就说明插件安装成功了。
    -rwxr-xr-x. 1 mysql mysql 168184 5月 8 2017 validate_password.so

     #看到下面两个,就是半同步的组件了,一个是主库组件,一个是从库组件,你可以两个都装上或者只装一个.

    semisync_master.so
    semisync_slave.so
    

     #下面开始正式安装:

    #在主库上执行

    mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
    mysql> show plugins;
    #看到下面这个就证明成功了
    rpl_semi_sync_master | ACTIVE | REPLICATION | semisync_master.so | GPL
    

     #从库当然也要做

    #然后在从库执行
    mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
    mysql> show plugins;
    #看到下面这个就证明成功了
    rpl_semi_sync_slave  | ACTIVE | REPLICATION | semisync_slave.so  | GPL
    

    安装完了,就开始准备启动了,

    主库很简单,只要设置一下半同步启动就可以了.

    mysql> set global rpl_semi_sync_master_enabled = on;
    

    当然,你也可以写到配置文件,不过写到配置文件要重启才生效,而且还要重新加载组件,所以这就没意思了.

    然后到从库,slave要重启动IO线程来生效,否则还是异步的方式复制数据。

    mysql> set global rpl_semi_sync_slave_enabled = on;
    mysql> stop slave IO_THREAD;
    mysql> start slave IO_THREAD;
    

    同样你也能写到配置文件,我就不多说了,反正这就启动完毕了.

    下面来验证一下是否成功,以下是主库的信息,因为从库很多信息是没有的.

    来看看我们能设置些什么关于半同步的参数

    mysql> show variables like '%Rpl%';
    +------------------------+----------+
    | Variable_name          | Value    |
    +------------------------+----------+
    | rpl_stop_slave_timeout | 31536000 |
    +------------------------+----------+
    1 row in set (0.00 sec)
    

    更多详细情况参考:

    https://www.cnblogs.com/paul8339/p/8177683.html

    https://www.cnblogs.com/abobo/p/4242417.html  (备注:这个介绍的更详细)

    other:

    主从复制参考:

    http://www.cnblogs.com/agileai/p/6126823.html

  • 相关阅读:
    【2021-01-01】爱自己等于爱家人
    【2020-12-31】2020的收获与2021的挑战
    【2020-12-30】说别人辛苦,其实是自己辛苦
    【一句日历】2021年1月
    最大子序和
    判断子序列
    下载安装 ethereal
    6812. 【2020.10.05提高组模拟】战争
    6816. 【2020.10.06提高组模拟】随机的排列
    python 版本及pip安装相关
  • 原文地址:https://www.cnblogs.com/nulige/p/9243803.html
Copyright © 2011-2022 走看看