Mysql架构初识
🥲 🥸 🤌 🫀 🫁 🥷 🐻❄️🦤 🪶 🦭 🪲 🪳 🪰 🪱 🪴 🫐 🫒 🫑 🫓 🫔 🫕 🦤 🪶 🦭 🪲 🪳 🪰 🪱 🐻❄️ 🫐 🫒 🫑 🫓 🫔 🫕
♔博主昵称:�欢快↑㎡
🕍博客主页:�欢快↑㎡的博客_CSDN博客-学习注意点杂记,BUG集,安装教程领域博主
⚇很方便的在线编辑器:Lightly
🥗感谢点赞🤞🏻评论🤞🏻收藏
相信吧!🤜🏻我们很优秀,还可以更加优秀,加油!🌼让我们一起在写作中记录巩固学习吧!
目录
java和mysql整体概览
MySql驱动
数据库连接池
java系统连接池
mysql数据库的连接池
网络线程连接谁来负责连接
sql接口
查询解析器
查询优化器
执行器
更新怎么执行
InnoDB缓存池
undo日志
redo日志
事务未提交
binlog
binlog刷盘策略
常见刷盘策略
完成事务提交
刷新脏数据
java和mysql整体概览
java的系统连接Mysql的系统

只知道大概在遇到问题不能更好的解决问题。比如死锁,sql性能,异常报错等问题。所以需要我们了解逻辑,才能更好,更快的解决问题。
MySql驱动
我们需要在依赖中增加一个mysql驱动,才能与mysql建立连接。

使用Maven管理项目依赖,可以在pom.xml文件中添加以下依赖:
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version>
</dependency>然后,在Java代码中,需要使用JDBC API与MySQL数据库建立连接。以下是一个示例代码片段:
import java.sql.*;public class MysqlConnect {public static void main(String[] args) {Connection conn = null; //Connection 类可以管理和控制连接try {String dburl = "jdbc:mysql://localhost:3306/mydatabase"; //连接地址String user = "myusername"; //用户名String password = "mypassword"; //密码// 建立连接conn = DriverManager.getConnection(dburl, user, password);System.out.println("连接成功");} catch (SQLException e) {System.out.println("连接失败:" + e.getMessage());} finally {if (conn != null) {try {conn.close(); //关闭连接} catch (SQLException e) {System.out.println("关闭连接失败:" + e.getMessage());}}}}
}数据库连接池
java系统建立连接是建立多个连接的,建立的连接如果频繁的销毁或创建会造成性能低下,所以是采用复用连接的(web应用是部署在tomcat里面的,springboot项目相当于内嵌了tomcat)
java系统连接池
数据库里面的连接时复用的

mysql数据库的连接池
mysql数据库中的连接也是多线程的,并且也是复用的

网络线程连接谁来负责连接
是靠线程来负责连接的,可以监听连接,读取连接中的sql

sql接口
线程调用sql接口,并将获取到的sql语句给接口

查询解析器
就会解析,让mysql看得懂,比如要从某表做查询动作,条件是什么

查询优化器
选择一个最有查询路径,比如有两条路径(假设)
路径1:定位到user表id=10,查name,age
路径2:把userr name age 都查询出来,看哪条数据id=10
从路径1和路径2中选出一条最优路径

执行器
调用存储引擎,根据优化器生成得执行计划调用存储引擎的接口
mysql中sql接口,sql解析器,查询优化器是同用得
存储引擎有:InnoDB,MyISAM,Memory

更新怎么执行
例子:update user set name = 'aaa' where id = 10;
InnoDB缓存池
它有一个叫Buffeer-pool的缓存池,其中缓存着很多数据,查询的时候,如果缓存池里面有,则不查询磁盘。放在缓存里面可以加快它的访问速度。

如果缓存池里面没有,则从磁盘加载数据到缓存池,对这条数据加独占锁(更新的时候别人不能同时更新)------排他锁------对应共享锁
锁:mysql行锁,表锁,cap锁
undo日志
非自动提交(可以蛇者自动提交)有两个动作:Commit(提交),Rollback(回滚)
InnDB怎么保证可以回滚?
update a
update b
假设执行update a 时发生异常,需要将 update a 回滚
假设更新语句是:update user set name = 'aaa' where id = 10,原来的数据是bbb
先把原来的数据(bbb)写到undo日志。此时磁盘中的数据是aaa,磁盘与缓存中的数据不一致,也就是脏数据。

更新过程:1.检查Buffer Pool里面有没有这条数据,(没有则从磁盘把数据加载到缓存再更新)
2.有则对该条数据加锁,并且将旧值写到undo日志文件
3.将数据刷到磁盘
redo日志
把新值aaa写入Redo Log buffer内存的一个缓存区,用来存redo日志
事务未提交
Mysql宕机,内存(缓存)的数据就会丢失,写到Redo Log buffer内存的一个缓存数据会丢失

redo日志刷盘策略
将内存数据刷到磁盘,刷盘策略是尽可能的保证数据的安全性和性能。
是通过 DBA(数据库管理员) 来调整 innodb_flush_log_at_try_commit 这个参数的。
DBA功能:
数据库参数设置:DBA 可以根据数据库的实际情况,调整数据库参数,以获得更好的性能。例如,可以调整缓存大小、线程池大小等参数。
数据库监控:DBA 可以使用各种工具对数据库进行监控,以及时发现并解决问题。例如,可以监控数据库性能、空间使用情况、锁定情况等。
数据库备份和恢复:DBA 可以设置数据库的备份策略,并保证备份数据的完整性和可用性。在需要时,DBA 还可以从备份中恢复数据。
安全管理:DBA 可以设置数据库的访问权限、加密等安全措施,以确保数据库系统的安全性。
性能优化:DBA 可以根据数据库的运行状况,通过重构表结构、索引优化、查询优化等方式,来提高数据库的性能和响应速度。
innodb_flush_log_at_try_commit 这个参数可以设置为 0、1 和 2。
当设置为 0 时,日志缓冲区将被写入日志文件,但不会在事务提交时进行日志文件同步。
当设置为 1 时,日志缓冲区将被写入日志文件,并在事务提交时进行日志文件同步。
当设置为 2 时,无论是否已提交事务,日志缓冲区每秒都只会被写入一次日志文件。
默认为1,可以设置为2,减少磁盘I/O.

binlog
redo日志是重做,是InnoDB特有的------存储引擎特有
binlog是归档日志,是MySQL中的二进制日志,可以用于记录数据库的所有更改 是mysql server的
binlog刷盘策略
sync_binlog参数:这个参数控制着Binlog是否需要同步写入磁盘。当该参数设置为1时,每次写入Binlog都需要等待写入完成后才能返回成功,这样可以保证写入的数据不会丢失。但是,这也会影响系统的性能,因为同步写入磁盘会增加IO负载。
常见刷盘策略
innodb_flush_log_at_trx_commit参数:这个参数控制着InnoDB引擎写入Redo Log的时机。当该参数设置为1时,每次事务提交后就会将Redo Log写入磁盘,这可以保证数据的持久化。当该参数设置为0时,Redo Log只会被写入缓存,这样可以提高系统性能,但是如果系统崩溃,未写入磁盘的数据将会丢失。
binlog_cache_size参数:这个参数控制着Binlog缓存的大小。当Binlog写满一定大小后,就会进行刷盘操作。如果该参数设置得太小,容易导致频繁的刷盘操作,降低系统性能;如果设置得太大,则可能会浪费过多内存资源。
max_binlog_size参数:这个参数限制了单个Binlog文件的最大大小。一旦文件达到该大小,就会自动切换到下一个文件。如果该参数设置得太小,则会频繁地切换文件,增加系统开销;如果设置得太大,则可能会造成单个文件过大,难以管理。
完成事务提交
写入磁盘文件后,最后完成提交。
将缓存数据写入磁盘,并释放锁定的资源
同时记录binlog文件名称和这次binlog在文件的位置,写入redolog并写入commit标记

刷新脏数据
会有线程再去刷新数据

相关文章:
Mysql架构初识
🥲 🥸 🤌 🫀 🫁 🥷 🐻❄️🦤 🪶 🦭 🪲 🪳 🪰 🪱 🪴 🫐 🫒 🫑…...
字符串函数和内存函数
🍕博客主页:️自信不孤单 🍬文章专栏:C语言 🍚代码仓库:破浪晓梦 🍭欢迎关注:欢迎大家点赞收藏关注 字符串函数和内存函数 文章目录字符串函数和内存函数前言1. 字符串函数介绍1.1 s…...
Web3中文|GPT-4超越GPT-3.5的五大看点
A Beautiful CinderellaDwelling EagerlyFinally Gains HappinessInspiring Jealous KinLove Magically Nurtures Opulent PrinceQuietly RescuesSlipper TriumphsUniting Very WondrouslyXenial Youth Zealously这是一段描述童话故事《灰姑娘》的内容,它出自GPT-4之…...
动态矢量瓦片缓存库方案
目录 前言 二、实现步骤 1.将数据写入postgis数据库 2.将矢量瓦片数据写入缓存库 3.瓦片接口实现 4.瓦片局部更新接口实现 总结 前言 矢量瓦片作为webgis目前最优秀的数据格式,其主要特点就是解决了大批量数据在前端渲染时出现加载缓慢、卡顿的问题࿰…...
628.三个数的最大乘积
给你一个整型数组 nums ,在数组中找出由三个数组成的最大乘积,并输出这个乘积。 示例 1: 输入:nums [1,2,3] 输出:6 示例 2: 输入:nums [1,2,3,4] 输出:24 示例 3: …...
【数据结构】堆和集合笔记
自己写一个堆首先,明确一下,为什么需要堆?>考虑插入,删除,查找的效率。数组,查找,最快是二分查找O(lgN)。但查找完如果要做什么操作,比如删除,就要挪动元素了。所以合…...
java LinkedList 源码分析(通俗易懂)
目录 一、前言 二、LinkedList类简介 三、LinkedList类的底层实现 四、LinkedList类的源码解读 1.add方法解读 : 〇准备工作 。 ①跳入无参构造。 ②跳入add方法。 ③跳入linkList方法。 ④增加第一个元素成功。 ⑤向链表中添加第二个元素。 2.remove方法解读 : 〇准备工…...
Vue中实现路由跳转的三种方式详细分解
vue中实现路由跳转的三种方式 目录 vue中实现路由跳转的三种方式 一、使用vue-router 1.下载vue-router模块到当前工程 2.在main.js中引入VueRouter函数 3.添加到Vue.use()身上 – 注册全局RouterLink和RouterView组件 4.创建路由规则数组 – 路径和组件名对应关系 5…...
全国自学考试03708《中国近现代史纲要》重点复习精要
1. 西方列强的殖民扩张和鸦片战争的影响。(两面性) :反面—破坏了了中国的小农经济,是中国由封建社会转变为两半社会。 --一系列不公平条约,破坏了中国主权领土完整。 --压迫中国人民,给中国人民带来了巨大…...
数据库面试题——锁
了解数据库的锁吗? 锁是数据库系统区别于文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问。 InnoDB下两种标准行级锁: 共享锁(S Lock),允许事务读一行数据。 排他锁(X Lock&…...
Python笔记 -- 文件和异常
文章目录1、文件1.1、with关键字1.2、逐行读取1.3、写入模式1.4、多行写入2、异常2.1、try-except-else2.2、pass1、文件 1.1、with关键字 with关键字用于自动管理资源 使用with可以让python在合适的时候释放资源 python会将文本解读为字符串 # -*- encoding:utf-8 -*- # 如…...
蓝桥杯刷题冲刺 | 倒计时24天
作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.修剪灌木2.统计子矩阵1.修剪灌木 题目 链接: 修剪灌木 - 蓝桥云课 (lanqiao.cn) 找…...
真正理解微软Windows程序运行机制——什么是消息
我是荔园微风,作为一名在IT界整整25年的老兵,今天说说Windows程序的运行机制。经常被问到MFC到底是一个什么技术,为了解释这个我之前还写过帖子,但是很多人还是不理解。其实这没什么,我在学生时代也被这个问题困绕过。…...
HTTP 缓存的工作原理
缓存是解决http1.1当中的性能问题主要手段。缓存可能存在于客户端浏览器上,也可以存在服务器上面,当使用过期缓存可能给用户展示的是错误的信息而导致一些bug。 HTTP 缓存:为当前请求复用前请求的响应 • 目标:减少时延࿱…...
RK3568在Android上进行驱动模块开发(源码外)
文章目录 前言一、ARCH架构二、编译器三、建立自己的Makefile文件总结前言 本文记录在驱动开发时,由于编译内核时间较长,经常会选择单独编译一个模块,这里主要讲解,makefile文件如何编写(主要是编译器和架构) 提示:以下是本篇文章正文内容,下面案例可供参考 一、ARCH…...
操作技巧 | 在Revit中借用CAD填充图案的方法
在建模过程中,有时需要达到多种填充效果,而CAD中大量的二维填充图案,便是最直接的资源之一。 使用 填充图案之前 使用 填充图案之后 其中要用到主要命令便是对表面填充图案的添加与编辑 简单效果 如下 模型填充与绘图填充 区别 模型填…...
Java的二叉树、红黑树、B+树
数组和链表是常用的数据结构,数组虽然查找快(有序数组可以通过二分法查找),但是插入和删除是比较慢的;而链表,插入和删除很快(只需要改变一些引用值),但是查找就很慢&…...
昨天某读者拿到华为OD岗位offer,今天来分享一下经验,包含华为OD机试
来自读者投稿,已经拿到华为 OD 开发岗位 offer,询问了一些问题,下面是他的一些经验。 文章目录华为 OD 投递简历华为 OD 机试分数OD 机试通过之后,收到综合测评OD 技术面(时长 1 小时左右)主管/HR 面试&…...
树的遍历方式(前中后,层序遍历,递归,迭代,Morris遍历)-----直接查询代码
目录 一.前序遍历 1.递归 2.栈迭代 3.Morris遍历 二.中序遍历 1.递归 2.栈迭代 3.Morris遍历 三.后序遍历 1.递归 2.栈迭代 3.Morris遍历 四.前中后序的统一迭代法 1.前序遍历 2.中序遍历 3.后序遍历 五.层序遍历 1.队列迭代 2.之字形层序遍历 3.锯齿形层序…...
Docker Registry部署镜像私有仓库及鉴权认证
文章目录一、Docker Registry是什么?二、Docker Registry部署私有仓库2.1、Docker Registry安装2.2、Docker Registry配置2.3、启动Docker Registry2.4、Docker客户端配置2.5、向Docker Registry上传和下载镜像三、Docker Registry鉴权和认证3.1、基本认证3.2、Bear…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...
nnUNet V2修改网络——暴力替换网络为UNet++
更换前,要用nnUNet V2跑通所用数据集,证明nnUNet V2、数据集、运行环境等没有问题 阅读nnU-Net V2 的 U-Net结构,初步了解要修改的网络,知己知彼,修改起来才能游刃有余。 U-Net存在两个局限,一是网络的最佳深度因应用场景而异,这取决于任务的难度和可用于训练的标注数…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...
【Post-process】【VBA】ETABS VBA FrameObj.GetNameList and write to EXCEL
ETABS API实战:导出框架元素数据到Excel 在结构工程师的日常工作中,经常需要从ETABS模型中提取框架元素信息进行后续分析。手动复制粘贴不仅耗时,还容易出错。今天我们来用简单的VBA代码实现自动化导出。 🎯 我们要实现什么? 一键点击,就能将ETABS中所有框架元素的基…...
C# winform教程(二)----checkbox
一、作用 提供一个用户选择或者不选的状态,这是一个可以多选的控件。 二、属性 其实功能大差不差,除了特殊的几个外,与button基本相同,所有说几个独有的 checkbox属性 名称内容含义appearance控件外观可以变成按钮形状checkali…...
React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?
系列回顾: 在上一篇《React核心概念:State是什么?》中,我们学习了如何使用useState让一个组件拥有自己的内部数据(State),并通过一个计数器案例,实现了组件的自我更新。这很棒&#…...
AT模式下的全局锁冲突如何解决?
一、全局锁冲突解决方案 1. 业务层重试机制(推荐方案) Service public class OrderService {GlobalTransactionalRetryable(maxAttempts 3, backoff Backoff(delay 100))public void createOrder(OrderDTO order) {// 库存扣减(自动加全…...
