zoukankan      html  css  js  c++  java
  • mysql 主从相关

    主从复制延时原因

    Master负载过高、Slave负载过高、网络延迟、机器性能太低、MySQL配置不合理,大事务导致的延迟,slave中有大型query语句产生了锁等待
    关于大事务:binlog的写入时机是在commit的时候,redo的写入时机是在事务执行阶段就开始,MySQL是基于binlog复制的,如果有一个非常大的事务,如果需要1个小时,那么master在1小时候后才会生成binlog,而此时,slave就比master慢了至少1个小时,还不算是binlog传输时间

    主从同步延时查询方法

    show slave status 命令输出的Seconds_Behind_Master参数的值来判断:
    NULL,表示io_thread或是sql_thread有任何一个发生故障;
    0, 该值为零,表示主从复制良好;
    正值,表示主从已经出现延时,数字越大表示从库延迟越严重

    数据丢失隐患解决

    从MySQL5.5开始,MySQL已经支持半同步复制了,半同步复制介于异步复制和同步复制之间半同步复制,也叫 semi-sync 复制,指的就是主库写入 binlog 日志之后,就会将强制此时立即将数据同步到从库,从库将日志写入自己本地的 relay log 之后,接着会返回一个 ack 给主库,主库接收到至少一个从库的 ack 之后才会认为写操作完成了。

    同步延时解决(show status:Seconds_Behind_Master)

    1.硬件层面:硬盘采用SSD替代sata,主从要在一个交换机下并且保证带宽
    2.从文件系统本身进行优化:可以通过设置文件系统的mount属性,阻止操作系统写atime信息。
    3.加入memcache或者redis的cache层,特殊业务查询时候优先从缓存中进行查询,降低从库数据库服务的压力。
    4.并行复制,mysql 5.7.19 + 版本支持并行复制,指的是从库开启多个线程,并行读取 relay log 中不同库的日志,然后并行重放不同库的日志,这是库级别的并行。如果说某个库的写入并发就是特别高,单库写并发达到了 2000/s,并行复制还是没意义。
    5.直接禁用slave端的binlog
    6.slave端,如果使用的存储引擎是innodb,innodb_flush_log_at_trx_commit =2
    7.分库,将一个主库拆分为多个主库,每个主库的写并发就减少了几倍,此时主从延迟可以忽略不计。
    8.如果说大事务对于binlog的产生有极大的影响,那么我们认为定义小事务,大事务不允许执行,有大事务的监控,可以基于时间,可以基于数据量,监控到不符合规范的trx自动kill

  • 相关阅读:
    Shell bash脚本查询Mysql并简单处理查询结果
    Caused by: java.lang.ClassNotFoundException: org.apache.flink.streaming.api.scala.StreamExecutionEnv
    Flink的部署方式
    Flink线上环境搭建
    数仓及数据治理相关
    Hive动态分区详解及注意的问题
    lateral view explode行转列的简单使用
    MachineLearning
    Linux 查看CPU信息,机器型号,内存等信息
    redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: connect time out
  • 原文地址:https://www.cnblogs.com/fanggege/p/13195698.html
Copyright © 2011-2022 走看看