MySQL 8.0.23 主要更新一覽(新特征解讀)

作者:管長龍
愛可生交付服務部 DBA,主要負責 MySQL 及 Redis 的日常問題處理,參與公司數據庫培訓的教研授課及開源社區的運營工作。
本文來源:原創投稿
* 愛可生開源社區出品,原創內容未經授權不得隨意使用,轉載請聯系小編並註明來源。

上篇文章給大傢介紹瞭MySQL8.0.23安裝超詳細教程 ,感興趣的朋友點擊查看。

MySQL 8.0.23 已於作日發佈,目前發佈頻率穩定保持 3 個月一次。本次發佈是維護版本,除瞭修復一些 Bug,此版本還增添瞭一些新功能。

一、不可見列

列可以定義為不可見,例如:

# 創建表時,可使其不可見(ALTER TABLE 也支持)
mysql> CREATE TABLE t1 (col1 INT, col2 INT INVISIBLE);
mysql> INSERT INTO t1 (col1, col2) VALUES(1, 2), (3, 4);

# SQL 語句通過顯式引用它來使用不可見列
mysql> SELECT * FROM t1;
+------+
| col1 |
+------+
|  1 |
|  3 |
+------+

# 如果未引用不可見的列,則該列將不會出現在結果中
mysql> SELECT col1, col2 FROM t1;
+------+------+
| col1 | col2 |
+------+------+
|  1 |  2 |
|  3 |  4 |
+------+------+

https://dev.mysql.com/doc/refman/8.0/en/invisible-columns.html

二、查詢屬性

允許應用程序為其查詢設置每個查詢元數據。

mysql> query_attributes n1 v1 n2 v2;
mysql> SELECT
     mysql_query_attribute_string('n1') AS 'attr 1',
     mysql_query_attribute_string('n2') AS 'attr 2',
     mysql_query_attribute_string('n3') AS 'attr 3';
+--------+--------+--------+
| attr 1 | attr 2 | attr 3 |
+--------+--------+--------+
| v1   | v2   | NULL  |
+--------+--------+--------+

https://dev.mysql.com/doc/refman/8.0/en/query-attribute-udfs.html#udf_mysql-query-attribute-string

三、安全

Doublewrite 文件頁加密

InnoDB 自動加密屬於加密表空間的 Doublewrite 文件頁面,無需采取任何措施。使用相關表空間的加密密鑰對 Doublewrite 文件頁進行加密。同一表空間中被寫入數據的加密頁面也會被寫入 Doublewrite 文件。屬於未加密表空間的 Doublewrite 文件頁面保持未加密狀態。在恢復過程中,加密的 Doublewrite 文件頁面是未加密狀態並檢查是否損壞。

https://dev.mysql.com/doc/refman/8.0/en/innodb-data-encryption.html

提高賬戶確定性

為瞭讓 TCP 連接匹配賬戶更具確定性,在匹配主機名指定的賬戶前,匹配賬戶的主機名部分將以以下順序檢查使用主機 IP 地址指定賬戶。

# 指定 IP 地址的帳戶
mysql> CREATE USER 'user_name'@'127.0.0.1';
mysql> CREATE USER 'user_name'@'198.51.100.44';

# 使用 CIDR 表示法指定為 IP 地址的帳戶
mysql> CREATE USER 'user_name'@'192.0.2.21/8';
mysql> CREATE USER 'user_name'@'198.51.100.44/16';

# 使用帶子網掩碼格式的指定為 IP 地址的賬戶
mysql> CREATE USER 'user_name'@'192.0.2.0/255.255.255.0';
mysql> CREATE USER 'user_name'@'198.51.0.0/255.255.0.0';

https://dev.mysql.com/doc/refman/8.0/en/connection-access.html

更精準的 FLUSH 權限

授予 RELOAD 權限的用戶可以執行各種操作。在某些情況下,為瞭使 DBA 避免授予 RELOAD 並使用戶權限更接近允許的操作,已對 FLUSH 操作的更精細的特權控制,以使客戶可以執行 FLUSH OPTIMIZER_COSTS,FLUSH STATUS,FLUSH USER_RESOURCES 和 FLUSH TABLES 語句,無需 RELOAD 權限。

https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#priv_reload

四、InnoDB

優化 TRUNCATE / DROP

當用戶對 InnoDB 表空間 TRUNCATE 或 DROP 操作:

  • 對有龐大緩沖池(>32GB)實例上的大表刪除
  • 對具有自適應哈希索引引用大量頁面的表空間
  • TRUNCATE 臨時表空間

以上情況,MySQL 現在將其標記為已刪除,然後從緩沖池懶惰地釋放屬於已刪除表空間的所有頁面,或者像釋放頁面一樣重用它們。

新增表空間 AUTOEXTEND_SIZE 屬性

InnoDB 常規表 CREATE / ALTER TABLESPACE 子句和獨立表空間的 CREATE / ALTER TABLE 子句新增自動擴展屬性。原表空間的增長大小已在 InnoDB 內部硬編碼為 1MB [默認](page_size * 一個范圍內的頁面數)。設置後,表空間的增長大小可以由用戶決定。

# 創建或修改表時指定擴展空間大小
mysql> CREATE TABLE t1 (c1 INT) AUTOEXTEND_SIZE = 4M;
mysql> ALTER TABLE t1 AUTOEXTEND_SIZE = 4M;

# 查詢該屬性值
mysql> SELECT NAME, AUTOEXTEND_SIZE FROM INFORMATION_SCHEMA.INNODB_TABLESPACES 
    WHERE NAME LIKE 'test/t1';
+---------+-----------------+
| NAME  | AUTOEXTEND_SIZE |
+---------+-----------------+
| test/t1 |     4194304 |
+---------+-----------------+

https://dev.mysql.com/doc/refman/8.0/en/innodb-tablespace-autoextend-size.html

新增 temptable_max_mmap 變量

新變量定義瞭 TempTable 存儲引擎在開始將內部臨時表數據存儲到 InnoDB 磁盤內部臨時表之前,被允許從內存映射文件分配的最大內存量。temptable_max_mmap = 0 設置將禁用從內存映射文件的分配。

https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_temptable_max_mmap

五、復制

術語替換

不推薦使用 CHANGE MASTER TO 語句,改用別名 CHANGE REPLICATION SOURCE TO。該語句的參數還具有別名,該別名用術語 SOURCE 代替術語 MASTER。例如,現在可以將 MASTER_HOST 和 MASTER_PORT 輸入為 SOURCE_HOST 和 SOURCE_PORT。START REPLICA | SLAVE 語句的參數 MASTER_LOG_POS 和 MASTER_LOG_FILE 現在具有別名 SOURCE_LOG_POS 和 SOURCE_LOG_FILE。語句的工作方式與以前相同,隻是每個語句使用的術語已更改。如果使用舊版本,則會發出棄用警告。

直接從禁用 GTID 的主機復制到啟用 GTID 的從機

CHANGE REPLICATION SOURCE TO 語句新增選項: ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS = [OFF,LOCAL,<UUID>]

允許數據在非 GTID 實例和 GTID 實例之間傳輸。

https://dev.mysql.com/doc/refman/8.0/en/replication-gtids-assign-anon.html

在 MTS 死鎖檢測基礎結構中包含 MDL 和 ACL 鎖

將提供多線程的 REPLICA 所需的線程序列化基礎結構與 MDL 和 ACL 訪問序列化基礎結構集成在一起,該多線程 REPLICA 與 SOURCE 保持相同的提交順序。其動機是能夠在 REPLICA 主動處理變更流時在 REPLICA 上執行任何客戶端語句。此類語句可能會創建死鎖,必須對其進行檢測,並最終將其破壞以繼續執行。

組復制

異步復制通道的自動連接故障轉移,將確保接收方的發送方列表與組復制成員身份更改同步。

六、X 協議

經典的 MySQL 協議,如果 SQL 查詢使用元數據鎖定或睡眠功能,則將定期檢查與服務器的連接以驗證其是否仍然有效。 如果不是,則可以停止查詢,以便它不會繼續消耗資源。以前,X 協議不執行這些檢查,並假定連接仍然有效。現在已為 X 協議添加瞭檢查。

從 MySQL 8.0.23 開始,服務器將通知所有客戶端有關它是剛剛關閉連接還是自行關閉的信息。客戶端可以使用此信息來決定重新連接是否有意義,然後重試。

七、其他

優化哈希聯接的哈希表的實現。目的是提高性能,使用更少的內存並改善內存控制。

用標準 C++11 替換瞭部分舊的 InnoDB 代碼。加強代碼中使用原子性的規則和語義,從而使代碼更符合標準。

八、棄用和移除

棄用 relay_log_info_repository 和 master_info_repository 。當用戶設置或讀取 relay_log_info_repository 或 master_info_repository 變量的值時,將出現棄用警告。未來,用於存儲復制配置和元數據的唯一選項將在事務系統表中。

不贊成使用 FLUSH HOSTS 語句,而建議使用 TRUNCATE performance_schema.host_cache,並將在以後的 MySQL 版本中刪除。

文章參考

MySQL 8.0.23 Release Notes:

https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-23.html

The MySQL 8.0.23 Maintenance Release is Generally Available

The MySQL 8.0.23 Maintenance Release is Generally Available

到此這篇關於MySQL 8.0.23 主要更新一覽(新特征解讀)的文章就介紹到這瞭,更多相關MySQL 8.0.23 更新內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: