栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mysql知识点

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mysql知识点

文章目录
  • 日志(log)
    • bin log
    • undo log
    • redo log(重做日志)
    • Realy log
  • Mysql数据如何恢复?
  • Mysql删库后如何恢复?
  • Mysql崩溃后如何恢复?
  • Mysql如何做主从复制?
  • MySQL [DML与DDL](https://blog.csdn.net/yuell102/article/details/125899572?csdn_share_tail=%7B%22type%22:%22blog%22,%22rType%22:%22article%22,%22rId%22:%22125899572%22,%22source%22:%22yuell102%22%7D&ctrtid=b83hH)
    • 全称
    • 详细描述
    • DML与DDL的区别:
    • **什么是预读?**
  • [BufferPool 内存缓存池]淘汰策略(https://dev.mysql.com/doc/refman/8.0/en/innodb-buffer-pool.html)
    • InnoDB了解
  • 调优参数
  • Redo Log跟Buffer Pool的关系
  • Mysql的体系结构是什么样子的(一条查询语句它到底是怎么执行的?)

日志(log) bin log

主要应用于:数据恢复、主从复制
bin log 以事件的形式记录了所有的 DDL 和 DML 语句(因为它记录的是操作而不是数据值,属于逻辑日志):

  • b i n l o g 是 M y S Q L 数据库级别的文件,主要用于恢复数据库和同步数据库 color{#FF0000}{bin log是MySQL数据库级别的文件,主要用于恢复数据库和同步数据库} binlog是MySQL数据库级别的文件,主要用于恢复数据库和同步数据库
  • 对 M y S Q L 数据库各种引擎下执行修改的所有操作进行记录,不会记录 s e l e c t 和 s h o w 语句 color{#FF0000}{对MySQL数据库各种引擎下执行修改的所有操作进行记录,不会记录select和show语句} 对MySQL数据库各种引擎下执行修改的所有操作进行记录,不会记录select和show语句
  • 存储大小不受限制 color{#FF0000}{存储大小不受限制} 存储大小不受限制

数据恢复:区别于Redo Log的崩溃恢复,数据恢复是基于业务数据的,比如删库跑路,而崩溃恢复是断电重启的

undo log redo log(重做日志)

1.记录修改后的值,属于物理日志

2.redo log 的大小是固定的,前面的内容会被覆盖,所以不能用于数据回滚/数据恢复。

3.redo log 是 InnoDB 存储引擎实现的,并不是所有存储引擎都有。

Realy log

从节点数据库,读到主节点数据后的一个缓冲日志,避免数据量过大压垮从节点

Mysql数据如何恢复?
  • 恶意删库数据库恢复
  • 数据库崩溃数据恢复
Mysql删库后如何恢复?
  • 基本上bin log每天会做全量备份,拿到历史的全量备份bin log进行恢复
  • 比如当前9点钟删的库,现在是10点钟,当前的可以截取到8:50(删库前几分钟,不包含删库语句)bin log进行恢复
  • 8:50-10:00点的数据需要人工分析去恢复
Mysql崩溃后如何恢复?

Mysql崩溃是Mysql自动完成,是通过Redo log刷页完成

Mysql如何做主从复制?
  1. 主节点修改会通过自己的 I/O tread(I/O 线程)保存在二进制日志 Binary log(bin log)里面
  2. 从节点也启动一个 I/O thread,通过配置好的用户名和密码, 连接到主节点请求读取二进制日志,然后把读取到的二进制日志写到从节点本地的一个Realy log(日志起到缓存作用,不至于一下把从节点压垮)里面
  3. 从节点同时开启一个 SQL thread 定时检查 Realy log(这个文件也是二进制的),匀速的更新到从节点库中。
  4. 每个从节点都会记录二进制日志坐标:
文件名
文件中它已经从主站读取和处理的位置
  1. 由于每个从节点都记录了自己当前处理二进制日志中的位置,假如从节点意外断开连接,重新连接然后依然可以恢复处理。
MySQL DML与DDL 全称
DML( data maintain Language)
DDL(Data Definition Language)
详细描述
DML( Data Manipulation Language),数据操作语言-数据库基本操作,SQL中处理数据等操作统称为DML,即实现了基本的“增删改查”操作, 包括的关键字有: select、update、delete、insert、merge, 事务提交后生效,可回滚。
DDL( Data Definition Language),数据定义语言-用于定义和管理SQL数据库中所有对象的语言,对数据库中的某些对象(database、table)进行管理,包括的关键字: create、alter、drop、truncate、comment、grant、revoke, 隐性提交,不能回滚。
DML与DDL的区别:
DML操作是可以手动控制事务的开启、提交和回滚的。
DDL操作是隐性提交的,不能rollback!
什么是预读?

磁盘读写,并不是按需读取,而是按页读取,一次至少读一页数据(一般是4K)但是Mysql的数据页是16K,如果未来要读取的数据就在页中,就能够省去后续的磁盘IO,提高效率。


[BufferPool 内存缓存池]淘汰策略(https://dev.mysql.com/doc/refman/8.0/en/innodb-buffer-pool.html)

冷热分区的LRU策略

LRU链表会被拆分成为两部分,一部分为热数据,一部分为冷数据。冷数据占比 3/8,热数据5/8。

数据页第一次加载进来,放在LRU链表的什么地方?

放在冷数据区域的头部

冷数据区域的缓存页什么时候放入热数据区域?

MySQL设定了一个规则,在 innodb_old_blocks_time 参数中,默认值为1000,也就是1000毫秒。

意味着,只有把数据页加载进缓存里,在经过1s之后再次对此缓存页进行访问才会将缓存页放到LRU链表热数据区域的头部。

为什么是1秒?

因为通过预读机制和全表扫描加载进来的数据页通常是1秒内就加载了很多,然后对他们访问一下,这些都是1秒内完成,他们会存放在冷数据区域等待刷盘清空,基本上不太会有机会放入到热数据区域,除非在1秒后还有人访问,说明后续可能还会有人访问,才会放入热数据区域的头部。

InnoDB了解

数据页面大小为 16KB

调优参数

缓存池 innodb_buffer_pool_size

InnoDB缓存表和索引数据的内存区域。默认值为 134217728 字节 (128MB)

如果本服务器专门用于数据库,建议设置为机器内存的60%-80%,能有效提高查询速度
Redo Log跟Buffer Pool的关系

崩溃恢复 基本保障 系统自动做的

InnoDB 引入了一个日志文件,叫做 redo log(重做日志),我们把所有对内存数据的修改操作写入日志文件,如果服务器出问题了,我们就从这个日志文件里面读取数据,恢复数据——用它来实现事务的持久性。
redo log 有什么特点?

1.记录修改后的值,属于物理日志

2.redo log 的大小是固定的,前面的内容会被覆盖,所以不能用于数据回滚/数据恢复。

3.redo log 是 InnoDB 存储引擎实现的,并不是所有存储引擎都有。

Mysql的体系结构是什么样子的(一条查询语句它到底是怎么执行的?)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1019999.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号