阅读MySQL知识4

news2024/11/16 5:30:52

一、MySQL数据库主从同步延迟产生的原因

    MySQL的主从复制都是单线程的操作,主库对所有DDL和DML产生的日志写进binlog,由于binlog是顺序写,所以效率很高。
    Slave的SQL Thread线程将主库的DDL和DML操作事件在slave中重放。DML和DDL的IO操作是随即的,不是顺序的,成本高很多。另一方面,由于SQL Thread也是单线程的,当主库的并发较高时,产生的DML数量超过slave的SQL Thread所能处理的速度,或者当slave中有大型query语句产生了锁等待那么延时就产生了。
常见原因:Master负载过高、Slave负载过高、网络延迟、机器性能太低、MySQL配置不合理。

二、关于DDL和DML

SQL语言共分为以下几大类:查询语言DQL,控制语言DCL,操纵语言DML,定义语言DDL。事务控制TCL

  • DQL(Data QUERY Languages)语句:即数据库定义语句,用来查询SELECT子句,FROM子句,WHERE子句组成的查询块,比如:select–from–where–grouop by–having–order by–limit

  • DDL(Data Definition Languages)语句:即数据库定义语句,用来创建数据库中的表、索引、视图、存储过程、触发器等,常用的语句关键字有:CREATE,ALTER,DROP,TRUNCATE,COMMENT,RENAME。增删改表的结构

  • DML(Data Manipulation Language)语句:即数据操纵语句,用来查询、添加、更新、删除等,常用的语句关键字有:SELECT,INSERT,UPDATE,DELETE,MERGE,CALL,EXPLAIN PLAN,LOCK TABLE,包括通用性的增删改查。增删改表的数据

  • DCL(Data Control Language)语句:即数据控制语句,用于授权/撤销数据库及其字段的权限(DCL is short name of Data Control Language which includes commands such as GRANT and mostly concerned with rights, permissions and other controls of the database system.)。常用的语句关键字有:GRANT,REVOKE。

  • TCL(Transaction Control Language)语句:事务控制语句,用于控制事务,常用的语句关键字有:COMMIT,ROLLBACK,SAVEPOINT,SET TRANSACTION。

三、主从延时排查方法

通过监控 show slave status 命令输出的Seconds_Behind_Master参数的值来判断:

  • NULL,表示io_thread或是sql_thread有任何一个发生故障;

  • 0,该值为零,表示主从复制良好;

  • 正值,表示主从已经出现延时,数字越大表示从库延迟越严重

四、解决方案

解决数据丢失的问题:

  • 半同步复制

    从MySQL5.5开始,MySQL已经支持半同步复制了,半同步复制介于异步复制和同步复制之间,主库在执行完事务后不立刻返回结果给客户端,需要等待至少一个从库接收到并写到relay log中才返回结果给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一个TCP/IP往返耗时的延迟。

  • 主库配置sync_binlog=1,innodb_flush_log_at_trx_commit=1 sync_binlog的默认值是0,MySQL不会将binlog同步到磁盘,其值表示每写多少binlog同步一次磁盘。

    innodb_flush_log_at_trx_commit为1表示每一次事务提交或事务外的指令都需要把日志flush到磁盘。

    注意:将以上两个值同时设置为1时,写入性能会受到一定限制,只有对数据安全性要求很高的场景才建议使用,比如涉及到钱的订单支付业务,而且系统I/O能力必须可以支撑!

4.1 解决从库复制延迟的问题:

  • 架构方面

    1. 业务的持久化层的实现采用分库架构,mysql服务可平行扩展,分散压力。

    2. 单个库读写分离,一主多从,主写从读,分散压力。这样从库压力比主库高,保护主库。

    3. 服务的基础架构在业务和mysql之间加入memcache或者redis的cache层。降低mysql的读压力。

    4. 不同业务的mysql物理上放在不同机器,分散压力。

    5. 使用比主库更好的硬件设备作为slave,mysql压力小,延迟自然会变小。

  • 硬件方面

    1. 采用好服务器,比如4u比2u性能明显好,2u比1u性能明显好。

    2. 存储用ssd或者盘阵或者san,提升随机写的性能。

    3. 主从间保证处在同一个交换机下面,并且是万兆环境。

总结,硬件强劲,延迟自然会变小。一句话,缩小延迟的解决方案就是花钱和花时间。

  • mysql主从同步加速

    1. sync_binlog在slave端设置为0

    2. –logs-slave-updates 从服务器从主服务器接收到的更新不记入它的二进制日志。

    3. 直接禁用slave端的binlog

    4. .slave端,如果使用的存储引擎是innodb,innodb_flush_log_at_trx_commit =2

  • 从文件系统本身属性角度优化

    master端修改linux、Unix文件系统中文件的etime属性, 由于每当读文件时OS都会将读取操作发生的时间回写到磁盘上,对于读操作频繁的数据库文件来说这是没必要的,只会增加磁盘系统的负担影响I/O性能。可以通过设置文件系统的mount属性,组织操作系统写atime信息,在linux上的操作为:打开/etc/fstab,加上noatime参数/dev/sdb1 /data reiserfs noatime 1 2然后重新mount文件系统#mount -oremount /data

  • 同步参数调整主库是写,对数据安全性较高,比如sync_binlog=1,

    innodb_flush_log_at_trx_commit = 1 之类的设置是需要的而slave则不需要这么高的数据安全,完全可以讲sync_binlog设置为0或者关闭binlog,innodb_flushlog也可以设置为0来提高sql的执行效率

4.2 MySql数据库从库同步其他问题及解决方案

  • mysql主从复制存在的问题:

    • 主库宕机后,数据可能丢失

    • 从库只有一个sql Thread,主库写压力大,复制很可能延时

  • 解决方法:

    • 半同步复制—解决数据丢失的问题

    • 并行复制----解决从库复制延迟的问题

  • 半同步复制mysql semi-sync(半同步复制)半同步复制:

    • 5.5集成到mysql,以插件的形式存在,需要单独安装

    • 确保事务提交后binlog至少传输到一个从库

    • 不保证从库应用完这个事务的binlog

    • 性能有一定的降低,响应时间会更长

    • 网络异常或从库宕机,卡主主库,直到超时或从库恢复

  • 主从复制–异步复制原理、半同步复制和并行复制原理比较

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

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

相关文章

CCDP.02.OS正确部署后的Dashboard摘图说明

前言 在部署成功OpenStack后,应该可以在浏览器打开Dashboard,并对计算资源(这里主要是指VM)进行管理,也可以在Dashboard上面查看OpenStack是否存在错误,下面,已针对检查的关键点,用红…

JavaScript原型、原型对象、原型链系列详解(一)

(一)、JavaScript原型 原型 JavaScript 是一门面向对象的编程语言,其中原型(prototype)是一个重要的概念,它提供了一种创建对象的方式,使对象可以共享属性和方法。在 JavaScript 中,每个对象都有一个原型&a…

ruoyi-nbcio-plus基于vue3的flowable增加开始节点的表单绑定修改

更多ruoyi-nbcio功能请看演示系统 gitee源代码地址 前后端代码: https://gitee.com/nbacheng/ruoyi-nbcio 演示地址:RuoYi-Nbcio后台管理系统 http://122.227.135.243:9666/ 更多nbcio-boot功能请看演示系统 gitee源代码地址 后端代码&#xff1a…

在Linux上运行JMeter(非界面)

参考: 查看文件类型:https://www.linuxprobe.com/files-tehre-fangfa.html 华为云平台 配置:jdk环境、jmeter环境 jmeter配置(在/etc/profile文件中): export JMETER_HOME/path/to/jmeter/installati…

基于FPGA的FFT图像滤波设计

1.FFT滤波算法介绍 FFT滤波就是通过傅里叶运算将图像转换到频域空间,然后在频域中对图像进行处理,最后将处理后的图像通过傅里叶逆运算将图像转会到时域空间。 在频域空间中,我们能够更好的对图像的噪声进行分析,然后找出相关规律…

Selenium不同版本配置自动下载驱动及打包细节

Selenium配置浏览器驱动 自动下载浏览器驱动的方法 selenium4.7.0自动下载浏览器驱动的方法 selenium4.11.0 或4.11.1手动设置浏览器驱动路径的方法pyinstaller打包程序时同时打包ChromeDriverchromedriver路径需要sys._MEIPASS的路径进行引用方法一:通过–add-data…

Ubuntu18.04显示--有线连接未托管

引用: Ubuntu18.04连不网 报"有线连接未托管"_ubuntu20.04以太网未托管-CSDN博客 正文 虚拟机环境配置: VirtaualBox Ubuntu18.04桌面版 问题现象: Ubuntu18.04虚拟机的桌面上提示“有线连接未托管”,虚拟机不能上网&#xf…

云手机在运营社媒方面对比真机有何优势

云手机作为一种虚拟手机环境,通过云端技术实现了将多个手机系统运行在同一台设备上的功能。在运营社交媒体方面,与传统的真机相比,云手机 具有一系列独特的优势,本文将从多个方面进行对比分析。 1、安全性 云手机提供了更高级别的…

一个不会绘画的我遇到AI绘画的时代

AI 绘画的时代 我是没有艺术细胞的,这点我从很小就切实的感受到了,我不会画画,不会唱歌,我便是艺术的荒漠。童年是那么的梦幻,那么的值得渴望,谁不想亲自用自己的画笔来描绘记忆中的过去那?没错…

手机网页视频批量提取工具可导出视频分享链接|爬虫采集下载软件

解放你的抖音视频管理——全新抖音批量下载工具震撼上线! 在这个信息爆炸的时代,如何高效地获取、管理和分享视频内容成为了许多用户的迫切需求。为了解决这一难题,我们研发了全新的视频批量下载工具,让你轻松畅享海量音视频资源。…

PAT题解 --- 寻宝图

今天是PTA题库解法讲解的第十天,今天我们要讲解浪漫侧影,题目如下: 题解思路: 要解决这个问题,可以使用深度优先搜索(DFS)方法来遍历每一个陆地或宝藏格子,标记所有与之相连的格子…

数据降维 | Matlab实现POD本征正交分解数据降维模型

数据降维 | Matlab实现POD本征正交分解数据降维模型 目录 数据降维 | Matlab实现POD本征正交分解数据降维模型基本介绍模型描述程序设计基本介绍 1.Matlab实现POD本征正交分解数据降维模型(完整源码和数据); 2.运行环境matlab2023; 3.POD降维,POD分解(Proper Orthogonal D…

计算机二级Python基础操作题

题目来源:计算机二级Python半个月抱佛脚大法(内呈上真题版) - 知乎 第4,5,6,7,9,10,11套 1. 基础题1 sinput() print("{:\"^30x}".format(eval(s))) b …

数据库被.[Goodmorningfriends@onionmail.org].faust勒索病毒加密,能恢复吗?

.faust勒索病毒有什么特点及危害? .faust勒索病毒是一种恶意软件,以其复杂的加密技术和勒索行为而闻名。这种病毒的主要目标是通过加密受害者的数据文件,然后勒索赎金以解密这些文件。它通常通过恶意附件、恶意链接或潜在的不安全下载源传播&…

云平台宿主机系统漂移分析

ntp时间同步机制 宿主机上ntp client每隔最小时间间隔64s,最大时间间隔1024s与ntpd server保持时间同步,当ntp client 与ntd server时间偏差为|+-10|s,立马纠正client ntp的时间与 ntp server保持一致。 宿主机时间异常判定 宿主机ntp client 并发去访问五个ntp servers…

letcode::根据二叉树创建字符串

根据二叉树创建字符串 题目描述: 给你二叉树的根节点 root ,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。 空节点使用一对空括号对 “()” 表示,转化后需要省略所有不影…

【JavaEE初阶系列】——带你了解volatile关键字以及wait()和notify()两方法背后的原理

目录 🚩volatile关键字 🎈volatile 不保证原子性 🎈synchronized 也能保证内存可见性 🎈Volatile与Synchronized比较 🚩wait和notify 🎈wait()方法 💻wait(参数)方法 🎈noti…

【Python + Django】静态文件的添加

前言: 前一篇文章我们已经学会了怎么用django写文本页面啦!!! 有一说一,这个静态页面是真的丑。 我们总得用一些花花绿绿的东西把这个丑陋的网站给装饰一下吧!!!!&…

java中异常类

异常 异常体系继承结构 Throwable类是 Java 语言中所有错误或异常的超类,只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw 语句抛出。     异常是对象,而对象都采用类来定义。异常的…

IDEA使用手册

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…