【MySQL技術之旅】(5)該換換你的數據庫版本了,讓我們一同迎接8.0的到來哦!(初探篇)

語言: CN / TW / HK

theme: smartblue

本文已參與「掘力星計劃」,贏取創作大禮包,挑戰創作激勵金。

前提背景

MySQL關是一種關係數據庫管理系統,所使用的 SQL 語言是用於訪問數據庫的最常用的標準化語言,其特點為體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,在 Web應用方面 MySQL 是最好的 RDBMS(Relational Database Management System:關係數據庫管理系統)應用軟件之一。 本文主要講述壓縮版,因為安裝不太方便,但是功能效果都是一樣的!

MySQL8的介紹説明

MySQL 8.0是全球最受歡迎的開源數據庫的一個非常令人興奮的新版本,全面改進。一些關鍵的增強包括:

MySQL8的特性介紹

  • SQL窗口函數,公用表表達式,NOWAIT和SKIP LOCKED,降序索引,分組,正則表達式,字符集,成本模型和直方圖。

  • JSON擴展語法,新功能,改進排序和部分更新。使用JSON表函數,您可以使用JSON數據的SQL機制。

  • GIS地理支持。空間參考系統(SRS),以及SRS感知空間數據類型,空間索引和空間功能。

  • 可靠性 DDL語句已變得原子性和崩潰安全,元數據存儲在單個事務數據字典中。由InnoDB提供支持!

  • 可觀察性性能架構,信息架構,配置變量和錯誤記錄的顯着增強。

  • 可管理性遠程管理,撤消表空間管理和新的即時DDL。

  • 安全 OpenSSL改進,新的默認身份驗證,SQL角色,分解超級特權,密碼強度等等。

  • 性能 InnoDB在讀/寫工作負載,IO綁定工作負載和高爭用“熱點”工作負載方面明顯更好。

  • 增加了資源組功能,通過將用户線程映射到CPU,為用户提供一個選項,以針對特定硬件上的特定工作負載進行優化

開發者需要了解的特性!

MySQL開發人員需要新功能,而MySQL 8.0在諸如SQL,JSON,正則表達式和GIS等領域提供了許多新的和更多需求的功能。開發人員也希望能夠存儲Emojis,因此UTF8MB4現在是8.0中的默認字符集。最後,數據類型得到了改進,在BINARY數據類型上進行了按位操作,並且改進了IPv6和UUID功能。

下面簡要介紹 MySQL 8 中值得關注的新特性和改進。

  1. 性能:MySQL8.0的速度要比MySQL5.7 快 2 倍。MySQL 8.0 在以下方面帶來了更好的性能:讀/寫工作負載、IO 密集型工作負載、以及高競爭("hot spot"熱點競爭問題)工作負載。

  1. NoSQL:MySQL從5.7版本開始提供 NoSQL 存儲功能,目前在8.0版本中這部分功能也得到了更大的改進。該項功能消除了對獨立的 NoSQL 文檔數據庫的需求,而 MySQL 文檔存儲也為 schema-less 模式的 JSON 文檔提供了多文檔事務支持和完整的ACID合規性。

  1. 窗口函數(Window Functions):從 MySQL 8.0 開始,新增了一個叫窗口函數的概念,它可以用來實現若干新的查詢方式。窗口函數與 SUM()、COUNT() 這種集合函數類似,但它不會將多行查詢結果合併為一行,而是將結果放回多行當中。即窗口函數不需要 GROUP BY。
    • 窗口函數
      • MySQL 8.0提供了SQL窗口功能。與分組集合函數類似,窗口函數對一組行進行一些計算,例如COUNT或SUM。但是,如果分組聚合將這組行集合到一行中,則窗口函數將為結果集中的每一行執行聚合。
      • 窗口化的聚合函數:COUNT,SUM,AVG,MIN,MAX,BIT_OR,BIT_AND,BIT_XOR,STDDEV_POP(及其同義詞STD,STDDEV),STDDEV_SAMP,VAR_POP(及其同義詞VARIANCE)和VAR_SAMP。
      • 專門的窗口函數是:RANK,DENSE_RANK,PERCENT_RANK,CUME_DIST,NTILE,ROW_NUMBER,FIRST_VALUE,LAST_VALUE,NTH_VALUE,LEAD和LAG

對窗口函數(又名分析函數)的支持是一種頻繁的用户請求

  1. 隱藏索引:在 MySQL 8.0 中,索引可以被“隱藏”和“顯示”。當對索引進行隱藏時,它不會被查詢優化器所使用。我們可以使用這個特性用於性能調試,例如我們先隱藏一個索引,然後觀察其對數據庫的影響。如果數據庫性能有所下降,説明這個索引是有用的,然後將其“恢復顯示”即可;如果數據庫性能看不出變化,説明這個索引是多餘的,可以考慮刪掉。

  2. 降序索引:MySQL 8.0 為索引提供按降序方式進行排序的支持,在這種索引中的值也會按降序的方式進行排序。

  3. 公用表表達式(Common Table Expressions CTE):在複雜的查詢中使用嵌入式表時,使用 CTE 使得查詢語句更清晰。

    • MySQL 8.0提供[遞歸]公用表表達式(CTE)。非遞歸CTE可以解釋為“改進的派生表”,因為它允許派生表被多次引用。遞歸CTE是一組迭代構建的行:從最初的一組行開始,一個進程派生新的行,然後將這些新的行重新輸入到進程中,產生更多的行,等等,直到該過程不再生成行。
  4. UTF-8 編碼:從 MySQL 8 開始,使用 utf8mb4 作為 MySQL 的默認字符集。

  5. JSON:MySQL 8 大幅改進了對 JSON 的支持,添加了基於路徑查詢參數從 JSON 字段中抽取數據的 JSON_EXTRACT() 函數,以及用於將數據分別組合到 JSON 數組和對象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函數。

  6. 可靠性:InnoDB 現在支持表 DDL 的原子性,也就是 InnoDB 表上的 DDL 也可以實現事務完整性,要麼失敗回滾,要麼成功提交,不至於出現 DDL 時部分成功的問題,此外還支持 crash-safe 特性,元數據存儲在單個事務數據字典中。

  7. 高可用性(High Availability):InnoDB 集羣為您的數據庫提供集成的原生 HA 解決方案。

  8. 安全性:對 OpenSSL 的改進、新的默認身份驗證、SQL 角色、密碼強度、授權。

MySQL8的安裝介紹

  • 進入官網後,點擊"Dowload",然後頁面往下拉

  • 接下來看到的頁面是這樣的,紅色框框的鏈接就是mysql社區版,是免費的mysql版本,然後我們點擊這個框框的鏈接:

  • 接下來跳轉到這個頁面,在這裏,我們只要下載社區版的Server就可以了:

  • 下載免安裝版(windows以外的其他系統除外)

  • 至此,安裝包就下載好了!

注意,安裝的目錄應當放在指定位置,其次,絕對路徑中避免出現中文,推薦首選英文為命名條件!

MySQL解壓和配置環境變量

  1. 找一個文件夾放入解壓後的mysql,不建議放c盤,200M左右的sql解壓後大約接近1G

  2. 把MySQL解壓後的bin文件地址加入環境變量的path,方便終端尋找MySQL命令行。

MySQL 創建配置

下載完後,建議解壓到一個沒有中文的路徑,在解壓目錄創建my.ini配置文件(如果沒有就自己手動建立一個即可)

添加相關基本配置

````

這些是基本配置信息

[client]

設置mysql客户端默認字符集

default-character-set=utf8mb4 [mysqld]

設置3336端口

port = 3336

設置mysql的安裝目錄

basedir=D:\developer\installed\mysql8\mysql-8.0.12-winx64

設置 mysql數據庫的數據的存放目錄

datadir=D:\developer\installed\mysql8\mysql-8.0.12-winx64\data

允許最大連接數

max_connections=20

創建新表時將使用的默認存儲引擎

default-storage-engine=INNODB

允許連接失敗的次數。

max_connect_errors=10

服務端使用的字符集默認為utf8mb4

character-set-server=utf8mb4

創建新表時將使用的默認存儲引擎

使用“mysql_native_password”插件認證

mysql_native_password

default_authentication_plugin=mysql_native_password

設置時區為東八區,此項設置後,在連接MySQL的時候可以不用每次都手動設置時區

default-time-zone = '+8:00' ````

  • mysql給出的初始密碼太複雜了,一般我們需要改為一個簡單的密碼方便之後登陸,在MySQL8.0.4以前,執行:SET PASSWORD=PASSWORD(’[修改的密碼]’),即可更改密碼,但MySQL8.0.4開始,這樣默認是不行的。因為之前,MySQL的密碼認證插件是“mysql_native_password”,而現在使用的是“caching_sha2_password”。
  • 因為當前有很多數據庫工具和鏈接包都不支持“caching_sha2_password”,為了方便,暫時需要改回“mysql_native_password”認證插件。
初始化MySQL服務

採用cmd進入解壓後的bin目錄,輸入mysqld --initialize --console

  • mysql會在和bin同級目錄下產生data文件,即root的數據庫,併產生如下紅框中的隨機密碼(如果沒有密碼,可以使用mysql -uroot -p直接登陸),對應賬號為root。在沒有更改密碼前,需要記住這個密碼,後續登錄需要用到。
安裝MySQL服務
  • 還在bin 目錄下執行命令

mysqld --install [服務名]

後面的服務名可以不寫,默認的名字為 mysql。當然,如果電腦上需要安裝多個MySQL服務,就可以用不同的名字區分了,比如 liboMySQL

  • 在mysql的bin目錄下面執行: mysqld --install

    • 報錯信息如下:Install/Remove of the Service Denied

    • 解決辦法:打開cmd.exe程序的時候選擇“用管理員身份打開”。

出現上述信息則標識成功安裝

啟動MySQL服務

輸入:net start [服務名]

登錄MySQL服務
  • 登錄指定端口3336

命令如下,這時候會提示輸入密碼,使用上面安裝時給的隨機密碼,填入即可登錄成功,進入MySQL命令模式。 mysql -u root -p 3336

修改密碼

剛才生成的是臨時密碼,得改。

java 輸入ALTER USER "root"@"localhost" IDENTIFIED BY "新密碼";

卸載MySQL服務

停止服務

net stop libomysql(服務名)

卸載服務

mysqld --remove libomysql(服務名)

參考資料

  • https://www.cnblogs.com/2020javamianshibaodian/p/12933674.html
  • https://www.jianshu.com/p/647a596cb251
  • https://www.jb51.net/article/218165.htm
  • https://blog.csdn.net/qq_32448349/article/details/81701355
「其他文章」