【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
「其他文章」