- 工信部備案號 滇ICP備05000110號-1
- 滇公安備案 滇53010302000111
- 增值電信業(yè)務(wù)經(jīng)營許可證 B1.B2-20181647、滇B1.B2-20190004
- 云南互聯(lián)網(wǎng)協(xié)會理事單位
- 安全聯(lián)盟認證網(wǎng)站身份V標(biāo)記
- 域名注冊服務(wù)機構(gòu)許可:滇D3-20230001
- 代理域名注冊服務(wù)機構(gòu):新網(wǎng)數(shù)碼
MySQL 8.0版本首次發(fā)布于2018年下旬,目前已經(jīng)更新至8.0.26小版本。許多人在首次聽到8.0時,常會感到自己錯過了不少內(nèi)容,畢竟目前最常用的版本仍是5.7。MySQL的版本差異較大,從下圖可以看出,6版本被定位為過渡版本,旨在引入“更加頻繁和及時的MySQL服務(wù)器版本”,而7版本則專門為集群版本預(yù)留。因此,8.0版本成為了MySQL常用應(yīng)用場景的下一個重要版本號。
MySQL8.0除了給人以版本跨度大的感覺外,確實也做出了很多功能特性的新增或優(yōu)化,下面藍隊云將選取部分新特性并通過介紹使大家能夠?qū)π掳姹镜腗ySQL有更好的了解。
一、My SQL數(shù)據(jù)字典
數(shù)據(jù)字典是數(shù)據(jù)庫重要的組成部分,是數(shù)據(jù)庫中各類元數(shù)據(jù)的集合,在MySQL8.0之前,數(shù)據(jù)庫的數(shù)據(jù)字典。
主要由以下幾部分組成:
frm 、.opt 、.par 、.TRN 、.TRG等與表、庫、分區(qū)、觸發(fā)器相關(guān)的操作系統(tǒng)文件;
information_schema中的非InnoDB系統(tǒng)表;
information_schema中的InnoDB系統(tǒng)表
這種數(shù)據(jù)字典被分布到多個地方的方式,并不利于元數(shù)據(jù)的統(tǒng)一管理,同時由于操作系統(tǒng)文件以及非InnoDB的系統(tǒng)表,均不支持事務(wù),也影響到了MySQL DDL的ACID。因此在MySQL在8.0版本直后對于數(shù)據(jù)字典,做出了比較大的改進,一方面是移除了.frm 、.opt 、.par 、.TRN 、.TRG等操作系統(tǒng)文件,另一方面是將數(shù)據(jù)字典統(tǒng)一改進為InnoDB存儲引擎存儲。設(shè)計理念參照了Oracle數(shù)據(jù)庫的方式,將元數(shù)據(jù)信息存放在基表中,然后通過視圖的方式提供給用戶查詢。因此在8.0版本的information_schema中,我們可看到的數(shù)據(jù)字典信息如下:
新的數(shù)據(jù)字典為MySQL帶來兩個積極的變化,一就是這種直接查表并且可利用新增的數(shù)據(jù)字典緩存的訪問方式提升了INFORMATIONS_SCHEMA的查詢性能,二是對原子DDL的支持,即在DDL操作過程中出現(xiàn)錯誤的時候,是可以完整回退的,這在之前版本的DDL操作中是不支持的。
二、原子DDL
在8.0以前的版本中,MySQL是不支持原子DDL的,也就意味著一個DROP TABLE tab1,tab2;的語句由可能由于服務(wù)器crash或其他異常錯誤導(dǎo)致部分成功部分失敗。而隨8.0中數(shù)據(jù)字典的改進,數(shù)據(jù)字典的更新,存儲引擎操作,寫?進制日志結(jié)合成了一個事務(wù),也就是實現(xiàn)了對原子DDL的支持。
其具體過程如下:
Prepare:創(chuàng)建需要的對象,并將ddl日志寫入到mysql.innodb_ddl_log;ddl日志記錄了如何前滾和回滾ddl操作。
Perform:執(zhí)行ddl操作。
Commit:更新數(shù)據(jù)字典并提交。
post-ddl:重播并從mysql.innodb_ddl_log表格中刪除DDL?志。為確?;貪L可以安全執(zhí)??不引?不?致性,在此最后階段執(zhí)??件操作(如重命名或刪除數(shù)據(jù)文件)。這一階段還從 mysql.innodb_dynamic_metadata的數(shù)據(jù)字典表刪除的動態(tài)元數(shù)據(jù)為了DROP TABLE,TRUNCATE和其它重建表的DDL操作。
原子DDL對于MySQL與其說是新特性,但更像是修復(fù)了8.0以前版本中的缺陷,使用戶對DDL操作的過程更為放心。
三、索引優(yōu)化
隱藏索引、降序索引、函數(shù)索引再8.0版本中紛紛登場,熟悉Oracle的同學(xué)對這3中索引一定也不陌生,甚至在MySQL中的創(chuàng)建語法都是和Oracle相同的,此處就不再贅述。隱藏索引主要起到灰度的作用,可以利用其特性減少索引回收及發(fā)布可能帶來的風(fēng)險,在運維過程中是種比較常用的手段。降序索引則針對具體的業(yè)務(wù)場景,配合特定的SQL使用可以大幅減少排序帶來的成本。而函數(shù)索引就更為靈活了,不過在Oracle不推薦使用函數(shù)索引,在MySQL中則更不推薦使用,函數(shù)索引作為臨時手段可以救火,但根本還是應(yīng)從設(shè)計層面出發(fā)。
四、賬戶與安全
在MySQL賬戶和安全性方面,8.0版本也做出了一定程度的優(yōu)化。
主要可分為以下幾個部分:
1. 創(chuàng)建及授權(quán)
在MySQL5.7的版本可以通過一條語句完成賬戶的創(chuàng)建授權(quán)操作
grant all privileges on *.* to '用戶名'@'主機' identified by '密碼';
在MySQL8.0則被拆成了兩步執(zhí)行
create user '用戶名'@'主機' identified by '密碼';
grant all privileges on *.* to '用戶名'@'主機';
2. 認證插件更新
MySQL8.0版本的默認認證插件由mysql_native_password改為了caching_sha2_password,因此使用NAVICAT之類客戶端工具時需可能會遇到1251的認證錯誤。
3. 口令管理
新增了以下參數(shù)來控制口令修改策略
password_history:修改密碼不允許與最近幾次使用或的密碼重復(fù);
password_reuse_interval:修改密碼不允許與最近多少天的使用過的密碼重復(fù);
password_require_current:修改密碼是否需要提供當(dāng)前的登錄密碼;
4. 角色
可以使用create role命令創(chuàng)建角色并對角色再進行多個權(quán)限的grant授予,最后再將角色賦予用戶,通過這種方式,對用戶權(quán)限的管理也變得更為清晰易操作。
賬戶安全這部分,給人的感受也是越來越接近Oracle數(shù)據(jù)庫,總的來說目的還是為了提升其安全性,但目前來看,認證插件遇到的問題還是較多的,主要原因在于有些常用的測試或管理工具還未能及時支持caching_sha2_password這種認證方式,因此很多環(huán)境再8.0仍然保持5.7的mysql_native_password認證設(shè)置。
除以上介紹的內(nèi)容外,MySQL在8.0中也新增了很多JSON函數(shù),使得普通格式數(shù)據(jù)可以方便快捷的轉(zhuǎn)換為JSON數(shù)據(jù),同時也可對JSON格式數(shù)據(jù)進行判斷、校驗、合并提取等操作。SQL語法上也新增了with as的通用表達式。引擎方面對于Innodb引擎也有了較多的增強,如自增列持久化、死鎖檢測,甚至可以通過memcached實現(xiàn)類似NOSQL的簡單get操作。運維方面也增加了資源管理的功能,REDO及UNDO的使用也做出優(yōu)化??傊甅ySQL 8.0在使用上帶來的變化還是非常豐富多彩的,我們應(yīng)在大版本的迭代過程中,關(guān)注基礎(chǔ)軟件做出的積極調(diào)整,并合理的將其運用到系統(tǒng)建設(shè)工作中。
想了解更多技術(shù)小分享歡迎上藍隊云官網(wǎng)查詢,更多免費技術(shù)學(xué)習(xí)文檔,藍隊云期待與您一起探索。
售前咨詢
售后咨詢
備案咨詢
二維碼
TOP