Mysql总结1

news2025/1/10 23:45:39

Mysql常见日志

(1)错误日志:记录数据库服务器启动、停止、运行时存在的问题;

(2)慢查询日志:记录查询时间超过long_query_time的sql语句,其中long_query_time可配置,且慢查询日志默认关闭;

(3)一般查询日志:记录数据库的连接信息以及所有的sql语句;

(4)二进制日志:即bin log,记录所有修改数据库状态的sql语句及这些sql语句的执行时间,修改数据库的语句包含了insert、delete、update等操作,该日志属于逻辑日志,会记录MyISAM、InnoDB引擎数据库的所有修改操作,以便进行数据恢复和主从复制,该日志仅在事务提交前提交,仅写磁盘一次。对于该日志的写入,是通过追加的方式进行的,不会覆盖已有的内容。

当数据发生丢失后,该日志可将数据库恢复到特定的时间点;主服务器上的二进制日志可以被从服务器读取,从而实现数据同步。该日志包含了二进制索引文件和二进制日志文件两部分;

(5)重做日志:即redo log,记录了每个对InnoDB表的写操作,记录的是数据页的物理变化,用来实现事务的持久性。该日志包含了重做日志缓存、重做日志文件两部分,前者在内存中,后者在磁盘中,当事务提交后会把所有修改信息存储到重做日志文件中,写入时使用循环写入和擦除的方式进行;

(6)回滚日志:即undo log,用于记录数据被修改前的信息,用于事务回滚,实现事务的原子性和持久性,也是实现MVCC多版本并发控制的关键部分,属于逻辑日志。

当delete一条记录时,undo log中会记录一条对应的insert记录,回滚时插入这一条被删除的数据,反之亦然;当update一条记录时,它记录一条对应相反的update记录,回滚时修改回去。当执行rollback时,就可以从undo log中的逻辑记录读取到相应的内容并进行回滚。

MVCC

MVCC是多版本并发控制,指维护一个数据库的多个版本,使得读写没有冲突,解决数据的并发问题。在支持MVCC的数据库中,当多个用户访问数据时,每个用户都能看到某个时间点前的数据库快照,并能够无阻塞、无干扰地执行查询和修改操作,MVCC主要通过版本链和ReadView机制实现的。

对于版本链,通过隐藏字段实现的。每一行数据都有3个隐藏字段:

(1)DB_TRX_ID:保存创建这个版本的事务ID,即最后一项修改该记录或插入该记录最新版本的事务ID;

(2)DB_ROLL_PTR:回滚指针,指向这条记录的上一个版本,用于配合undo log;

(3)DB_ROW_ID:隐藏主键,如果表结构没有指定主键,将会生成该隐藏字段。

在undo log日志中,存在一个版本链,存储数据的旧版本,当更新一行数据时,不会覆盖原数据,而是产生一个新版本的数据,并更新DB_TRX_ID、DB_ROLL_PTR插入到版本链中,使得其指向前一个版本的数据,这样可通过版本链找到旧版本的数据,逻辑图如下:

ReadView读视图机制用于确定事务的哪些版本的行记录是可见的,解决一致性读问题。当事务创建时,会为事务创建一个ReadView记录,其中包含4个信息:

(1)creator_trx_id:创建ReadView的事务id;

(2)m_ids:活跃的事务id集合,指的是开始但未提交的事务;

(3)min_trx_id:活跃事务中最小的事务id,即m_ids中最小的事务id;

(4)max_trx_id:事务ID的最大值加1,即即将创建的事务id。

当一个事务读某条数据时,根据ReadView判断数据的某个版本是否可见:

(1)若被访问数据的DB_TRX_ID的值小于min_trx_id,则该数据对当前事务可见,因为该版本数据已被提交;

(2)若被访问数据的DB_TRX_ID的值大于max_trx_id,则该数据对当前事务不可见,创建该数据版本的事务在生成ReadView后开始执行的,尚未提交;

(3)DB_TRX_ID在min_trx_id与max_trx_id之间时,若m_ids中未包含DB_TRX_ID,则该版本数据对当前事务可见,因为该数据版本的事务在生成ReadView后已提交;若包含DB_TRX_ID,则该版本数据对当前事务不可见,因为该数据版本的事务仍处于活跃状态,或在当前事务生成 ReadView后开始。

对于可重复读和读已提交,生成ReadView有以下区别:

对于可重复读,在第一次读取数据时生成一个ReadView,ReadView一直保持到事务结束不发生变化,这样可以保证在事务中多次读取同一行数据时,读取到的数据是一致的。

对于读已提交,每次读取数据前都生成一个 ReadView,这样就能保证每次读取的数据都是最新的。

主从复制

是一种数据同步机制,将数据从一个主数据库复制到多个从数据库,广泛用于数据恢复、灾难恢复。

主从复制分为以下几步:

(1)在主数据库中,执行数据库修改操作时(Insert、Updata、Delete等),将这些操作语句写入到bin log(二进制日志),在这些操作完成后,主数据库的log dump线程将二进制日志中的内容发送给从数据库;

(2)从数据库接收到二进制日志的内容后,通过IO线程将其写到从数据库的中继日志中(relay log);

(3)从数据库中的sql线程读取中继日志,并在本地数据库中执行读取到的sql语句,从而改变从数据库中的数据,完成同步。

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

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

相关文章

docker所在磁盘空间不足 迁移数据

1.查看原始目录docker info | grep "Docker Root Dir" 一般在/var/lib/docker 2.停止docker service docekr stop 3.移动数据 注意 移动前不要创建docker目录! mv /var/lib/docker /home/docker 4.进入目录查看是否与原始目录相同,确认一…

精准键位提示,键盘盲打轻松入门

在说明精准键位提示之前,我们先来看一张图: 这是一张标准的基准键位图,也就是打字时我们双手的8个手指放在基准键位上,在打不同的字母时,我们的手指以基准键位为中心,或上、或下、或左、或右,在…

全域运营是本地生活的下半场?新的创业风口来了?

随着全域概念的兴起,全域运营赛道也逐渐进入人们的视野之中,甚至有业内人士预测,全域运营将会是本地生活下半场的大趋势。 之所以这么说,是因为全域运营作为包含了公域和私域内所有运营业务的新模式,不仅能同时做所有本…

楼道堆积物视觉识别监控系统

楼道堆积物视觉识别监控系统采用了AI神经网络和深度学习算法,楼道堆积物视觉识别监控系统通过摄像头实时监测楼道的情况,通过图像处理、物体识别和目标跟踪算法,系统能够精确地识别楼道通道是否被堆积物阻塞。楼道堆积物视觉识别监控系统检测…

RA-RISK ANALYSIS

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、咨询 一、期刊简介 Risk Analysis代表风险分析学会出版,在ISI期刊引文报告中的社会科学、数学方法类别中排名前10位,为风险分析领域的新发展提供了焦点。这本国际同行评审期刊致力于发表…

面试准备【面试准备】

面试准备【面试准备】 前言面试准备自我介绍:项目介绍: 论坛项目功能总结数据库表设计注册功能登录功能显示登录信息功能发布帖子评论私信点赞功能关注功能通知搜索网站数据统计热帖排行缓存 论坛项目技术总结Http的无状态cookie和session的区别为什么要…

Python TCP编程简单实例

客户端:创建TCP链接时,主动发起连接的叫做客户端 服务端:接收客户端的连接 连接其他服务器 可以通过tcp连接其他服务器。 示例: import socket# 1.创建一个socket # 参数1:指定协议 AF_INET(ipv4&#…

TSMaster发送CAN报文

打开TSMaster工程 从菜单栏打开CAN报文发送窗口:【分析】->【报文发送】->【添加CAN/CAN FD发送】 可以选择【从CAN数据库添加报文】或者是【添加新的原始报文】 方法一 添加新的原始报文 可以配置报文发送的触发方式,有【手动】和【周期】两种。…

Linux多线程系列三: 生产者消费者模型,信号量使用,基于阻塞队列和环形队列的这两种生产者消费者代码的实现

Linux多线程系列三: 生产者消费者模型,信号量,基于阻塞队列和环形队列的这两种生产者消费者代码的实现 一.生产者消费者模型的理论1.现实生活中的生产者消费者模型2.多线程当中的生产者消费者模型3.理论 二.基于阻塞队列的生产者消费者模型的基础代码1.阻塞队列的介绍2.大致框架…

力扣刷题--2733. 既不是最小值也不是最大值【简单】

题目描述 给你一个整数数组 nums ,数组由 不同正整数 组成,请你找出并返回数组中 任一 既不是 最小值 也不是 最大值 的数字,如果不存在这样的数字,返回 -1 返回所选整数。 示例 1: 输入:nums [3,2,1,…

docker三种自定义网络(虚拟网络) overlay实现原理

docker提供了三种自定义网络驱动:bridge、overlay、macvlan。 bridge驱动类似默认的bridge网络模式。 overlay和macvlan是用于创建跨主机网络。 支持自定义网段、网关,docker network create --subnet 172.77.0.0/24 --gateway 172.77.0.1 my_n…

Mujoco仿真【xml文件的学习 3】

在学习Mujoco仿真的过程中,为了与时俱进,之前的mujoco210版本不再使用,改用了mujoco-3.1.4版本,下面继续mujoco仿真的学习! 先前关于mujoco的学习博客汇总如下: 强化学习:MuJoCo机器人强化学习…

基于深度学习OCR文本识别

第一步:概要 基于深度学习OCR文本识别分为两个模块:DBNet和CRNN。 DBNet是基于分割的文本检测算法,算法将可微分二值化模块(Differentiable Binarization)引入了分割模型,使得模型能够通过自适应的阈值图进行二值化,并…

社交网络安全:保护用户数据的Facebook实践

在数字化时代,社交网络安全成为了人们关注的焦点之一。作为全球最大的社交平台之一,Facebook一直在致力于保护用户数据安全和隐私。本文将探讨Facebook在社交网络安全方面的实践,以及它所采取的措施来保护用户数据的安全性。 1. 数据加密与隐…

【JAVA基础之内部类】匿名内部类

🔥作者主页:小林同学的学习笔录 🔥小林同学的专栏:JAVA之基础专栏 目录 1.内部类 1.1 概述 1.1.1 什么是内部类 1.1.2 什么时候使用内部类 1.2 内部类的分类 1.3 成员内部类 1.3.1 获取成员内部类对象的两种方式 1.3.2 经典面试…

C语言基础——循环(2)+关机程序

欢迎点赞支持 个人主页:励志不掉头发的内向程序员; 专栏主页:C语言基础; 文章目录 目录 前言 一、for循环的补充 二、循环的嵌套 1、嵌套的介绍 1.1 练习: 题目解析: 优化: 三、goto语句 1、go…

【四、性能测试】Linux stress 压力模拟测试工具

在做 CPU 问题解析之前,需要先了解一下压力模拟工具,可以将 CPU、MEM、IO 等进行压力模拟,可以在模拟压力的过程中进行问题解析 一、STRESS 模拟对CPU、Memory、IO、磁盘进行压力测试。可以使用 stress 工具,它是专门针对 linux…

python+selenium - UI自动框架之封装浏览器引擎driver方法

在做兼容性测试的适合,可以运行指定的浏览器(IE,Chrome,Edge) 目录文件: from selenium import webdriver from urllib3.exceptions import ProtocolError from common.log import *def getDriver():# if browserType is None:br…

国际货币基金组织警告:网络攻击影响全球金融稳定

近日,在一份关于金融稳定的报告中,国际货币基金组织(IMF)用了一章(共三章)的篇幅描述了网络攻击对金融环境的影响,并警告称,全球金融稳定正受到日益频繁和复杂的网络攻击的威胁。同时…

java企业级云MES系统全套源码,支持app、小程序、H5、台后管理

企业级云MES全套源码,支持app、小程序、H5、台后管理端 企业级智能制造MES系统源码,技术架构:springboot vue-element-plus-admin MES指的是制造企业生产过程执行系统,是一套面向制造企业车间执行层的生产信息化管理系统。MES可以…