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标记

刷新脏数据

会有线程再去刷新数据

相关内容

热门资讯

在大吉订购APP订购交易亏损被...   近期,不少投资者反映在“大吉订购App”上投资白银、铂金等商品遭遇严重亏损。该平台宣称提供现货订...
铂银壹号APP商品订购交易亏损...   许多中小投资者误以为网上的“商品现货订购”是合规合法的理财渠道,殊不知这背后隐藏着巨大的合规风险...
兴鑫淘金APP贵金属订购交易亏...   白银、贵金属或其他商品类投资,除国家批准的正规期货交易场所及持牌期货公司外,市面上大量第三方交易...
铂银掘金APP无资质的违规平台...   铂银掘金等平台的投资者,往往是被“注册送现金”“充值返现券”“首单免亏”等广告话术吸引,进而下载...
八方淘金APP订购交易不合规,...   “八方淘金APP”“铂银掘金APP”“铂银壹号APP”等软件被指以“现货订购”为名,实际采用高杠...
在指尖订购APP订购商品亏损被...   指尖订购APP这类平台,表面是“订购交易”,实则是披着电商外衣的非法期货陷阱。绝大多数投资者被蒙...
在犀贝易购APP做商品订购交易...   市面上打着“现货投资”“贵金属交易”旗号的APP并不少,但真正合规、受监管的平台并不多。犀贝易购...
易达淘金APP虚假商品订购交易...   易达淘金APP存在严重的虚假宣传与违规交易行为。该平台打着“商品订购”的旗号,实则通过不合规的交...
大浪淘金APP白银订购亏损被骗...   大浪淘金APP最隐蔽的套路,在于其完全封闭的内盘交易系统。表面上,它宣称与国际贵金属市场接轨;实...
一品好购APP上订购白银出现亏...   一品好购APP原名“一品订购”,运营方为上海宝智未来信息技术有限公司。近期不少投资者反映在该平台...
九州订购APP贵金属订购投资骗...   九州订购APP正通过抖.音、快手、今日头条等平台大量投放投资广告,用“5元起投”“充值返现”“0...
坚锅淘金APP交易软件并不正规...   当前,市面上大量所谓的“现货商城订购”交易软件,早已偏离了正常的实物商品买卖,演变为高杠杆、高手...
斗金订购APP贵金属期货交易骗...   斗金订购APP的投资者往往被铺天盖地的广告宣传所诱导——注册即送现金、充值返现券等看似诱人的福利...
警惕!云启购APP违规经营,披...   "5元起投、充值返现、稳赚不赔"——这些诱人的广告语背后,可能是一个精心设计的金融陷阱。  近期...
量子淘金APP贵金属投资不合规...   "4元起投""充值返券""月入过万"——这些极具诱惑力的广告语在短视频平台、社交软件上铺天盖地。...
鑫汇智投APP贵金属商品订购骗...   鑫汇智投APP非法期货投资骗局,受害者在投资过程中根本不懂交易,也不去研究和验证这个平台是否正规...
矅光智策APP平台违规经营非法...   矅光智策APP对外宣称是“商城订购”“现货交易”,但查询其经营范围,并未显示具备开展现货期货交易...
黄金珠宝怎么选?内侧刻字都代表... 潮新闻客户端 记者 马焱 通讯员 任倩影 9月8日下午,“云游杭州 乐购金秋”——“浙城·浙放心”活...
原创 冰... 最近全球国债市场正在上演魔幻一幕: 美债、日债、欧债遭遇猛烈抛售,收益率冲到几十年新高,美国财政部都...
日韩股市开盘表现分化 上证报中国证券网讯 9月9日,日韩股市开盘表现分化,韩国综合指数开盘上涨0.26%,报6972.87...