mysql从盘延迟_Mysql-主从延迟解决方法

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

197860a1f0bff84865efa5419617ddcd.png

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

441c4f184ea7ab13386d6f3eef40d037.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/527787.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php程序访问mysql数据实现查询_PHP+MySql实现后台数据的读取

我们使用的是PHP的php_mysqli扩展首先了解一些基础的用法1.连接数据库使用mysqli_connect()参数:①主机地址 ②MYSQL用户名 ③MYSQL密码 ④选择连接的数据库 ⑤端口号返回:如果连接成功返回资源类型的标识符号,如果失败返回false如果我们与My…

idea测试连接mysql报错08001_IDEA连接MySQL(版本8)数据库失败的解决方法(报错08001)...

在IDEA自带的数据库连接工具中,可以连接MySQL数据库,但是有的时候连接出现08001错误,连接不上数据库。1、一般配置如下所示Database处填写数据库名字;User处填写mysql设置好的用户名;密码同理填写设置好的;…

mysql存儲過程_Mysql存儲過程 | 學步園

一.創建存儲過程在創建存儲過程之前,首先要了解delimiter 分界符,默認sql 語句分界符是 ; 分號,但為了寫較長的存儲過程,需要將默認分割符修改掉,建議修改為 //,如此之後,sql 語句必須使用// 才算是一段完整…

mysql乐观锁重试_乐观锁加重试,并发更新数据库一条记录导致:Lock wait timeout exceeded...

背景:mysql数据库,用户余额表有一个version(版本号)字段,作为乐观锁。更新方法有事务控制:Transactional(rollbackFor Exception.class)更新时,比对版本号,如果版本号不一致,则更新失败。有重试…

mysql集群需要几个ip_rac集群3组机器,scan到底需要几个IP?

这是scan ip的解析, scan ip 最多可以设置3个,最少是一个,不管有几个nodehttp://docs.oracle.com/cd/E11882 ... ncepts.htm#BABHEIBDD.1.3.5 About the SCANOracle Database 11g release 2 clients connect to the database using SCANs. Th…

信息管理系统 github_Java+MySQL实现学生信息管理系统

基于Java swingMySQL实现学生信息管理系统:主要实现JDBC对学生信息进行增删改查,应付一般课设足矣,分享给大家。源码:https://github.com/ZhuangM/student.git1、 开发环境:jdk7MySQL5win7代码结构:model-d…

smith标准型_线性系统理论(八)多项式矩阵Smith-McMillan标准型计算方法

1 参考[1]Chenglin Li:线性系统理论(七)finite- and infinite-zeros​zhuanlan.zhihu.com多项式矩阵Smith-McMillan标准型确定方法分析2 单模矩阵法Chenglin Li:线性系统理论(七)finite- and infinite-zero…

Python学习笔记(二) 数据类型及相关函数

本文主要介绍了python中注释方法、变量定义规则、数据类型及相关函数的内容 注释 注释方法: “”“ ”“” ’’’ ‘’’ 解释器位置特殊注释: #!/usr/bin/python3 #coding:utf-8 指定编码格式 #--coding:utf8-- 变量名称定义规则 python变量名称…

mysql explain insert_简述Mysql Explain 命令

MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP)。这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL语句的。这条命令并没有提供任何调整建议,但它能够提供重要的信息帮助你做出调优决策。参考官方文档地址:为什么用explain . 如果你的页面返回结果很…

没有varselect这个函数_C++的虚函数,虚析构函数,纯虚函数

修改日期:2020/9/6C的虚函数C的虚函数的特点就是动态绑定,它的意思是动态绑定,在运行的时候,通过引用和指针,可以用基类的类,引用继承该c类的派生类,虽然指针是基类,但实际上运行的是…

mysql数据库初识实训总结_MySQL(数据库)的初识

1.什么是数据库数据库(Database)是按照数据结构来组织、存储和管理数据的仓库2.什么是MySQLMySQL 是最流行的关系型数据库管理系统,在WEB应用方面 MySQL 是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之一。3.关系数…

jdk1.8要安装什么mysql_Window下安装JDK1.8+Tomcat9.0.27+Mysql5.7.28的教程图解

JDK1.8安装下载打开链接: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html.下拉选择不同jdk版本,图示为window系统下载提示需登录账号可查看这个帖子Oracle账号.安装双击下载的安装包,按提示走就可以安装完成之后…

mysql 实例启动利用binlog恢复_mysql利用binlog进行数据恢复

mysql利用binlog进行数据恢复最近线上误操作了一个数据,由于是直接修改的数据库,所有唯一的恢复方式就在mysql的binlog。binlog使用的是ROW模式,即受影响的每条记录都会生成一个sql。同时利用了binlog基本配置和格式binlog基本配置binlog需要…

php mysql bootstart_PHP MySQL 创建数据库

PHP MySQL 创建数据库数据库存有一个或多个表。你需要 CREATE 权限来创建或删除 MySQL 数据库。使用 MySQLi 和 PDO 创建 MySQL 数据库CREATE DATABASE 语句用于在 MySQL 中创建数据库。在下面的实例中,创建了一个名为 "myDB" 的数据库:实例 (…

.net mysql 类库_(精华)2020年6月27日 C#类库 MySqlHelper(Ado.net数据库封装)

using EFCore.Sharding;using MySql.Data.MySqlClient;using System;using System.Collections.Generic;using System.Data.Common;namespace Core.Util{////// MySql数据库操作帮助类///public class MySqlHelper : DbHelper{#region 构造函数////// 构造函数////// 完整连接字…

ironpython console怎么用_如何在表單中插入ironpython控制台?

I want to make a winform by C#, and add a ironpython console window in it, like a multiline textbox. So I can write python program into it to do some operations in my Winform software.我想通過C#進行winform,並在其中添加一個ironpython控…

mysql修改客户端编码命令_mysql命令行修改字符编码

1、修改数据库字符编码mysql> alter database mydb character set utf8 ;2、创建数据库时,指定数据库的字符编码mysql> create database mydb character set utf8 ;3、查看mysql数据库的字符编码mysql> show variables like character%; //查询当前mysql数…

mysql 查看运行级别_运行级别及进程

/etc/rc.d/rc.sysinit由init进程调用执行完成设置网络、主机名、加载文件系统等初始化工作/etc/rc.d/rc脚本文件由init进程调用执行根据指定的运行级别, 加载或终止相应的系统服务/etc/rc.local脚本文件由rc脚本调用执行保存用户定义的需开机后自动执行的命令默认的7种运行级别…

中班机器人歌曲_机器人幼儿园大班音乐教案

机器人幼儿园大班音乐教案作为一名无私奉献的老师,有必要进行细致的教案准备工作,教案是教学活动的总的组织纲领和行动方案。那么问题来了,教案应该怎么写?以下是小编为大家收集的机器人幼儿园大班音乐教案,供大家参考…

java 主线程等待_Java实现主线程等待子线程

本文介绍两种主线程等待子线程的实现方式,以5个子线程来说明:1、使用Thread的join()方法,join()方法会阻塞主线程继续向下执行。2、使用Java.util.concurrent中的CountDownLatch,是一个倒数计数器。初始化时先设置一个倒数计数初始…