MySQL 8.0新特性之原子DDL
?
文章來(lái)源:愛可生云數(shù)據(jù)庫(kù)
?
簡(jiǎn)介
?
MySQL8.0 開始支持原? DDL(atomic DDL),數(shù)據(jù)字典的更新,存儲(chǔ)引擎操作,寫?進(jìn)制日志結(jié)合成了一個(gè)事務(wù)。在沒(méi)有原?DDL之前,DROP TABLE test1,test2;如遇到server crash,可能會(huì)有test1被drop了,test2沒(méi)有被drop掉。下面來(lái)看下在MySQL8.0之前和MySQL8.0 數(shù)據(jù)字典的區(qū)別。
在MySQL8.0 之前,Data Dictionary除了存在與.FRM, .TRG, .OPT ?件外,還存在于系統(tǒng)表中(MyISAM ?事務(wù)引擎表中),在MySQL8.0 ,Data Dictionary 全部存在于Data Dictionary Storage Engine(即 InnoDB表中),這使crash recovery 維持原?性成為了可能。?
?
存儲(chǔ)引擎?持
?
?
目前,只有InnoDB存儲(chǔ)引擎?持原子DDL,為了實(shí)現(xiàn)原子DDL,Innodb要寫DDL logs 到 mysql.innodb_ddl_log 表,這是?個(gè)隱藏在mysql.ibd 數(shù)據(jù)字典表空間?的數(shù)據(jù)字典表。要看mysql.innodb_ddl_log 中的內(nèi)容,需要查看error log
原子DDL 操作步驟
?
準(zhǔn)備:創(chuàng)建所需的對(duì)象并將DDL?志寫入 mysql.innodb_ddl_log表中。DDL日志定義了如何前滾和回滾DDL操作。
執(zhí)行:執(zhí)?DDL操作。例如,為CREATE TABLE操作執(zhí)?創(chuàng)建。
提交:更新數(shù)據(jù)字典并提交數(shù)據(jù)字典事務(wù)。
Post-DDL:重播并從mysql.innodb_ddl_log表格中刪除DDL?志。為確保回滾可以安全執(zhí)??不引?不?致性,在此最后階段執(zhí)??件操作(如重命名或刪除數(shù)據(jù)文件)。這一階段還從 mysql.innodb_dynamic_metadata的數(shù)據(jù)字典表刪除的動(dòng)態(tài)元數(shù)據(jù)為了DROP TABLE,TRUNCATE和其它重建表的DDL操作。
?
?論事務(wù)是提交還是回滾,DDL日志都會(huì)mysql.innodb_ddl_log在Post-DDL階段重播并從表中刪除 。mysql.innodb_ddl_log如果服務(wù)器在DDL操作期間暫停,DDL?志應(yīng)該只保留在表中。在這種情況下,DDL?志會(huì)在恢復(fù)后重播并刪除。
?
?
在恢復(fù)情況下,當(dāng)服務(wù)器重新啟動(dòng)時(shí),可能會(huì)提交或回退DDL事務(wù)。如果在重做?志和?進(jìn)制日志中存在DDL操作的提交階段期間執(zhí)?的數(shù)據(jù)字典事務(wù),則該操作被認(rèn)為是成功的并且被前滾。否則,在InnoDB重放數(shù)據(jù)字典重做日志時(shí)回滾不完整的數(shù)據(jù)字典事務(wù) ,并且回滾DDL事務(wù)。?
原?DDL ?持類型
?
? DROP TABLES , all tables dropped or none
? DROP SCHEMA, all entities in the schema are dropped, or none
? Note that atomic DDL statements will be rolled back or committed even in case of crash, e.g. RENAME TABLES
? CREATE TABLE would be successfully committed or rolled back (no orphan ibd left)
? TRUNCATE TABLE (including InnoDB tables with FTS AUX tables) would be successfully committed or rolled back
? RENAME TABLES, all or none
? ALTER TABLE successful or not done
?
?
示例
結(jié)論
?
在MySQL8.0之前,alter table 操作在server crash的情況下,會(huì)遺留.frm,.ibd文件。MySQL8.0 能實(shí)現(xiàn)原?DDL(包括 DROP TABLE, DROP SCHEMA, CREATE TABLE, TRUNCATE TABLE, ALTER TABLE),alter table 操作,在server crash的情況下,不會(huì)遺留.frm,.ibd臨時(shí)文件。讓我們?起期待MySQL8.0 GA的到來(lái)吧!
?
參考:
https://www.youtube.com/watch?v=jM53hSU9L70
https://dev.mysql.com/doc/refman/8.0/en/atomic-ddl.html
轉(zhuǎn)載于:https://www.cnblogs.com/DataArt/p/10095653.html
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的MySQL 8.0新特性之原子DDL的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: luogu P1393 P3157 动
- 下一篇: Git冲突与解决方法【转】