Mysql存储引擎和日志文件

mysql存储引擎

mysql大体可以分为三块:客户端、服务端、存储引擎
Mysql存储引擎和日志文件

主要有三种存储引擎

InnoDB :它是 MySQL 5.5 版本之后默认的存储引擎,最大的特点是支持事务、行级锁定、外键约束等。innodb默认把所有的数据文件放在表空间中,不会为每一单独的表保存一份数据文件。如果要单独使用一个文件保存,设置 set global innodb_file_per_table=on;

MyISAM:在 MySQL 5.5 版本之前是默认的存储引擎,不支持事务,也不支持外键,最大的特点是速度快,占用资源少。

Memory :使用系统内存作为存储介质,以便得到更快的响应速度。


日志系统

服务端 有binlog日志。

存储引擎 如果是innodbredolog和undolog两个日志,提供事务,保证了原子性。

有三种方式写入记录:

1、redolog和undolog都会把记录先写在Log Buffer(用户空间),在经过内核写入磁盘。

2、直接写到磁盘。

3、先写到内核空间,在写到磁盘。

RedoLog

当发生数据修改的时候,innodb引擎会先将记录写到redolog中,并更新内存。innodb会在合适的时间把记录同步到磁盘。

redolog是固定大小的,是循环写的过程,有头尾两个指针。

有了redolog,innodb就可以保证即使数据库发生异常重启,之前的记录也不会丢失 crash-safe。

UndoLog

undo log是为了实现事务的原子性。

在操作任何数据之前,先将数据备份到一个地方,然后进行数据的修改。如果用户执行了rollback,系统可以利用undolog 中的备份将数据恢复到事务开始前的状态。

undolog是逻辑日志,记录的是操作过程,可以理解成。当delete一条记录时,undolog中会记录一条对应的inset记录。

BinLog

服务端的日志文件。二进制日志。(默认是不开启的)

binlog是逻辑日志,记录的是这个语句的原始逻辑。

binlog是可以追加写的,不会覆盖之前的数据信息。

Mysql存储引擎和日志文件

保证binlog和redolog的结果是一致的。