我电脑版本的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中也有用,明天再看。
标签:binlog,事务,log,一下,线程,mysql,日志,redo From: https://www.cnblogs.com/WZXwzx/p/17338352.html