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服务器所在的数据中心的硬件和不同数据中心之间的网络连接。