• MySql ocp认证之主从复制(六)-如何解决复制延迟的问题


    1、修改sync_binlog的参数的值

    想要合理设置此参数的值必须要清楚地知道binlog的写盘的流程:
    在这里插入图片描述

    在这里插入图片描述

    可以看到,每个线程有自己的binlog cache,但是共用同一份binlog。

    图中的write,指的就是把日志写入到文件系统的page cache,并没有把数据持久化到磁盘,所以速度快

    图中的fsync,才是将数据持久化到磁盘的操作。一般情况下,我们认为fsync才占用磁盘的IOPS

    而write和fsync的时机就是由参数sync_binlog来进行控制的。

    1、当sync_binlog=0的时候,表示每次提交事务都只write,不fsync

    2、当sync_binlog=1的时候,表示每次提交事务都执行fsync

    3、当sync_binlog=N的时候,表示每次提交事务都write,但积累N个事务后才fsync。

    一般在公司的大部分应用场景中,我们建议将此参数的值设置为1,因为这样的话能够保证数据的安全性,但是如果出现主从复制的延迟问题,可以考虑将此值设置为100~1000中的某个数值,非常不建议设置为0,因为设置为0的时候没有办法控制丢失日志的数据量,但是如果是对安全性要求比较高的业务系统,这个参数产生的意义就不是那么大了。

    2、直接禁用salve上的binlog,当从库的数据在做同步的时候,有可能从库的binlog也会进行记录,此时的话肯定也会消耗io的资源,因此可以考虑将其关闭,但是需要注意,如果你搭建的集群是级联的模式的话,那么此时的binlog也会发送到另外一台从库里方便进行数据同步,此时的话,这个配置项也不会起到太大的作用。

    3、设置innodb_flush_log_at_trx_commit 属性,这个属性在我讲日志的时候讲过,用来表示每一次的事务提交是否需要把日志都写入磁盘,这是很浪费时间的,一共有三个属性值,分别是0(每次写到服务缓存,一秒钟刷写一次),1(每次事务提交都刷写一次磁盘),2(每次写到os缓存,一秒钟刷写一次),一般情况下我们推荐设置成2,这样就算mysql的服务宕机了,卸载os缓存中的数据也会进行持久化。

  • 相关阅读:
    MBA提面是否会演变为一种“选富游戏”?简析收入和提面的关系。
    用于肺结节分类的常规 EHR 的纵向多模态Transformer集成成像和潜在临床特征
    【微信小程序】页面事件
    物联网的未来:连接的智能世界
    用于光波导系统的均匀性探测器
    从智能手机到智能机器人:小米品牌的高端化之路
    JSR303和拦截器
    QT信号和槽机制实现及源码阅读
    vscode通过remotessh结合xdebug远程调试php解决方案
    FPGA project :dds
  • 原文地址:https://blog.csdn.net/mbshqqb/article/details/126679722