Mysql架构初识
创始人
2025-05-29 03:01:18
0
🥲 🥸 🤌 🫀 🫁 🥷 🐻‍❄️🦤 🪶 🦭 🪲 🪳 🪰 🪱 🪴 🫐 🫒 🫑 🫓 🫔 🫕 🦤 🪶 🦭 🪲 🪳 🪰 🪱 🐻‍❄️ 🫐 🫒 🫑 🫓 🫔 🫕
♔博主昵称:�欢快↑㎡
🕍博客主页:�欢快↑㎡的博客_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文件中添加以下依赖:

mysqlmysql-connector-java8.0.27

然后,在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怎么保证可以回滚?

  1. update a

  1. 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功能:

  1. 数据库参数设置:DBA 可以根据数据库的实际情况,调整数据库参数,以获得更好的性能。例如,可以调整缓存大小、线程池大小等参数。

  1. 数据库监控:DBA 可以使用各种工具对数据库进行监控,以及时发现并解决问题。例如,可以监控数据库性能、空间使用情况、锁定情况等。

  1. 数据库备份和恢复:DBA 可以设置数据库的备份策略,并保证备份数据的完整性和可用性。在需要时,DBA 还可以从备份中恢复数据。

  1. 安全管理:DBA 可以设置数据库的访问权限、加密等安全措施,以确保数据库系统的安全性。

  1. 性能优化: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负载。

常见刷盘策略

  1. innodb_flush_log_at_trx_commit参数:这个参数控制着InnoDB引擎写入Redo Log的时机。当该参数设置为1时,每次事务提交后就会将Redo Log写入磁盘,这可以保证数据的持久化。当该参数设置为0时,Redo Log只会被写入缓存,这样可以提高系统性能,但是如果系统崩溃,未写入磁盘的数据将会丢失。

  1. binlog_cache_size参数:这个参数控制着Binlog缓存的大小。当Binlog写满一定大小后,就会进行刷盘操作。如果该参数设置得太小,容易导致频繁的刷盘操作,降低系统性能;如果设置得太大,则可能会浪费过多内存资源。

  1. max_binlog_size参数:这个参数限制了单个Binlog文件的最大大小。一旦文件达到该大小,就会自动切换到下一个文件。如果该参数设置得太小,则会频繁地切换文件,增加系统开销;如果设置得太大,则可能会造成单个文件过大,难以管理。

完成事务提交

写入磁盘文件后,最后完成提交。

将缓存数据写入磁盘,并释放锁定的资源

同时记录binlog文件名称和这次binlog在文件的位置,写入redolog并写入commit标记

刷新脏数据

会有线程再去刷新数据

相关内容

热门资讯

证监会再次修订《上市公司治理准... 7月25日晚上,证监会发布通知对《上市公司治理准则(修订征求意见稿)》公开征求意见。本次修订目的是为...
从“闭眼买”到“不敢信”,山姆... 蓝鲨导读:中国零售崛起 作者 | 张二河 编辑 | 卢旭成 山姆会员店,因上架了一款韩国品牌陷入舆论...
原创 欧... 近日,欧盟委员会突然宣布了一则令人震惊的消息:7月25日,该委员会正式对中国太阳能玻璃发起第二次双反...
7月28日财经早餐:欧美达成贸... 来源:市场资讯 汇通财经APP讯——周一(北京时间7月28日),现货黄金交投于3335.78美元/盎...
科技早报 | 贝索斯完成大规模... 贝索斯完成一轮大规模亚马逊股票出售,套现57亿美元 亚马逊公司当地时间7月25日提交至美国证券交易...
股市必读:紫光股份(00093... 截至2025年7月25日收盘,紫光股份(000938)报收于25.04元,上涨0.64%,换手率1....
15%!美国与欧盟达成贸易协议... 据央视新闻报道,当地时间7月27日,美国总统特朗普表示,美国已与欧盟达成贸易协议,对欧盟输美商品征收...
早新闻|央行4000亿元MLF... 宏观热点 央行、农业农村部印发《关于加强金融服务农村改革 推进乡村全面振兴的意见》 近日,中国人...
21专访|细胞存储,《繁花》爷... 21世纪经济报道记者 赵云帆 上海报道 “我是一个真正意义上的创业者”,年过古稀的瞿建国,在采访中如...
华熙生物赵燕谈胶原蛋白乱象:科... 21世纪经济报道记者雷晨 北京报道 近年来,重组胶原蛋白成为医美和护肤领域的热门概念,市场宣传中不乏...
富春染织完成董事会选举换届 开... 7月25日晚间,富春染织公告显示,当日,公司2025年第一次临时股东会和富春染织第四届第一次董事会在...
圣湘生物:两款产品取得医疗器械... 每经AI快讯,圣湘生物(SH 688289,收盘价:22.94元)7月27日晚间发布公告称,圣湘生物...
10年期国债收益率升至1.73... 近期债券市场出现显著调整,多重因素交织推动收益率持续上行。权益市场强势表现与大宗商品价格上涨形成合力...
当对手都在做下沉 蜜雪冰城旗下... [ 今年5月,蜜雪集团跟巴西签署40亿元人民币的采购意向大单,其中大多数是咖啡豆。 ] 当星巴克、瑞...
新手必看!股指期货交易规则基础... 股指期货交易规则,看似复杂抽象,实则与我们的日常生活有着奇妙的共通之处。它就像一场精心编排的生活交响...
王登发履新茅台技开公司“一把手... 一则微信公众号发布的信息,披露了茅台集团旗下的技术开发公司“一把手”已换人。 近日,南都湾财社-酒水...
特斯拉机器人V3量产版亮相!马... 快科技7月27日消息,特斯拉的Optimus人形机器人V3量产版终于要来了!马斯克在最近的财报电话会...
原创 中... 在金融全球化的浪潮中,中国资本市场始终勇立潮头,不断探索前行。7月26日,中国资本市场学会成立大会暨...
报告:我国经济增长保持韧性 下... 央广网北京7月27日消息(记者 樊瑞)近日,中国金融四十人论坛(CF40论坛)发布《2025年第二季...
超6300亿元!A股银行“分红... 7月25日,成都银行完成权益分派股权登记,将于7月28日发放现金红利,这标志着A股上市银行2024年...