炸裂,MySQL9.0創新版釋出!功能又進化了!
原創 MySQL 作者:wddwr7307914 時間:2024-07-02
10:44:58 976 0
作者:IT邦德 中國DBA聯盟(ACDU)成員,10餘年DBA工作經驗, Oracle、PostgreSQL ACE CSDN部落格專家及B站知名UP主,全網粉絲10萬+ 擅長主流Oracle、MySQL、PG、 高斯及Greenplum備份恢復, 安裝遷移,效能最佳化、故障應急處理 微信:jem_db QQ交流群:587159446 公眾號:IT邦德
前言
MySQL9.0創新版本已經正式釋出,這次功能確實進化了不少!
1.MySQL版本變更
Oracle每季度釋出一次MySQL更新,我平時也一直留意的官網的動態,2024年7月1推出了最新的 MySQL9.0創新版本.
MySQL釋出模型分為兩個主要軌道:LTS(長期支援)和創新。所有LTS和Innovation版本都包含錯誤和安全修復,並被視為生產級質量。
2.MySQL9.0功能進化
2.1 新增或更改的功能
1.從MySQL 9.0.0開始支援將 EXPLAIN ANALYZE的JSON輸出儲存到使用者變數中 EXPLAIN ANALYZE FORMAT=JSON INTO @variable select_stmt mysql> EXPLAIN FORMAT=JSON INTO @myupdate -> UPDATE a SET name2 = "garcia" WHERE id = 3; mysql> SELECT @myupdate, @mydelete\G *************************** 1. row *************************** @myupdate: { "query_block": { "select_id": 1, "table": { "update": true, "table_name": "a", "access_type": "range", "possible_keys": [ "PRIMARY" ], "key": "PRIMARY", "used_key_parts": [ "id" ], "key_length": "4", "ref": [ "const" ], "rows_examined_per_scan": 1, "filtered": "100.00", "attached_condition": "(`db`.`a`.`id` = 3)" } } }
2.Event DDL in prepared statements MySQL 9.0提供了對伺服器端準備語句的支援,那有什麼好處呢? a.減少每次執行語句時解析語句的開銷。 通常,資料庫應用程式處理大量幾乎相同的語句, 只更改子句中的文字或變數值, 如用於查詢和刪除的WHERE、用於更新的SET和用於插入的values。 b.防止SQL隱碼攻擊。 引數值可以包含未加轉義的SQL引號和分隔符。 --使用方法如下: mysql> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse'; mysql> SET @a = 3; mysql> SET @b = 4; mysql> EXECUTE stmt1 USING @a, @b; +------------+ | hypotenuse | +------------+ | 5 | +------------+ mysql> DEALLOCATE PREPARE stmt1;
3.新增2個效能架構系統變數表 (1)variables_metadata表 提供了有關係統變數的一般資訊。 這些資訊包括MySQL伺服器識別的每個系統變數的 名稱、範圍、型別、範圍(如適用)和描述。 (2)global_variable_attributes表 提供了有關伺服器分配給全域性系統變數的屬性值對的資訊。
2.2 棄用的功能
能架構variables_info表列的MIN_VALUE和MAX_VALUE列現在已被棄用, 請使用variables_metadata表中具有相同名稱的列
2.3 刪除的功能
為了向後相容,mysql_native_password在客戶端上仍然可用,因此mysql 9.0客戶端程式可以連線到早期版本的mysql伺服器。在MySQL 9.0中,以前版本的客戶端程式中內建的MySQL本地身份驗證外掛已轉換為必須在執行時載入的外掛。
其實從mysql 8.0中不推薦使用的mysql_native_password身份驗證外掛已被刪除。 伺服器現在拒絕來自不具有client_PLUGIN_AUTH 功能的舊客戶端程式的mysql_native身份驗證請求 由於此更改,9.0還刪除了以下伺服器選項和變數: --mysql本機密碼伺服器選項 --mysql本機密碼代理使用者伺服器選項 --default_authentication_plugin伺服器系統變數
3.MySQL9.0新版本體驗
以下是MySQL9.0支援的的平臺
以下是MySQL9.0下載的地址
https://dev.mysql.com/downloads/mysql/
3.1 安裝依賴
yum -y install lrzsz wget perl-Digest-MD5 yum -y install numactl yum -y install ncurses ncurses-devel openssl-devel bison gcc gcc-c++ make
3.2 新增使用者及組
groupadd mysql useradd -g mysql -d /home/mysql mysql passwd mysql
3.3 安裝包上傳解壓
1.壓縮包校驗 md5sum mysql-9.0.0-1.el8.x86_64.rpm-bundle.tar 47c7bd2b1b987049450d8081497f84c4 mysql-9.0.0-1.el8.x86_64.rpm-bundle.tar 2.解壓 tar -xvf mysql-9.0.0-1.el8.x86_64.rpm-bundle.tar -C /home/mysql/ 3.授權 chown -R mysql:mysql /home/mysql/ --安裝以下四個即可 mysql-community-common-9.0.0-1.el8.x86_64.rpm mysql-community-libs-9.0.0-1.el8.x86_64.rpm mysql-community-client-9.0.0-1.el8.x86_64.rpm mysql-community-server-9.0.0-1.el8.x86_64.rpm
3.4 正式安裝
安裝順序:包之間相互依賴,所以必須注意安裝順序 ✓ 先裝 common ✓ 再裝 libs ✓ 再裝 client ✓ 最後裝 server 注:root使用者下操作 [root@rhel8 ~]# cd /home/mysql rpm -ivh mysql-community-common-9.0.0-1.el8.x86_64.rpm rpm -ivh --force --nodeps mysql-community-libs-9.0.0-1.el8.x86_64.rpm rpm -ivh mysql-community-client-9.0.0-1.el8.x86_64.rpm --force --nodeps rpm -ivh mysql-community-server-9.0.0-1.el8.x86_64.rpm --force --nodeps
3.5 初始化
1.初始化 mysqld --initialize 2.授權 chown mysql:mysql /var/lib/mysql -R
3.6 啟動MySQL服務
systemctl start mysqld systemctl status mysqld systemctl enable mysqld
3.7 登陸新增使用者
## 臨時密碼登陸 grep 'temporary password' /var/log/mysqld.log mysql -uroot -p ## 修改本地使用者密碼 mysql> alter user root@'localhost' identified by 'root'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.00 sec) mysql> select Host,User from mysql.user; +-----------+------------------+ | Host | User | +-----------+------------------+ | localhost | mysql.infoschema | | localhost | mysql.session | | localhost | mysql.sys | | localhost | root | +-----------+------------------+ 4 rows in set (0.00 sec) ##新增遠端登陸 mysql> create user root@'%' identified by 'root'; mysql> grant all on *.* to root@'%' with grant option; mysql> flush privileges;
4.向量及JSON體驗
mysql> create database testdb; mysql> use testdb; mysql>CREATE TABLE vector_json ( id INT PRIMARY KEY, json_value JSON, vector_value vector ); --插入向量及JSON INSERT INTO vector_json (id, json_value,vector_value) VALUES (1, JSON_ARRAY(1.0, 2.0, 3.0,4.0), to_vector('[1,2,3,4]') ); select id, json_value, VECTOR_DIM(vector_value) from vector_json;
5.總結
Oracle每季度釋出一次MySQL更新,讓我持續關注MySQL的發展