- 日志(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的体系结构是什么样子的(一条查询语句它到底是怎么执行的?)
主要应用于:数据恢复、主从复制
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(重做日志)Realy log1.记录修改后的值,属于物理日志
2.redo log 的大小是固定的,前面的内容会被覆盖,所以不能用于数据回滚/数据恢复。
3.redo log 是 InnoDB 存储引擎实现的,并不是所有存储引擎都有。
从节点数据库,读到主节点数据后的一个缓冲日志,避免数据量过大压垮从节点
Mysql数据如何恢复?- 恶意删库数据库恢复
- 数据库崩溃数据恢复
- 基本上bin log每天会做全量备份,拿到历史的全量备份bin log进行恢复
- 比如当前9点钟删的库,现在是10点钟,当前的可以截取到8:50(删库前几分钟,不包含删库语句)bin log进行恢复
- 8:50-10:00点的数据需要人工分析去恢复
Mysql崩溃是Mysql自动完成,是通过Redo log刷页完成
Mysql如何做主从复制?- 主节点修改会通过自己的 I/O tread(I/O 线程)保存在二进制日志 Binary log(bin log)里面
- 从节点也启动一个 I/O thread,通过配置好的用户名和密码, 连接到主节点请求读取二进制日志,然后把读取到的二进制日志写到从节点本地的一个Realy log(日志起到缓存作用,不至于一下把从节点压垮)里面
- 从节点同时开启一个 SQL thread 定时检查 Realy log(这个文件也是二进制的),匀速的更新到从节点库中。
- 每个从节点都会记录二进制日志坐标:
文件名 文件中它已经从主站读取和处理的位置
- 由于每个从节点都记录了自己当前处理二进制日志中的位置,假如从节点意外断开连接,重新连接然后依然可以恢复处理。
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,提高效率。
冷热分区的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的关系
崩溃恢复 基本保障 系统自动做的
Mysql的体系结构是什么样子的(一条查询语句它到底是怎么执行的?)InnoDB 引入了一个日志文件,叫做 redo log(重做日志),我们把所有对内存数据的修改操作写入日志文件,如果服务器出问题了,我们就从这个日志文件里面读取数据,恢复数据——用它来实现事务的持久性。
redo log 有什么特点?1.记录修改后的值,属于物理日志
2.redo log 的大小是固定的,前面的内容会被覆盖,所以不能用于数据回滚/数据恢复。
3.redo log 是 InnoDB 存储引擎实现的,并不是所有存储引擎都有。



