15. 2 InnoDB和ACID模型

ACID模型是一系列数据库设计原则,主要是为了强调对于商业数据和关键应用很重要的可靠性。MySQL包含一些遵守ACID模型的组件,比如InnoDB存储引擎,在一些意外情况(比如软件故障和硬件故障)发生时,数据不会错乱。有了这些符合AICD的特性,你不需要再造轮子来进行一致性检查和数据恢复。如果你有额外的软件安全措施,可靠性很高的硬件,或者是应用可以容忍少量的数据丢失和不一致性,你可以调整MySQL的设置来在一些ACID特性上做出一些妥协,以达到更高的性能和吞吐量。

下面的章节讨论了MySQL特性,尤其是InnoDB存储引擎,与ACID模型的交互关系:

  • A: Atomicity(原子性)
  • C: Consistency(一致性)
  • I: Isolation(隔离性)
  • D: Durability(持久性)

原子性 #

原子性主要涉及InnoDB存储引擎的事务。相关MySQL特性包括:

  • autocommit (自动提交)设置。
  • COMMIT (提交)语句。
  • ROLLBACK (回滚)语句。

一致性 #

一致性主要涉及InnoDB保护数据的内部机制。相关MySQL特性包括:

  • InnoDB doublewrite buffer。见章节15.6.4 Doublewrite Buffer
  • InnoDB灾难恢复。见 InnoDB Crash Recovery 章节。

隔离性 #

隔离性主要涉及InnoDB的事务,尤其是每个事务的隔离级别。相关MySQL特性包括:

  • autocommit设置。
  • 事务隔离级别和SET TRANSACTION语句。见章节15.7.2.1 “Transaction Isolation Levels”
  • InnoDB锁的底层细节。可以从 INFORMATION_SCHEMA库(见章节15.15.2,“InnoDB INFORMATION_SCHEMA Transaction and Locking Information”)和Performance Schema库的 data_locks表和data_lock_waits表查看细节。

持久性 #

持久性涉及与你的硬件相关的MySQL软件特性。每个人的cpu,网络,存储设备都不一样,很难给出一个具体的指导原则(而且,这些指导原则可能包括 购买新硬件 )。相关MySQL特性包括:

  • InnoDB doublewrite buffer。见章节 15.6.4, “Doublewrite Buffer”
  • 变量 innodb_flush_log_at_trx_commit。
  • 变量 sync_binlog。
  • 变量 innodb_file_per_table。
  • 存储设备的写缓冲区,比如磁盘驱动,SSD,或者是RAID阵列。
  • 存储设备的电池备份缓存。
  • 运行MySQL的操作系统,特别是对于系统调用fsync()的支持。
  • UPS,用于保护运行MySQL的服务器和存储设备。
  • 你的备份策略,比如备份频率、备份类型,以及备份保留期限。
  • 对于分布式或托管的数据应用,MySQL服务器所在的数据中心的硬件和不同数据中心之间的网络连接。