手机看片精品高清国产日韩,色先锋资源综合网,国产哺乳奶水91在线播放,乱伦小说亚洲色图欧洲电影

淺談MySQL8.0新特性

2025-01-15 14:09:28 379

MySQL 8.0版本首次發布于2018年下旬,目前已經更新至8.0.26小版本。許多人在首次聽到8.0時,常會感到自己錯過了不少內容,畢竟目前最常用的版本仍是5.7。MySQL的版本差異較大,從下圖可以看出,6版本被定位為過渡版本,旨在引入“更加頻繁和及時的MySQL服務器版本”,而7版本則專門為集群版本預留。因此,8.0版本成為了MySQL常用應用場景的下一個重要版本號。


9c0ad89df3451e60d0cf2fead2060925.png

MySQL8.0除了給人以版本跨度大的感覺外,確實也做出了很多功能特性的新增或優化,下面藍隊云將選取部分新特性并通過介紹使大家能夠對新版本的MySQL有更好的了解。

一、My SQL數據字典

數據字典是數據庫重要的組成部分,是數據庫中各類元數據的集合,在MySQL8.0之前,數據庫的數據字典。


主要由以下幾部分組成:

  • frm 、.opt 、.par 、.TRN 、.TRG等與表、庫、分區、觸發器相關的操作系統文件;

  • information_schema中的非InnoDB系統表;

  • information_schema中的InnoDB系統表


這種數據字典被分布到多個地方的方式,并不利于元數據的統一管理,同時由于操作系統文件以及非InnoDB的系統表,均不支持事務,也影響到了MySQL DDL的ACID。因此在MySQL在8.0版本直后對于數據字典,做出了比較大的改進,一方面是移除了.frm 、.opt 、.par 、.TRN 、.TRG等操作系統文件,另一方面是將數據字典統一改進為InnoDB存儲引擎存儲。設計理念參照了Oracle數據庫的方式,將元數據信息存放在基表中,然后通過視圖的方式提供給用戶查詢。因此在8.0版本的information_schema中,我們可看到的數據字典信息如下:


image.png


新的數據字典為MySQL帶來兩個積極的變化,一就是這種直接查表并且可利用新增的數據字典緩存的訪問方式提升了INFORMATIONS_SCHEMA的查詢性能,二是對原子DDL的支持,即在DDL操作過程中出現錯誤的時候,是可以完整回退的,這在之前版本的DDL操作中是不支持的。


二、原子DDL

在8.0以前的版本中,MySQL是不支持原子DDL的,也就意味著一個DROP TABLE tab1,tab2;的語句由可能由于服務器crash或其他異常錯誤導致部分成功部分失敗。而隨8.0中數據字典的改進,數據字典的更新,存儲引擎操作,寫?進制日志結合成了一個事務,也就是實現了對原子DDL的支持。


其具體過程如下:

  • Prepare:創建需要的對象,并將ddl日志寫入到mysql.innodb_ddl_log;ddl日志記錄了如何前滾和回滾ddl操作。

  • Perform:執行ddl操作。

  • Commit:更新數據字典并提交。

  • post-ddl:重播并從mysql.innodb_ddl_log表格中刪除DDL?志。為確保回滾可以安全執??不引?不?致性,在此最后階段執??件操作(如重命名或刪除數據文件)。這一階段還從 mysql.innodb_dynamic_metadata的數據字典表刪除的動態元數據為了DROP TABLE,TRUNCATE和其它重建表的DDL操作。


原子DDL對于MySQL與其說是新特性,但更像是修復了8.0以前版本中的缺陷,使用戶對DDL操作的過程更為放心。


三、索引優化

隱藏索引、降序索引、函數索引再8.0版本中紛紛登場,熟悉Oracle的同學對這3中索引一定也不陌生,甚至在MySQL中的創建語法都是和Oracle相同的,此處就不再贅述。隱藏索引主要起到灰度的作用,可以利用其特性減少索引回收及發布可能帶來的風險,在運維過程中是種比較常用的手段。降序索引則針對具體的業務場景,配合特定的SQL使用可以大幅減少排序帶來的成本。而函數索引就更為靈活了,不過在Oracle不推薦使用函數索引,在MySQL中則更不推薦使用,函數索引作為臨時手段可以救火,但根本還是應從設計層面出發。


四、賬戶與安全

在MySQL賬戶和安全性方面,8.0版本也做出了一定程度的優化。


主要可分為以下幾個部分:


1. 創建及授權

在MySQL5.7的版本可以通過一條語句完成賬戶的創建授權操作

grant all privileges on *.* to '用戶名'@'主機' identified by '密碼';

在MySQL8.0則被拆成了兩步執行

create user '用戶名'@'主機' identified by '密碼';

grant all privileges on *.* to '用戶名'@'主機';


2. 認證插件更新

MySQL8.0版本的默認認證插件由mysql_native_password改為了caching_sha2_password,因此使用NAVICAT之類客戶端工具時需可能會遇到1251的認證錯誤。


3. 口令管理

新增了以下參數來控制口令修改策略

  • password_history:修改密碼不允許與最近幾次使用或的密碼重復;

  • password_reuse_interval:修改密碼不允許與最近多少天的使用過的密碼重復;

  • password_require_current:修改密碼是否需要提供當前的登錄密碼;


4. 角色

可以使用create role命令創建角色并對角色再進行多個權限的grant授予,最后再將角色賦予用戶,通過這種方式,對用戶權限的管理也變得更為清晰易操作。


賬戶安全這部分,給人的感受也是越來越接近Oracle數據庫,總的來說目的還是為了提升其安全性,但目前來看,認證插件遇到的問題還是較多的,主要原因在于有些常用的測試或管理工具還未能及時支持caching_sha2_password這種認證方式,因此很多環境再8.0仍然保持5.7的mysql_native_password認證設置。


除以上介紹的內容外,MySQL在8.0中也新增了很多JSON函數,使得普通格式數據可以方便快捷的轉換為JSON數據,同時也可對JSON格式數據進行判斷、校驗、合并提取等操作。SQL語法上也新增了with as的通用表達式。引擎方面對于Innodb引擎也有了較多的增強,如自增列持久化、死鎖檢測,甚至可以通過memcached實現類似NOSQL的簡單get操作。運維方面也增加了資源管理的功能,REDO及UNDO的使用也做出優化。總之MySQL 8.0在使用上帶來的變化還是非常豐富多彩的,我們應在大版本的迭代過程中,關注基礎軟件做出的積極調整,并合理的將其運用到系統建設工作中。


想了解更多技術小分享歡迎上藍隊云官網查詢,更多免費技術學習文檔,藍隊云期待與您一起探索。


提交成功!非常感謝您的反饋,我們會繼續努力做到更好!

這條文檔是否有幫助解決問題?

非常抱歉未能幫助到您。為了給您提供更好的服務,我們很需要您進一步的反饋信息:

在文檔使用中是否遇到以下問題: