作者:IT邦德
中國DBA聯盟(ACDU)成員,10余年DBA工作經驗,
Oracle、PostgreSQL ACE
CSDN博客專家及B站知名UP主,全網粉絲10萬+
擅長主流Oracle、MySQL、PG、高斯及Greenplum備份恢復,
安裝遷移,性能優化、故障應急處理
微信:jem_db
QQ交流群:587159446
公眾號:IT邦德
文章目錄
- 前言
- 1.MySQL版本變更
- 2.MySQL9.0功能進化
- 2.1 添加或更改的功能
- 2.2 棄用的功能
- 2.3 刪除的功能
- 3.MySQL9.0新版本體驗
- 3.1 安裝依賴
- 3.2 添加用戶及組
- 3.3 安裝包上傳解壓
- 3.4 正式安裝
- 3.5 初始化
- 3.4 啟動MySQL服務
- 3.5 登陸新增用戶
- 4.向量及JSON體驗
- 5.總結
前言
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_stmtmysql> 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.tar2.解壓
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/mysqlrpm -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.4 啟動MySQL服務
systemctl start mysqld
systemctl status mysqld
systemctl enable mysqld
3.5 登陸新增用戶
## 臨時密碼登陸
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的發展