對于MySQL的歷史,相信很多人早已耳熟能詳逻淌,這里就不要贅述。下面僅從產(chǎn)品特性的角度梳理其發(fā)展過程中的里程碑事件疟暖。
1995年卡儒,MySQL 1.0發(fā)布,僅供內(nèi)部使用俐巴。
1996年骨望,MySQL 3.11.1發(fā)布,直接跳過了MySQL 2.x版本欣舵。
1999年擎鸠,MySQL AB公司成立。同年缘圈,發(fā)布MySQL 3.23劣光,該版本集成了Berkeley DB存儲(chǔ)引擎。該引擎由Sleepycat公司開發(fā)糟把,支持事務(wù)绢涡。在集成該引擎的過程中,對源碼進(jìn)行了改造遣疯,為后續(xù)可插拔式存儲(chǔ)引擎架構(gòu)奠定了基礎(chǔ)雄可。
2000年,ISAM升級為MyISAM存儲(chǔ)引擎。同年数苫,MySQL基于GPL協(xié)議開放源碼聪舒。
2002年,MySQL 4.0發(fā)布虐急,集成了后來大名鼎鼎的InnoDB存儲(chǔ)引擎箱残。該引擎由Innobase公司開發(fā),支持事務(wù)戏仓,支持行級鎖疚宇,適用于OLTP等高并發(fā)場景。
2005年赏殃,MySQL 5.0發(fā)布敷待,開始支持游標(biāo),存儲(chǔ)過程仁热,觸發(fā)器榜揖,視圖,XA事務(wù)等特性抗蠢。同年举哟,Oracle收購Innobase公司。
2008年迅矛,Sun以10億美金收購MySQL AB妨猩。同年,發(fā)布MySQL 5.1秽褒,其開始支持定時(shí)器(Event scheduler)拒贱,分區(qū)节仿,基于行的復(fù)制等特性。
2009年,Oracle以74億美金收購Sun公司笼吟。
MySQL 5.5
2010年春畔,MySQL 5.5發(fā)布仗谆,其包括如下重要特性及更新碗啄。
- InnoDB代替MyISAM成為MySQL默認(rèn)的存儲(chǔ)引擎。
- 多核擴(kuò)展犁钟,能更充分地使用多核CPU棱诱。
- InnoDB的性能提升,包括支持索引的快速創(chuàng)建特纤,表壓縮军俊,I/O子系統(tǒng)的性能提升,PURGE操作從主線程中剝離出來捧存,Buffer Pool可拆分為多個(gè)Instances粪躬。
- 半同步復(fù)制担败。
- 引入utf8mb4字符集,可用來存儲(chǔ)emoji表情镰官。
- 引入metadata locks(元數(shù)據(jù)鎖)提前。
- 分區(qū)表的增強(qiáng),新增兩個(gè)分區(qū)類型:RANGE COLUMNS和LIST COLUMNS泳唠。
- MySQL企業(yè)版引入線程池狈网。
- 可配置IO讀寫線程的數(shù)量(innodb_read_io_threads,innodb_write_io_threads)笨腥。在此之前拓哺,其數(shù)量為1,且不可配置脖母。
- 引入innodb_io_capacity選項(xiàng)士鸥,用于控制臟頁刷新的數(shù)量。
MySQL 5.6
2013年谆级,MySQL 5.6發(fā)布烤礁,其包括如下重要特性及更新。
- GTID復(fù)制肥照。
- 無損復(fù)制脚仔。
- 延遲復(fù)制。
- 基于庫級別的并行復(fù)制舆绎。
- mysqlbinlog可遠(yuǎn)程備份binlog鲤脏。
- 對TIME, DATETIME和TIMESTAMP進(jìn)行了重構(gòu),可支持小數(shù)秒吕朵。DATETIME的空間需求也從之前的8個(gè)字節(jié)減少到5個(gè)字節(jié)凑兰。
- Online DDL。ALTER操作不再阻塞DML边锁。
- 可傳輸表空間(transportable tablespaces)。
- 統(tǒng)計(jì)信息的持久化波岛。避免主從之間或數(shù)據(jù)庫重啟后茅坛,同一個(gè)SQL的執(zhí)行計(jì)劃有差異。
- 全文索引则拷。
- InnoDB Memcached plugin贡蓖。
- EXPLAIN可用來查看DELETE,INSERT煌茬,REPLACE斥铺,UPDATE等DML操作的執(zhí)行計(jì)劃,在此之前坛善,只支持SELECT操作晾蜘。
- 分區(qū)表的增強(qiáng)邻眷,包括最大可用分區(qū)數(shù)增加至8192,支持分區(qū)和非分區(qū)表之間的數(shù)據(jù)交換剔交,操作時(shí)顯式指定分區(qū)肆饶。
- Redo Log總大小的限制從之前的4G擴(kuò)展至512G。
- Undo Log可保存在獨(dú)立表空間中岖常,因其是隨機(jī)IO驯镊,更適合放到SSD中。但仍然不支持空間的自動(dòng)回收竭鞍。
- 可dump和load Buffer pool的狀態(tài)板惑,避免數(shù)據(jù)庫重啟后需要較長的預(yù)熱時(shí)間。
- InnoDB內(nèi)部的性能提升偎快,包括拆分kernel mutex冯乘,引入獨(dú)立的刷新線程,可設(shè)置多個(gè)purge線程滨砍。
- 優(yōu)化器性能提升往湿,引入了ICP,MRR惋戏,BKA等特性领追,針對子查詢進(jìn)行了優(yōu)化。
可以說响逢,MySQL 5.6是MySQL歷史上一個(gè)里程碑式的版本绒窑,這也是目前生產(chǎn)上應(yīng)用得最廣泛的版本。
MySQL 5.7
2015年舔亭,MySQL 5.7發(fā)布些膨,其包括如下重要特性及更新。
- 組復(fù)制
- InnoDB Cluster
- 多源復(fù)制
- 增強(qiáng)半同步(AFTER_SYNC)
- 基于WRITESET的并行復(fù)制钦铺。
- 在線開啟GTID復(fù)制订雾。
- 在線設(shè)置復(fù)制過濾規(guī)則。
- 在線修改Buffer pool的大小矛洞。
- 在同一長度編碼字節(jié)內(nèi)洼哎,修改VARCHAR的大小只需修改表的元數(shù)據(jù),無需創(chuàng)建臨時(shí)表沼本。
- 可設(shè)置NUMA架構(gòu)的內(nèi)存分配策略(innodb_numa_interleave)噩峦。
- 透明頁壓縮(Transparent Page Compression)。
- UNDO表空間的自動(dòng)回收抽兆。
- 查詢優(yōu)化器的重構(gòu)和增強(qiáng)识补。
- 可查看當(dāng)前正在執(zhí)行的SQL的執(zhí)行計(jì)劃(EXPLAIN FOR CONNECTION)。
- 引入了查詢改寫插件(Query Rewrite Plugin)辫红,可在服務(wù)端對查詢進(jìn)行改寫凭涂。
- EXPLAIN FORMAT=JSON會(huì)顯示成本信息祝辣,這樣可直觀的比較兩種執(zhí)行計(jì)劃的優(yōu)劣。
- 引入了虛擬列导盅,類似于Oracle中的函數(shù)索引较幌。
- 新實(shí)例不再默認(rèn)創(chuàng)建test數(shù)據(jù)庫及匿名用戶。
- 引入ALTER USER命令白翻,可用來修改用戶密碼乍炉,密碼的過期策略,及鎖定用戶等滤馍。
- mysql.user表中存儲(chǔ)密碼的字段從password修改為authentication_string岛琼。
- 表空間加密。
- 優(yōu)化了Performance Schema巢株,其內(nèi)存使用減少槐瑞。
- Performance Schema引入了眾多instrumentation。常用的有Memory usage instrumentation阁苞,可用來查看MySQL的內(nèi)存使用情況困檩,Metadata Locking Instrumentation,可用來查看MDL的持有情況那槽,Stage Progress instrumentation悼沿,可用來查看Online DDL的進(jìn)度。
- 同一觸發(fā)事件(INSERT骚灸,DELETE糟趾,UPDATE),同一觸發(fā)時(shí)間(BEFORE甚牲,AFTER)义郑,允許創(chuàng)建多個(gè)觸發(fā)器。在此之前丈钙,只允許創(chuàng)建一個(gè)觸發(fā)器非驮。
- InnoDB原生支持分區(qū)表,在此之前雏赦,是通過ha_partition接口來實(shí)現(xiàn)的院尔。
- 分區(qū)表支持可傳輸表空間特性。
- 集成了SYS數(shù)據(jù)庫喉誊,簡化了MySQL的管理及異常問題的定位。
- 原生支持JSON類型纵顾,并引入了眾多JSON函數(shù)伍茄。
- 引入了新的邏輯備份工具-mysqlpump,支持表級別的多線程備份施逾。
- 引入了新的客戶端工具-mysqlsh敷矫,其支持三種語言:JavaScript, Python and SQL例获。兩種API:X DevAPI,AdminAPI曹仗,其中榨汤,前者可將MySQL作為文檔型數(shù)據(jù)庫進(jìn)行操作,后者用于管理InnoDB Cluster怎茫。
- mysql_install_db被mysqld --initialize代替收壕,用來進(jìn)行實(shí)例的初始化。
- 原生支持systemd轨蛤。
- 引入了super_read_only選項(xiàng)蜜宪。
- 可設(shè)置SELECT操作的超時(shí)時(shí)長(max_execution_time)。
- 可通過SHUTDOWN命令關(guān)閉MySQL實(shí)例祥山。
- 引入了innodb_deadlock_detect選項(xiàng)圃验,在高并發(fā)場景下,可使用該選項(xiàng)來關(guān)閉死鎖檢測缝呕。
- 引入了Optimizer Hints澳窑,可在語句級別控制優(yōu)化器的行為,如是否開啟ICP供常,MRR等摊聋,在此之前,只有Index Hints话侧。
- GIS的增強(qiáng)栗精,包括使用Boost.Geometry替代之前的GIS算法,InnoDB開始支持空間索引瞻鹏。
MySQL 8.0
2018年悲立,MySQL 8.0發(fā)布,其包括如下重要特性及更新新博。
- 引入了原生的薪夕,基于InnoDB的數(shù)據(jù)字典。數(shù)據(jù)字典表位于mysql庫中赫悄,對用戶不可見原献,同mysql庫的其它系統(tǒng)表一樣,保存在數(shù)據(jù)目錄下的mysql.ibd文件中埂淮。不再置于mysql目錄下姑隅。
- Atomic DDL。
- 重構(gòu)了INFORMATION_SCHEMA倔撞,其中讲仰,部分表已重構(gòu)為基于數(shù)據(jù)字典的視圖,在此之前痪蝇,其為臨時(shí)表鄙陡。
- PERFORMANCE_SCHEMA查詢性能提升冕房,其已內(nèi)置多個(gè)索引。
- 不可見索引(Invisible index)趁矾。
- 降序索引耙册。
- 直方圖。
- 公用表表達(dá)式(Common table expressions)毫捣。
- 窗口函數(shù)(Window functions)详拙。
- 角色(Role)。
- 資源組(Resource Groups)培漏,可用來控制線程的優(yōu)先級及其能使用的資源溪厘,目前,能被管理的資源只有CPU牌柄。
- 引入了innodb_dedicated_server選項(xiàng)畸悬,可基于服務(wù)器的內(nèi)存來動(dòng)態(tài)設(shè)置innodb_buffer_pool_size,innodb_log_file_size和innodb_flush_method珊佣。
- 快速加列(ALGORITHM=INSTANT)蹋宦。
- JSON字段的部分更新(JSON Partial Updates)。
- 自增主鍵的持久化咒锻。
- 可持久化全局變量(SET PERSIST)冷冗。
- 默認(rèn)字符集由latin1修改為utf8mb4。
- 默認(rèn)開啟UNDO表空間惑艇,且支持在線調(diào)整數(shù)量(innodb_undo_tablespaces)蒿辙。在MySQL 5.7中,默認(rèn)不開啟滨巴,若要開啟思灌,只能初始化時(shí)設(shè)置。
- 備份鎖恭取。
- Redo Log的優(yōu)化泰偿,包括允許多個(gè)用戶線程并發(fā)寫入log buffer,可動(dòng)態(tài)修改innodb_log_buffer_size的大小蜈垮。
- 默認(rèn)的認(rèn)證插件由mysql_native_password更改為caching_sha2_password耗跛。
- 默認(rèn)的內(nèi)存臨時(shí)表由MEMORY引擎更改為TempTable引擎,相比于前者攒发,后者支持以變長方式存儲(chǔ)VARCHAR调塌,VARBINARY等變長字段。從MySQL 8.0.13開始惠猿,TempTable引擎支持BLOB字段羔砾。
- Grant不再隱式創(chuàng)建用戶。
- SELECT ... FOR SHARE和SELECT ... FOR UPDATE語句中引入NOWAIT和SKIP LOCKED選項(xiàng),解決電商場景熱點(diǎn)行問題蜒茄。
- 正則表達(dá)式的增強(qiáng),新增了4個(gè)相關(guān)函數(shù)餐屎,REGEXP_INSTR()檀葛,REGEXP_LIKE(),REGEXP_REPLACE()腹缩,REGEXP_SUBSTR()屿聋。
- 查詢優(yōu)化器在制定執(zhí)行計(jì)劃時(shí),會(huì)考慮數(shù)據(jù)是否在Buffer Pool中藏鹊。而在此之前润讥,是假設(shè)數(shù)據(jù)都在磁盤中。
- ha_partition接口從代碼層移除楚殿,如果要使用分區(qū)表脆粥,只能使用InnoDB存儲(chǔ)引擎蟹倾。
- 引入了更多細(xì)粒度的權(quán)限來替代SUPER權(quán)限肌厨,現(xiàn)在授予SUPER權(quán)限會(huì)提示warning。
- GROUP BY語句不再隱式排序竖配。
- MySQL 5.7引入的表空間加密特性可對Redo Log和Undo Log進(jìn)行加密。
- information_schema中的innodb_locks和innodb_lock_waits表被移除,取而代之的是performance_schema中的data_locks和data_lock_waits表盯漂。
- 引入performance_schema.variables_info表,記錄了參數(shù)的來源及修改情況空郊。
- 增加了對于客戶端報(bào)錯(cuò)信息的統(tǒng)計(jì)(performance_schema.events_errors_summary_xxx)廓旬。
- 可統(tǒng)計(jì)查詢的響應(yīng)時(shí)間分布(call sys.ps_statement_avg_latency_histogram())。
- 支持直接修改列名(ALTER TABLE ... RENAME COLUMN old_name TO new_name)旁赊。
- 用戶密碼可設(shè)置重試策略(Reuse Policy)竟闪。
- 移除PASSWORD()函數(shù)妖爷。這就意味著無法通過“SET PASSWORD ... = PASSWORD('auth_string') ”命令修改用戶密碼理朋。
- 代碼層移除Query Cache模塊絮识,故Query Cache相關(guān)的變量和操作均不再支持。
- BLOB, TEXT, GEOMETRY和JSON字段允許設(shè)置默認(rèn)值嗽上。
- 可通過RESTART命令重啟MySQL實(shí)例次舌。
需要注意的是,上面提到的發(fā)布兽愤,一般指的是GA版本彼念。
來挪圾,看看MySQL 5.6, 5.7, 8.0的新特性
https://www.cnblogs.com/ivictor/p/9807284.html