一污淋、ACID 介紹
ACID
模型是針對那些對數(shù)據(jù)安全谨湘、可用性要求很高的應(yīng)用,在數(shù)據(jù)庫設(shè)計(jì)方面的一些準(zhǔn)則。
MySQL 的 InnoDB
存儲引擎作為 MySQL 的一個組件就嚴(yán)格地符合了 ACID
原則亏栈,從而保證了在服務(wù)崩潰或硬件出問題這樣的異常情況下顾翼,數(shù)據(jù)的完整性不會被破壞投放,結(jié)果不會丟失。
當(dāng)你的應(yīng)用對 ACID
有依賴時适贸,并不需要在一致性檢測和災(zāi)難恢復(fù)方面 重復(fù)造輪子
灸芳。
如果你在軟件層面有額外的安全措施或者有機(jī)器值得信賴的硬件,同時你的應(yīng)用也能夠容忍極小量的數(shù)據(jù)不一致性拜姿,也可以在 MySQL 中做一些配置烙样,犧牲一定 ACID
的可靠性來換取更好的性能。
二砾隅、InnoDB
中的 ACID
實(shí)現(xiàn)
1. ACID
的四個要求
-
Atomicity
误阻,原子性。 即:事務(wù)中的一組操作必須看做是一個不可分割的最小單位晴埂,要么同時成功究反,要不同時失敗。 -
Consistency
儒洛,一致性精耐。即:事務(wù)前后,不能對數(shù)據(jù)的一致性造成破壞琅锻。如:A/B轉(zhuǎn)賬卦停,轉(zhuǎn)賬前后兩人錢的綜合在事務(wù)前后是一樣的,狀態(tài)是一致的恼蓬。 -
Isolation
惊完,隔離性。即:多個事務(wù)中处硬,未提交的變更互相之間是不可見的小槐,和事務(wù)的隔離級別有關(guān)。 -
Durability
,持久性凿跳。即:事務(wù)對數(shù)據(jù)的變更必須是持久的件豌,即:寫入到磁盤上。
2. Atomicity
ACID
中的 Atomicity
主要涉及 InnoDB
的事務(wù)控嗜,包含:
- 事務(wù)的自動提交
autocommit
- 事務(wù)的回滾
rollback
- 事務(wù)的提交
commit
- 對
INFORMATION_SCHEMA
的一些數(shù)據(jù)操作
3. Consistency
ACID
中的 Consistency
主要涉及到 InnoDB
是如何保證處理過程中不被各種異常情況打斷或損壞茧彤,如軟件崩潰、硬件宕機(jī)等疆栏,包含:
-
InnoDB
的雙寫緩沖區(qū)doublewrite buffer
-
InnoDB
的災(zāi)難恢復(fù)crash recovery
4. Isolation
ACID
中的 Isolation
主要涉及到 InnoDB
的事務(wù)和事務(wù)的隔離級別曾掂,包含:
- 事務(wù)的自動提交
autocommit
-
set isolation level
語句 -
InnoDB
低粒度的行鎖,可以在INFORMATION_SCHEMA
中查看鎖細(xì)節(jié)
5. Durability
ACID
中的 Durability
涉及到 MySQL 和各種硬件的交互配置壁顶。由于 CPU遭殉、網(wǎng)絡(luò)、存儲設(shè)備等存在的各種可能博助,Durability
方面很難給出最佳的指導(dǎo)方案险污。包含:
- 配置項(xiàng)
innodb_doublewrite
,開啟或關(guān)閉InnoDB
的雙寫緩沖區(qū)doublewrite buffer
- 配置項(xiàng)
innodb_flush_log_at_trx_commit
富岳,控制InnoDB
將log buffer
寫入磁盤的策略蛔糯。 - 配置項(xiàng)
synch_binlog
,控制二進(jìn)制日志寫入磁盤的策略窖式。 - 配置項(xiàng)
innodb_file_per_table
蚁飒,開啟或關(guān)閉InnoDB
是否獨(dú)立于共享的表空間ibdata1
為每張表使用獨(dú)立的表空間。 - 各種存儲設(shè)備上的
write buffer
- 存儲設(shè)備的電池供電緩存
battery-backed cache
- 操作系統(tǒng)對
fsync()
的支持情況 - 整個服務(wù)器的不間斷電源
Uninterruptible power supply (UPS)
- 備份策略:備份了哪些數(shù)據(jù)萝喘?頻率如何淮逻?保存多久?