我电脑版本的mysql是5.7.29,此时InnoDB已经是默认的存储引擎

存储引擎是基于表的,而不是数据库

MyISAM和InnoDB有什么区别?MyISAM不支持事务和行级锁,不支持外键,最大缺陷为崩溃后无法安全恢复。

Mysql日志:常见的日志都有什么用?

(针对InnoDB引擎)

错误日志、二进制日志、一般查询日志、慢查询日志、事务日志(redo log,undo log)、中继日志(relay log)、DDL日志

 

慢查询日志

记录执行时间超过long_query_time的所有查询语句,再用EXPLAIN语句对其进行分析

二进制日志

记录了对Mysql数据库执行了更改的所有操作,包括表结构的变更,以及数据库执行的语句,表数据修改等

binlog的格式:

 statment模式、row模式、mixed模式

 binlog用来做什么?

主从复制,通过binlog同步数据,保证数据的一致性(和redis主从复制很像)

主库将数据库的变化写入到binlog

从库连接主库

从库创建一个IO线程向主库请求更新的binlog

主库会创建一个binlog dump线程来发送binlog,从库中的IO线程负责接收

从库的IO线程将接收的binlog写入到relay log中

从库的SQL线程读取relay log同步数据到本地

(明天再看看详细的,感觉有点问题)

binlog刷盘时机怎么选?

InnoDB,事务执行时放入binlog cache中,提交时持久化到binlog文件中

sync_binlog控制,0-N,0是不强制要求,其他的是每N个事务就写入磁盘

 

redo log

Buffer Pool中对应页的修改还没有持久化到磁盘,如果Mysql宕机的话,事务的更改就会出现问题

于是Mysql使用redo log保证事务的持久性,redo log记录页的修改,事务提交时,redo log刷到磁盘上,重启之后仍然能恢复未写入磁盘的数据,保证事务的持久性。

需要设置正确的刷盘策略

redo log写入属于顺序IO,且记录占空间很少

注意redo log和binlog的区别

undo log


每一个事务对数据的修改都会被记录到undo log,执行事务出现错误或者需要回滚的话,mysql可以利用undo log恢复到事务开始之前的状态

属于逻辑日志,记录的是sql语句,事务执行一条delete,undo log就会记录相对应的insert语句

在MVCC中也有用,明天再看。

 

posted on 2023-04-20 21:32  JohnWangzx  阅读(13)  评论(0编辑  收藏  举报