美文网首页
mysql innodb功能特性

mysql innodb功能特性

作者: pureWeek | 来源:发表于2019-06-12 20:25 被阅读0次

1.Innodb 支持事务(ACID)

    原子性

整个事务中的所有操作要么全部完成,要么全部不完成,过程中如果发生异常,会被回滚到事务开始前的状态,就像这个事务一直没有开始一样

    一致性

在事务开始之前和事务结束后,数据库的完整性约束没有被破坏

    隔离性

如果有两个事务在相同的时间内,执行相同的操作,隔离性会保证每个事务在系统中认为只要该事务在使用系统,也就是串行,使得在一个时间只有一个请求用于同一数据

    持久性

在事务完成,该事务对数据所作的变更持久保留在数据库之中,不会被回滚

2.保证数据库一致性和永久性的配置

    innodb_flush_log_at_trx_commit=1

0:代表log buffer 每秒一次写入log file中,并且log file flush(刷到磁盘)中去,

1:在每次提交事务时mysql会把log buffer 的数据写入到log file中,并且flush(刷到磁盘)中去,该模式为系统默认

2: 每次事务提交时mysql都会把log buffer的数据写入到log file中,mysql 每秒一次执行一次flush(刷新到磁盘)操作

    sync_binlog=1

innodb_flush_log_at_trx_commit 和 sync_binlog 都设置为1,写入性能最差,但是能很好的宝座数据库一致性和永久性

    innodb_support_xa=1

多线程并发执行提交事务,按照事务的先后顺序写入binlog,如果关闭则binlog记录事务的顺序可能与实际不符,造成slave不一致

支持内部XA,确保binlog与innodb redo log之间数据一致性

现在mysql内部一个处理流程大概是这样:

1. prepare ,然后将redo log持久化到磁盘

2. 如果前面prepare成功,那么再继续将事务日志持久化到binlog

3. 如果前面成功,那么在redo log里面写上一个commit记录

如果再1,2步 crash,事务会回滚,如果3步crash(仅仅只是没有commit), 优先从redo log 将最近的检查点开始的事务读出来,参考binlog里面的事务进行恢复,因为binlog记录了这个事务,将这个事务进行commit,如果没有则将这个事务进行回滚。

3.二进制日志

binlog:当有数据写入到数据库的时候,还会同时把更新的sql写入到对应的binlog文件中,同时也被称为二进制日志,不管什么引擎对数据库进行操作都会产品操作日志

在/etc/my.cnf 中 log_bin=/xxx/xx  日志目录文件

4.innodb事务日志

1.redo log通常是物理日志,记录的是数据页的物理修改,而不是某一行或某几行修改成怎样怎样,它用来恢复提交后的物理数据页(恢复数据页,且只能恢复到最后一次提交的位置)。

redo log 是在数据准备修改前写入的,写入后,才能执行操作。redo log 记录的是数据库中每页的修改

2.undo用来回滚行记录到某个版本。undo log一般是逻辑日志,根据每行记录进行记录。

5.参考

https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html

相关文章

网友评论

      本文标题:mysql innodb功能特性

      本文链接:https://www.haomeiwen.com/subject/iqmrfctx.html