type
status
date
slug
summary
tags
category
icon
password
以下是從 MySQL 8.0 到 8.4 之間的差異,注意這並不是全部的內容,而是個人整理覺得比較需要關注的項目。

MySQL 8.4 新增或修改的功能

  • 從 8.4 開始預設不再啟用 mysql_native_password,如果要使用需要在開啟 server 時設置 --mysql-native-password=ON 
  • Clone Plugin:放寬到主要版本+次要版本相同的 clone,不像以前要連小版本號相同。例如:8.4.0 可以 clone 到 8.4.14,反過來也可以。
Replication 相關
  • SOURCE_RETRY_COUNT:replica 連接到 source 如果超過 replica_net_timeout 的設置 retry 的預設值由 86400 → 10次。
tagged GTIDs:原本的 GTID 格式為 UUID:NUMBER ,但從 MySQL 8.4 開始支援新的 GTID 格式 UUID:TAG:NUMBER,透過 TAG 可以追蹤該 Transaction 的來源,例如:UUID:Account:1 和 UUID:Wallet:2 這樣就可以區分不同的 GTID 來源,可以透過 gtid_next 來設置:
  • START REPLICA 語句的選項 SQL_AFTER_GTIDS 現在支持 MTS (以前會強迫切換為單線程)。
  • mysqldump 新增 --output-as-version 選項,用來創建不接受較新術語 (例如:master, slave) 的 dump 檔案。
MGR 相關
  • 8.4 LTS 系列支持不同小版本的 instance 組成 MGR。
權限相關
  • 新增 FLUSH PRIVILEGES :允許執行 FLUSH PRIVILEGES 語句。升級時會為有 RELOAD 權限的用戶自動新增此權限。
Histogram 自動更新
MySQL 8.4.0 adds support for automatic updates of histograms. When this feature is enabled for a given histogram, it is updated whenever ANALYZE TABLE is run on the table to which it belongs. In addition, automatic recalculation of persistent statistics by InnoDB (see Section 17.8.10.1, “Configuring Persistent Optimizer Statistics Parameters”) also updates the histogram. Histogram updates continue to use the same number of buckets as they were originally specified with, if any.
PERFORMANCE_SCHEMA 異動
  • 新增的關鍵字:AUTOBERNOULLIGTIDSLOGMANUAL (R), PARALLEL (R), PARSE_TREEQUALIFY (R), S3, and TABLESAMPLE (R).
  • Sanitized Relay Log Recovery :從 8.4 開始當 relay-log-recovery=OFF (預設值) 時,replica 啟動時會在自動清理 relay log 中不完整的資料,包含以下:
    • 在 relay log 末端未完成的 Transaction。
    • 僅包含未完成 Transaction 的 relay log file。
    • 無效的索引參照,relay log 索引檔案中指向已被移除檔案的參照。
    • 本人碎碎念:
      也許這樣的改動可以讓 relay-log-recovery 不需要設置為 ON 來保證 replication crash safety,有機會可以試試看。
EXPLAN 相關
  • EXPLAIN FORMAT=JSON 支持加上 INTO 到變量的功能
    • EXPLAIN 添加 FOR SCHEMA(FOR DATABASE) 功能,用來直接指定是哪個 database 下執行。
      • 參數變化
      MySQL 8.0 → 8.4參數變化
      名稱
      8.0 預設值
      8.4 預設值
      Dynamic
      需特別關注
      8 (or 1 if innodb_buffer_pool_size < 1 GiB)
      更細節的自動設置
      No
      需特別關注
      all
      none
      Yes
      需特別關注
      OFF
      OFF
      No
      需特別關注
      ON
      OFF
      Yes
      需特別關注
      innodb_buffer_pool_instances * 2
      2
      No
      需特別關注
      innodb_write_io_threads, which meant a default of 4
      128
      No
      需特別關注
      fsync
      O_DIRECT if supported, otherwise fsync
      No
      需特別關注
      200
      10000
      Yes
      需特別關注
      2 * innodb_io_capacity, with a minimum default value of 2000
      Yes
      需特別關注
      16777216 (16 MB)
      67108864 (64 MB)
      Yes
      需特別關注
      OFF
      ON
      No
      需特別關注
      4
      innodb_buffer_pool_instances
      No
      需特別關注
      4
      (available logical processors / 8), min of 4
      Yes
      需特別關注
      4
      1 if # of available logical processors is <= 16; otherwise 4
      No
      需特別關注
      4
      (available logical processors / 2), min of 4
      No
      需特別關注
      OFF
      ON
      Yes
      需特別關注
      1073741824 (1GB)
      3% of total memory: min 1 GB, max 4 GB
      Yes
      需特別關注
      1073741824 (1GB)
      0
      Yes
      需特別關注

      MySQL 8.4 棄用的功能

      MGR 相關
      • Group Replication recovery metadata
      Server Options
      • --character-set-client-handshake server option
      Variables
      • group_replication_allow_local_lower_version_joinMGR 已不在使用該設置,並將在未來刪除。
      • binlog_format:已棄用,並可能在未來移除,因此建議現行的應採用基於 ROW 模式的 replication。
      • expire_logs_days:請改為使用 binlog_expire_logs_seconds。
      • IGNORE_SERVER_IDS:該設置和 GTID 複製衝突,不再支持設置。
      Wildcard characters in database grants:從 8.2 開始不推薦再使用 %_ 作為 database 名稱的通配符,因為當 partial_revokes 開啟時會將其視為一般字符,因此將 %_ 在 grant 時作為通配符的設定將棄用並在未來移除。
      • Nonstandard foreign keys:使用非 uk 或 uk 一部分的 key 作為 foreign 是不符合標準。

      MySQL 8.4 刪除的功能

      Server Options
      • --old and --new:已棄用無替代。
      • --language:已棄用無替代。
      • --skip-host-cache server:請改為 --host-catch-size=0 來代替。
      • --innodb and --skip-innodb:已棄用無替代。
      • --character-set-client-handshake and --old-style-user-limits:已棄用無替代。
      • --abort-slave-event-count and --disconnect-slave-event-count:已刪除。
      Variables
      • binlog_transaction_dependency_tracking:總是使用 WRITESET,不再提供設置。
      • group_replication_recovery_complete_at:MGR 使用的參數,總是為 TRANSACTIONS_APPLIED,不再提供設置。
      • avoid_temporal_upgrade:5.6 已棄用無替代。
      • show_old_temporals:5.6 已棄用無替代。
      過時的 replication Options 或 Variables
      • --slave-rows-search-algorithms:改為總是為 HASH_SCAN,INDEX_SCAN,所以不再提供設置。
      • log_bin_use_v1_events:用於允許 MySQL 5.7 以前版本的複製選項,不再提供使用。
      • --relay-log-info-file--relay-log-info-repository--master-info-file--master-info-repository:Replication metadata 的儲存不再支持設置為 File,而是總是使用 Table 儲存支持 crash-safe,所以不再提供設置。
      • transaction_write_set_extraction
      • group_replication_primary_member:該變量不再使用,請改為 performance_schema.replication_group_members 的 MEMBER_ROLE 欄位。
       
       
      Replication SQL syntax:不再支持 MASTR 和 SLAVE 等相關用語,請改為使用 SOURCE 和 REPLICA。
      以下僅列出指令變化較大的部分,其他都是 MASTER 替換為 SOURCE,SLAVE 替換為 REPLICA。
       
       
      • 從 8.1 開始不在支持 System Variables 設置為 NULL,除了少數明確在文件中寫明可以使用 NULL 的設置。
      帶有 $ 的 Identifier:從 8.1 開始在未加引號的 Identifier 中使用 $ 受到限制,若出現多個頭 $ 會引發 Error,若只有一個則會引起 Warning。
      8.0 可以建立並且沒有警告:
      8.4 開始會出現警告,並且出現兩個 $ 無法直接建立,需要加上引號:
      Plugins
       
       
      • 當使用加密連線時,不再支持弱密碼,不需符合特定限制。(與 SSL & TSL 相關)
      • INFORMATION_SCHEMA.TABLESPACES 已刪除。
      • DROP TABLESPACE and ALTER TABLESPACE 語句不再支持 ENGINE clause
      • LOCK TABLES ... WRITE 語句不再支持 LOW_PRIORITY
      • EXPLAIN FORMAT=JSON format versioning:要控制 JSON 格式的版本使用 explain_json_format_version 變量設置。
      • AUTO_INCREMENT 不再支持使用 FLOAT 和 DOUBLE 資料型態。
      • mysql_ssl_rsa_setup 小工具已被刪除。
      • mysql_upgrade 小工具已被刪除。
      • mysqlpump 小工具已被刪除。
      CMake 選項
      • WITH_BOOSTDOWNLOAD_BOOSTDOWNLOAD_BOOST_TIMEOUT: These options are no longer necessary; MySQL now includes and uses a bundled version of Boost when compiling from source.
       
      不再支持有建立前綴索引的欄位切 Partition
      MySQL 8.0 下可以執行,但會引發 Warnings:
      從 8.4 開始完全不允許:

      升級前可運行的檢查小工具

      MySQL shell 有提供指令可以檢查版本升級需要注意的事項,首先使用新版的 MySQL shell 並連線後執行以下指令:
      output 參考

      Cloud SQL For MySQL 專區

      不支援 MySQL 8.4 以下功能:
      • Tagged GTIDs
      • 不再支持建立 mysql_native_password 的 User。

      參考