Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MySQL 8.4 LTS が あらわれた

yoku0825
June 01, 2024

MySQL 8.4 LTS が あらわれた

2025/05/16 オラクル青山

yoku0825

June 01, 2024
Tweet

More Decks by yoku0825

Other Decks in Technology

Transcript

  1. TL;DR バージョンアップのモチベーションになるような花形機能は…ない 漢(オトコ)のコンピュータ道: MySQL 8.4 LTS登場!! ‐ MySQL 8.4 as

    a stable 8.0という考え方を紹介します 8.4そのものの話よりは8.0やそれ以前を振り返る話になります ‐ 3/53
  2. \こんにちわ/ yoku0825@とある企業のDBA オラクれない ‐ ポスグれない ‐ マイエスキューエる ‐ 生息域 Twitterだったもの:

    @yoku0825 ‐ Blog: 日々の覚書 ‐ 日本MySQLユーザ会副代表 ‐ MySQL Casual ‐ Oracle ACE Pro ‐ 4/53
  3. MySQL 8.0 mysql80 13> SELECT @@version, CURDATE(); +-----------+------------+ | @@version

    | CURDATE() | +-----------+------------+ | 8.0.11 | 2018-04-19 | +-----------+------------+ 1 row in set (0.00 sec) 6/53
  4. MySQL 8.0 継続的リリース() 2016/09 8.0.0, 2018/04 GA GAクオリティ() メンテナンスリリースで機能が増える ‐

    バグFIXを受け入れるために新機能の受け入れも必要 ‐ 新機能どころかSQLレベルの非互換があるバージョンもあった(予約語だったりワーニングだっ たり) ‐ 7/53
  5. あれから6年 mysql80 13> SELECT @@version, CURDATE(); +-----------+------------+ | @@version |

    CURDATE() | +-----------+------------+ | 8.0.37 | 2024-04-30 | +-----------+------------+ 1 row in set (0.00 sec) 8/53
  6. あれから6年 mysql84 16> SELECT @@version, CURDATE(); +-----------+------------+ | @@version |

    CURDATE() | +-----------+------------+ | 8.4.0 | 2024-04-30 | +-----------+------------+ 1 row in set (0.00 sec) 9/53
  7. MySQL 8.4 Long Term Support() Innovation Releaseを前提としたリリースモデル 2023/07 MySQL 8.1

    Innovation ‐ 2023/10 MySQL 8.2 Innovation ‐ 2024/01 MySQL 8.3 Innovation ‐ 今度こそ機能追加や非互換のない安定版を望む 10/53
  8. ところでこれ話題に出てました? Bug #114838 8.4.0 requires unique constraint for FK 日々の覚書:

    Error: 6125 MySQL 8.4.0の非互換で親テーブルでUNIQUE KEYがつい てないとForeign Keyが作れなくなった? 12/53
  9. Bug #114838 8.4.0 requires unique constraint for FK ### 親テーブル。

    numはインデックスつきだけどPRIMARYでもUNIQUEでもない mysql84 11> CREATE TABLE d2.t1 (num int, KEY(num)); Query OK, 0 rows affected (0.02 sec) ### 子テーブル。子テーブル側はセカンダリキーでもユニークキーでも関係なしに親がユニークキーじゃないからError 6125 mysql84 11> CREATE TABLE d2.t2 (num int, UNIQUE KEY(num), FOREIGN KEY (num) REFERENCES d2.t1(num)) Engine InnoDB; ERROR 6125 (HY000): Failed to add the foreign key constraint. Missing unique key for constraint 't2_ibfk_1' in the referenced table 't1' mysql84 20> SELECT @@RESTRICT_FK_ON_NON_STANDARD_KEY; +-----------------------------------+ | @@RESTRICT_FK_ON_NON_STANDARD_KEY | +-----------------------------------+ | 1 | +-----------------------------------+ 1 row in set (0.00 sec) 13/53
  10. Features Added or Changed in MySQL 8.4(1/7) MySQL native password

    authentication changes. InnoDB system variable default value changes. Clone plugin SASL-based LDAP authentication on Windows. MySQL Replication: SOURCE_RETRY_COUNT change. https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html 17/53
  11. Features Added or Changed in MySQL 8.4(2/7) MySQL Replication: tagged

    GTIDs. Replication: SQL_AFTER_GTIDS and MTA Replication terminology backwards compatibility. The MySQL version number used in version-specific comments supports a major version consisting of one or two digits https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html 18/53
  12. Features Added or Changed in MySQL 8.4(3/7) group_replication_set_as_primary() and DDL

    statements. DDL and DCL statement tracking for group_replication_set_as_primary() Group Replication variable defaults. Added a number of status variables specific to the Group Replication plugin FLUSH_PRIVILEGES privilege. https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html 19/53
  13. Features Added or Changed in MySQL 8.4(4/7) OPTIMIZE_LOCAL_TABLE privilege. MySQL

    Enterprise Data Masking and De-Identification. Flushing of data masking dictionaries. Automatic histogram updates. Added the tls-certificates-enforced-validation system variable https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html 20/53
  14. Features Added or Changed in MySQL 8.4(5/7) Added server system

    variables to control the amount of time MySQL accounts that connect to a MySQL server using LDAP pluggable authentication Logging of the shutdown process was enhanced Additions to server startup and shutdown messages. Added the SHOW PARSE_TREE statement https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html 21/53
  15. Features Added or Changed in MySQL 8.4(6/7) Thread pool plugin

    connection information. Information Schema PROCESSLIST table usage. Hash table optimization for set operations WITH_LD CMake option. MySQL Enterprise Firewall enhancements https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html 22/53
  16. Features Added or Changed in MySQL 8.4(7/7) Pluggable authentication. Added

    support for authentication to MySQL Server using devices such as smart cards Keyring migration. Migration from a keyring component to a keyring plugin is supported. MySQL Enterprise Audit. New Keywords. https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html 23/53
  17. うーん… Version New feature 8.0 データディクショナリの一新, 自動mysql_upgrade, caching_sha2_password, ROLE, RESOURCE

    GROUP, SKIP LOCKED & NOWAIT, INSTANT ADD & DROP COLUMN, innodb_dedicated_server, TempTableストレージエンジン, InnoDBパラレルリード, InnoDBパラレルDDL, FIFO -> CATS, ALTER INSTANCE DISABLE INNODB REDO_LOG, CREATE TABLE AS SELECTのGTID対応, innodb_doublewrite=DETECT_ONLY, UCA 9.0.0対応のコレー ション, JSON_TABLE, 式デフォルト, 式インデックス, Invisible Index, 降順INDEX, UPDATE & DELETEのsemijoin対 応, CTE, Window関数, ICU正規表現, p_s.error_log, JSON_SCHEMA_VALID, Multi-valued Index, Clone Plugin, EXPLAIN ANALYZE, optimize_switch=derived_condition_pushdown, binlog_expire_logs_seconds, GIPK, INTERSECT & EXCEPT, Histgram, Flush lockなしのANALYZE TABLE, ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS, binlog 圧縮 27/53
  18. うーん…? Version New feature 5.6 i_s.innodb_buffer_page, p_s大幅強化, マルチスレッドレプリ カ, innodb_buffer_pool_load_at_startup,

    オンラインALTER TABLE, FLUSH TABLE FOR EXPORT, InnoDB memcached(R.I.P.), GTID, クラッシュセーフレプリカ 5.7 innodb_buffer_pool_sizeのオンライン変更, マルチソースレ プリケーション, gtid_modeオンライン変更, UNDO Log Truncation, optimizer_switchのderived_table, default_password_lifetime(lol), 同一タイミングの複数トリ ガー, sysスキーマ, JSON型もろもろ, mysqlpump(R.I.P.), auto_generate_certs, offline_mode, super_read_only, MySQL Shell debut, Group Replication(rapid), X protocol(rapid), テーブル暗号化, generated column, Logical clock 日々の覚書: MySQL バージョンごとの機能覚書 Complete list of new features in MySQL 5.7 28/53
  19. うん Version New feature 4.0 InnoDB, クエリキャッシュ(R.I.P.) 4.1 サブクエリ, UTF-8サポート,

    文字コードもろもろ, TIMESTAMP 型の表現変更, mysql_native_password(R.I.P.) 5.0 information_schema, ストアドプロシージャ, トリガー, ビュー 5.1 パーティショニング, binlog_format=ROW, イベントスケ ジューラ, log_output=TABLE, Plugin InnoDB 5.5 準同期レプリケーション, 4バイトUTF-8, インサートバッファ が汎用チェンジバッファに, performance_schemaの原形 日々の覚書: MySQL バージョンごとの機能覚書 29/53
  20. 8.0がおかしかっただけかもしれない $ w3m -T text/html https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html | wc 1486 7622

    62416 $ w3m -T text/html https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html | wc 3903 25624 192679 $ w3m -T text/html https://dev.mysql.com/doc/refman/5.7/en/mysql-nutshell.html | wc 1330 8023 60878 31/53
  21. MySQL 8.0 継続的リリース() 2016/09 8.0.0, 2018/04 GA GAクオリティ() メンテナンスリリースで機能が増える ‐

    バグFIXを受け入れるために新機能の受け入れも必要 ‐ 新機能どころかSQLレベルの非互換があるバージョンもあった(予約語だったりワーニングだっ たり) ‐ 39/53
  22. 8.0の(使えなかったかもしれない)新機能 version feature 8.0.20 binlog圧縮 8.0.21 ALTER INSTANCE DISABLE INNODB

    REDO_LOG 8.0.21 CREATE TABLE AS SELECTのGTID対応 8.0.21 UPDATE & DELETEのsemijoin対応 8.0.22 p_s.error_log 8.0.22 optimize_switch=derived_condition_pushdown 41/53
  23. 8.0の(使えなかったかもしれない)新機能 version feature 8.0.23 ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS 8.0.27 InnoDBパラレルDDL 8.0.29 INSTANT DROP

    COLUMN 8.0.30 innodb_doublewrite=DETECT_ONLY 8.0.30 GIPK 8.0.31 INTERSECT & EXCEPT 8.0.31 Flush lockなしのANALYZE TABLE 42/53
  24. SLAVE構文の死 SHOW SLAVE STATUS や CHANGE MASTER TO が全滅 GitHub

    orchestrator, innotop, etc.. 予告されていたことなので割り切るしかないけれども、ここで「まだアクティブに 開発が続いているもの」と「もうアクティブではないけれどなんとなく使えていた もの」の差が出てくるかも 49/53
  25. ただの愚痴… mysql80> SELECT @@version; +-----------+ | @@version | +-----------+ |

    8.0.19 | +-----------+ 1 row in set (0.01 sec) mysql80> SHOW REPLICA STATUS; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corr esponds to your MySQL server version for the right syntax to use near 'REPLICA STATUS' at line 1 51/53