Mysql 的主从延迟 指的是 主库受写入 后 到这个写入能体现在 从库上 的这段时间

Mysql 的主从延迟 有两个原因:

1. 写操作 已经在 主库中执行了,但是 binlog 还没有发送出去, 后者还在路上,没有被 从库收到

2. 虽然 binlog 已经被 从库接收到了,但是仍然是以 relay log 存在,还没有被从库消化

对于消费之后要马上显示余额这种对数据一致性强的金融业务,无奈的办法是读和写都打到 主库上。这就需要拆库拆表,分散压力。

如果实时性不强,比如说评论,点赞之类的,可以先使用 前端的 Ajax 直接在用户的界面上 显示出对应的操作结果,不必读刚刚提交的评论或点赞,用户可能刷新界面,刷新界面才是真正的去读取

此时大概率写入的数据已经在从库中了(前提是机器工作正常)

要消除 1 的影响的话,就要在主从间采取类似 request - ack 方式的 问答式交互,类似于 HDFS 的 客户端和流水线的问答方式。但是 Mysql 只支持 一主一从

Mysql 5.5 的 semi-sync 支持这种功能。

要消除 2 的影响的话,可以让从库等待 seconds_behind_master = 0 , 表示消耗完主库发来的 binlog,但是只能精确到秒级,真正地要精确到语句的话,要等待本库消耗的位点等待

也就是不用 GTID 的情况下,要保证执行完的 binlog 的位点 要达到 收到的 binlog 的位点

如果是采用GTID 的情况下,要保证执行完的  binlog 的 GTID 的集合 要 到达收到的 GTID 集合

但是,上面两种消除,都是不必要的,因为都是在等待主从的整个状态 完全一致,追求的是 主从数据库之间完全没有延迟,可能我们写入 A ,想读取 A, 只用A 同步到 从库就行了。

但是如果 后来 写库上又有写语句,并且不能及时同步到从库。那么根据上面的消除策略,就一直读不到 A ,即使 A 已经在从库上了。

于是我们想要 得到 写入的 A 在日志中的位点,或者 GTID 。

要去从库读取 A 的时候,可以等待 A 同步到 从库再开始读,Mysql 官方给出了对应的两种实现:两种原理都差不多

1.不使用 GTID :

先在主库上使用 show master status 得到写入A后 ,主库的最新 binlog 的位点

然后在从库上使用 select master_pos_wait(File, Position, 1); 表示等待 binlog 文件 File , 并且等待这个 binlog 文件的 Position 位点 同步到从库,1表示超时时间

2.使用 GTID:

获得 A 对应的 GTID 有两种方式,一种和上面一样,使用 show master status。二是使用官方的 API ,具体是 C 实现,对于 Java 可以用 JNI 嵌入到 JVM 中去,官方的 API 允许执行后直接返回 这条语句对应 的 GTID。

然后在从库上使用 select wait_for_executed_gtid_set(gtid1, 1);表示等待 gtid1 同步到 从库,超时时间1 秒

有时候 JDBC 的数据库链接长时间不用之后 会断开,是因为两个过期参数:

interactive_timeout,wait_timeout

这两个参数 都是控制 数据库客户端 和 数据库 不交互多久之后 断开连接

只不过前一个是 在指定了 对应的参数的时候才用的。一般使用 后面的?需要试验证实

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_interactive_timeout

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_wait_timeout

mysql从盘延迟_Mysql-主从延迟解决方法相关推荐

  1. redis mysql主从延迟_MySQL主从延迟问题解决

    今天我们就来看看为什么会产生主从延迟以及主从延迟如何处理等相关问题. 坐好了,准备发车! 主从常见架构 随着日益增长的访问量,单台数据库的应接能力已经捉襟见肘.因此采用主库写数据,从库读数据这种将读写 ...

  2. c++ mysql 写库 乱码 ??_mysql c++ 乱码 解决方法

    C++ 读写Mysql 数据库时,总是乱码, 数据库编码为  UTF8, C++客户端如果设为UTF8时,就是乱码,但C++客户端如果设为GB2312时,就没问题了. 原因再研究,如果有哪位大拿知道原 ...

  3. mysql主从延时这么长_MySQL主从延迟问题解决

    今天我们就来看看为什么会产生主从延迟以及主从延迟如何处理等相关问题. 坐好了,准备发车! 主从常见架构 随着日益增长的访问量,单台数据库的应接能力已经捉襟见肘.因此采用主库写数据,从库读数据这种将读写 ...

  4. Word打字延迟卡顿的解决方法

    Word打字延迟卡顿的解决方法 最近不知道什么问题,word打字输入和删除经常延迟,写实验报告特搞心态,网上的方法也是五花八门,然后so lucky我找到了一种很快捷的方法,记录一下: 打开" ...

  5. mysql主从复制及主机宕机的解决方法

    mysql主从复制及主机宕机的解决方法 文章目录 mysql主从复制及主机宕机的解决方法 概念 为什么需要主从复制 主从复制原理 主从搭建 删除mysql 开始搭建 Mysql主机宕机的解决方法 本篇 ...

  6. mysql 备份命令行_mysql命令行备份方法

    一.mysql备份 1.备份命令 格式:mysqldump -h主机IP -P端口 -u用户名 -p密码 --database 数据库名 > 文件名.sql # 本地备份可以不添加端口和主机IP ...

  7. net start mysql启动mysql,提示发生系统错误 5 拒绝访问 解决方法

    net start mysql启动mysql,提示发生系统错误 5 拒绝访问 解决方法 参考文章: (1)net start mysql启动mysql,提示发生系统错误 5 拒绝访问 解决方法 (2) ...

  8. 使用Navicat连接MySQL时出现2059报错的解决方法

    使用Navicat连接MySQL时出现2059报错的解决方法 参考文章: (1)使用Navicat连接MySQL时出现2059报错的解决方法 (2)https://www.cnblogs.com/ir ...

  9. 关于MySQL连接Navicat Premium 12失败的解决方法

    关于MySQL连接Navicat Premium 12失败的解决方法 参考文章: (1)关于MySQL连接Navicat Premium 12失败的解决方法 (2)https://www.cnblog ...

  10. Mysql 数据库锁表的原因和解决方法

    Mysql 数据库锁表的原因和解决方法 参考文章: (1)Mysql 数据库锁表的原因和解决方法 (2)https://www.cnblogs.com/xinruyi/p/11108795.html ...

最新文章

  1. 浅析java内存管理机制
  2. TabHost选项卡的实现(一):使用TabActivity实现
  3. python文件数据总和计算_python 计算文件夹里所有内容的大小总和
  4. No result defined for action action.LoginAction and result success 问题解决
  5. linux 命令后面的参数小叙
  6. android unbound prefix
  7. 索引与其内部数据结构
  8. ctf php文件上传图片格式,CTF-WEB:文件上传
  9. Matlab数据可视化编程总结
  10. java如何开根号?
  11. 保证接口数据安全的10种方案
  12. pycharm2019版本去掉下划线的方法
  13. 只有程序猿才知道的12个人艰不拆的真相
  14. Linux系统分区管理与swap分区
  15. 整数幂C语言1005,zzuli1005: 整数幂 - 菜鸟头头
  16. ADB命令行卸载或删除你的Android设备中的应用
  17. Nginx的作用是什么?有什么用?
  18. 交换机路由器网关配置的基本命令代码 Cisco思科
  19. 华为云AI随笔(8)
  20. Linux环境中对海康威视工业相机SDK进行二次开发(QT+CMake+Opencv+海康SDK)

热门文章

  1. 高并发下Java多线程编程基础
  2. Redis 突然变慢了如何排查并解决?
  3. 微软云打印将直接与 OneDrive 集成;全球 90 多家组织敦促苹果放弃引入”儿童安全”功能计划……...
  4. 独家对话谢宝友:做一款类似于 Linux 的国产操作系统 | 人物志
  5. 大咖说中台 | 建设数据中台系列(五)——中台架构详解(下)
  6. 借助大数据进行社交媒体营销,企业们得这么玩!
  7. 2017 JavaScript 调查报告概述
  8. 预登录握手失败_英雄联盟手游登录问题汇总
  9. ElasticSearch 动态映射与静态映射_08
  10. linux 环境 RocketMQ 4.8.0 安装、部署控制台