mysql存储引擎
mysql大体可以分为三块:客户端、服务端、存储引擎
主要有三种存储引擎
InnoDB :它是 MySQL 5.5 版本之后默认的存储引擎,最大的特点是支持事务、行级锁定、外键约束等。innodb默认把所有的数据文件放在表空间中,不会为每一单独的表保存一份数据文件。如果要单独使用一个文件保存,设置 set global innodb_file_per_table=on;
MyISAM:在 MySQL 5.5 版本之前是默认的存储引擎,不支持事务,也不支持外键,最大的特点是速度快,占用资源少。
Memory :使用系统内存作为存储介质,以便得到更快的响应速度。
日志系统
服务端 有binlog日志。
存储引擎 如果是innodb 有redolog和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是可以追加写的,不会覆盖之前的数据信息。
保证binlog和redolog的结果是一致的。