Slide 1

Slide 1 text

MySQL 8.4 LTS が あらわれた! 2024/05/16 yoku0825 MySQL 8.4 LTSの気になるポイントと今後の期待

Slide 2

Slide 2 text

おことわり このセッションは個人の見解を述べたものであり、所属する組織または所属しな い組織の意見と同じかもしれませんし違うかもしれません 1/53

Slide 3

Slide 3 text

TL;DR 2/53

Slide 4

Slide 4 text

TL;DR バージョンアップのモチベーションになるような花形機能は…ない 漢(オトコ)のコンピュータ道: MySQL 8.4 LTS登場!! ‐ MySQL 8.4 as a stable 8.0という考え方を紹介します 8.4そのものの話よりは8.0やそれ以前を振り返る話になります ‐ 3/53

Slide 5

Slide 5 text

\こんにちわ/ yoku0825@とある企業のDBA オラクれない ‐ ポスグれない ‐ マイエスキューエる ‐ 生息域 Twitterだったもの: @yoku0825 ‐ Blog: 日々の覚書 ‐ 日本MySQLユーザ会副代表 ‐ MySQL Casual ‐ Oracle ACE Pro ‐ 4/53

Slide 6

Slide 6 text

MySQL 8.4 LTS リリースおめでと うございます 5/53

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

MySQL 8.0 継続的リリース() 2016/09 8.0.0, 2018/04 GA GAクオリティ() メンテナンスリリースで機能が増える ‐ バグFIXを受け入れるために新機能の受け入れも必要 ‐ 新機能どころかSQLレベルの非互換があるバージョンもあった(予約語だったりワーニングだっ たり) ‐ 7/53

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

( ´-`).oO(8.0からの 変更点とかは中の人が説 明してくれたと信じる 11/53

Slide 13

Slide 13 text

ところでこれ話題に出てました? Bug #114838 8.4.0 requires unique constraint for FK 日々の覚書: Error: 6125 MySQL 8.4.0の非互換で親テーブルでUNIQUE KEYがつい てないとForeign Keyが作れなくなった? 12/53

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

What Is New 読みました? 14/53

Slide 16

Slide 16 text

Features Added or Changed in MySQL 8.4 15/53

Slide 17

Slide 17 text

物足りなくあ りません? 16/53

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

ほとんどが “Changed” の方 24/53

Slide 26

Slide 26 text

俺に関係しそうな “Added” はこれくらい? MySQL Replication: tagged GTIDs. Automatic histogram updates. 25/53

Slide 27

Slide 27 text

ちょっと過去を振 り返ってみましょ う 26/53

Slide 28

Slide 28 text

うーん… 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

Slide 29

Slide 29 text

うーん…? 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

Slide 30

Slide 30 text

うん 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

Slide 31

Slide 31 text

8.0がおかしかった だけかもしれない 30/53

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

8.0がおかしかっただけだった それでもちょっと面白みに欠けるくらい? 今まではだいたい「花形」の新機能があったものだけれども ‐ 9.7(仮)に超期待しています ちゃんと9.7(仮)まで良い子にして待ってますからサンタさん、GA後の8.4に新機能はもうやめて ください ‐ 32/53

Slide 34

Slide 34 text

この感覚がどこで狂ったのか考えてみた 33/53

Slide 35

Slide 35 text

\(^o^)/ 俺の MySQL人生半分く らい8.0 34/53

Slide 36

Slide 36 text

閑話休題 35/53

Slide 37

Slide 37 text

MySQL 8.4に目 立った新機能はな くても 36/53

Slide 38

Slide 38 text

逆に考えま しょう 37/53

Slide 39

Slide 39 text

8.4 = 8.0の機能を フルに使える安定 版 38/53

Slide 40

Slide 40 text

MySQL 8.0 継続的リリース() 2016/09 8.0.0, 2018/04 GA GAクオリティ() メンテナンスリリースで機能が増える ‐ バグFIXを受け入れるために新機能の受け入れも必要 ‐ 新機能どころかSQLレベルの非互換があるバージョンもあった(予約語だったりワーニングだっ たり) ‐ 39/53

Slide 41

Slide 41 text

8.0の(使えなかったかもしれない)新機能 version feature 8.0.14 InnoDBパラレルリード 8.0.17 JSON_SCHEMA_VALID 8.0.17 Multi-valued Index 8.0.17 Clone Plugin 8.0.18 EXPLAIN ANALYZE 40/53

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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

Slide 44

Slide 44 text

自分の塩漬けしていた バージョンと8.0.37まで の新機能を比較して、 43/53

Slide 45

Slide 45 text

8.4ではこれが使 えるようになる! 44/53

Slide 46

Slide 46 text

そう思うこと にしましょう 45/53

Slide 47

Slide 47 text

bugs.mysql.com の最近 46/53

Slide 48

Slide 48 text

bugs.mysql.comの最近 相変わらず(?) 主流は8.0へのレポート 8.1は注目度が高かったからかちらほらあった。8.4はそれより少ない ‐ まあ8.0も5.7もだいたい遅れてくる ‐ 自分のブログのページビューで感じる肌感としては1年後くらいからみんな日本語の情報が欲し くなるみたい ‐ 8.4のみで発火する何かはなさそう Access Deniedになるのはだいたい8.0と8.4の両方に影響があるやつ ‐ 47/53

Slide 49

Slide 49 text

一方で目に見えてや られることが決まっ てしまったもの 48/53

Slide 50

Slide 50 text

SLAVE構文の死 SHOW SLAVE STATUS や CHANGE MASTER TO が全滅 GitHub orchestrator, innotop, etc.. 予告されていたことなので割り切るしかないけれども、ここで「まだアクティブに 開発が続いているもの」と「もうアクティブではないけれどなんとなく使えていた もの」の差が出てくるかも 49/53

Slide 51

Slide 51 text

これただの愚痴 致命的なバグを含まない最新版MySQLを探すには? 『MySQL徹底入門』共著者が語 る、バージョン選びのポイント \- ログミーTech 50/53

Slide 52

Slide 52 text

ただの愚痴… 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

Slide 53

Slide 53 text

がんばる 52/53

Slide 54

Slide 54 text

Any Question and/or Suggestion? 53/53