type
status
date
slug
summary
tags
category
icon
password
Generated Invisible Primary Keys (GIPKs)
MySQL從 8.0.30 開始支援 GIPK 模式,此模式會在沒有顯式 PK 的 InnoDB 表中添加 GIPK,添加的 GIPK 欄位結構如下:
預設情況下不開啟此模式,如需開啟 GIPK 模式需將
sql_generate_invisible_primary_key
調整為 ON。需注意若此參數僅在 replica 設置,replication 線程從 source 跟下來的表不會產生 GIPK。GIPK 模式產生的 my_row_id 此欄位不可進行修改,唯一的例外是修改其可見性:
GIPK 模式只支援 CREATE TABLE … SELECT 的語句在 row-based 下的 replication。
此版本的 mysqldump 支援
--skip-generate-invisible-primary-key
來排除 GIPK 的輸出。範例如下:
添加功能
- innodb_doublewrite 新增 2 個值:
- DETECT_ONLY:只有 metadata 被寫入 dublewrite buffer,因此無法用來修復不完整的 page。
- DETECT_AND_RECOVER:等同於設置為
ON
,完全啟用 duoblewrite buffer。
- redo log 可以動態調整
- 新增
innodb_redo_log_capacity
變量可以動態調整 redo log 佔用的 disk 空間大小。 - 棄用
innodb_log_files_in_group
和innodb_log_file_size
。 innodb_redo_log_capacity
=innodb_log_files_in_group
*innodb_log_file_size
。- redo log 位置調整:
- 透過
performance_schema.innodb_redo_log_files
可以確認每個 redo log 所包含的 LSN 範圍。
8.0.30 之前 redo log 在 data_dir 的 2 個 redo log:
ib_logfile0
、ib_logfile1
。8.0.30 之後 data_dir 底下還會有一個
#innodb_redo
的目錄,裡面會有 32 個 redo log,每個 redo log 的大小是 innodb_redo_log_capacity
* 1/32,其中檔名中包含 tmp 的表示遇先建立備用的 redo log。- mysqldump 增加了
--mysqld-long-query-time
選項,可以為 mysqldump 設置 session 的 long_query_time,避免 dump 期間寫入不必要的 slow log。
BUG 修復
- truncate table 未能成功刪除使用 ALGORITHM=INSTANT 刪除的欄位的 data dictionary entries
- 使用 ALGORITHM=INSTANT 新增 NULLABLE 的欄位在對其 count() 時結果錯誤
- 升級到 MySQL 8.0.29 時,嘗試存取具有即時添加欄位的 TABLE 時發生故障