さいきんの MySQL との付き合い方 〜 MySQL 8.0 より後の世界へようこそ 〜

3.6K Views

February 21, 25

スライド概要

PHP カンファレンス名古屋 2025
2025/2/22 ルーム シンフォニー 14:45 〜

AI 要約:
このセッションでは、MySQL 8.0 以降の新しいリリースモデルと移行方法について詳しく説明しています。MySQL 8.0 のサポートが終了する注意点や、メジャーバージョンの管理方法、アップグレードやダウングレードの手段、さらにクラウド環境での注意点についても触れています。また、非互換性についても重要なポイントを挙げて解説しています。

profile-image

Qiita や Zenn でいろいろ書いてます。 https://qiita.com/hmatsu47 https://zenn.dev/hmatsu47 MySQL 8.0 の薄い本 : https://github.com/hmatsu47/mysql80_no_usui_hon Aurora MySQL v1 → v3 移行計画 : https://zenn.dev/hmatsu47/books/aurora-mysql3-plan-book https://speakerdeck.com/hmatsu47

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

さいきんの MySQL との付き合い方 〜 MySQL 8.0 より後の世界へようこそ 〜 PHP カンファレンス名古屋 2025 2025/2/22 😺😸🐈 まつひさ(hmatsu47)

2.

自己紹介 松久裕保(@hmatsu47) ● https://qiita.com/hmatsu47 ● Web インフラのお守り係をしています ● 普段は JAWS-UG 名古屋(・浜松)や PostgreSQL アンカンファレンスで DB ネタを中心に話しています ● 数年前まで「MySQL 8.0 の薄い本」を作って配布していました ● PHP のことは何もわかりません ○ <?php phpinfo(); ?> を書いて満足(本番環境に置いちゃダメなやつ) 2

3.

MySQL は今年 5/23 で 30 歳!🎂🎉 3

4.

MySQL といえば🐬ですが ● 愛知県では名古屋港水族館のほかに南知多ビーチランド (知多郡美浜町)でも 🐬ショーが見れます 4

5.

なお、この先の話では ● PHP と MySQL のバージョン番号が似ているので混乱す るかもしれません ● 「PHP」「MySQL」とバージョン番号を一緒に検索すると大混乱 5

6.

ところでみなさん ● MySQL 8.0 への移行は終わりましたね? 6

7.

安心してないでください ● MySQL 8.0 の EOL、来年(2026 年)の 4 月ですよ 7

8.

MySQL のリリースモデル変更 ざっくりおさらい 8

9.

バージョン番号 ● むかし(例:MySQL 5.7.10) ○ 5(メジャーバージョン番号) ○ 7(リリースレベル) ■ 「5.6」「5.7」「8.0」は 「リリースシリーズ番号」 とはいえ実質の扱いは 「メジャーバージョン番号」 sys.VERSION_MINOR() だけど「リリースレベル」 メジャーバージョン番号とリリースレベルを合わせてリリースシリーズ番号 ○ 10(リリースシリーズ内でのバージョン番号) →日本 MySQL ユーザ会(MyNA)副代表・坂井さんのブログ記事 https://sakaik.hateblo.jp/entry/20151220/mysql_manual_versions 9

10.

バージョン番号 ● いま(例:MySQL 9.2.0) ○ 9(メジャーバージョン番号) ○ 2(マイナーバージョン番号) ■ 1 つ目の数字がメジャーバージョン番号 9.x 以降は、主にこの数字が意識される ようになりそう sys.VERSION_MINOR() と符合 メジャー・マイナーバージョン番号を合わせてリリースシリーズ番号 ○ 0(リリースシリーズ内でのバージョン番号) → MySQL 8.0 リファレンスマニュアル(日本語版) https://dev.mysql.com/doc/refman/8.0/ja/which-version.html 10

11.

リリースサイクル(8.0.34 / 8.1.0 以降) ● Innovation Release と LTS Release を設定 ○ いずれも GA(一般提供) ○ Innovation Release のサポートは 3 ヶ月 ■ 次のマイナーバージョンが出るまで ○ LTS Release は Premier Support 5 年+ Extended Support 3 年 ■ 2 年ごとに登場 ■ 途中の機能変更なし(という建前) 11

12.

リリースサイクル(8.0.34 / 8.1.0 以降) ● リリースは毎年 1・4・7・10 月 ○ 大きな不具合が見つかった場合はこのタイミングを待たずに適宜 改修版がリリースされる ○ HeatWave(後述)の新機能も四半期リリースのタイミングを待た ずに随時リリースされる ■ リリースシリーズ内でのバージョン番号(3 つ目の数字)も上がる 12

13.

図示するとこうなる Premier Support + Extended Support 注:重大不具合修正で 9.0.1 もリリース(2024/7) 8.0.34 / 8.1.0 からリリースモデル変更(2023/7) ※Premier Support は 2 年間延長されて 2025/4 まで (Extended Support は延長されず 1 年間のみ) 注:変更の可能性あり https://blogs.oracle.com/mysql-jp/post/introducing-mysql-innovation-and-longterm-support-lts-versions-jp 13

14.

ここまでのまとめ ● 8.0.34 / 8.1.0 からリリースモデルが変わった ○ Innovation Release と LTS Release が設定された ■ どちらも GA ● Innovation Release は 3 ヶ月後にサポート終了 ● LTS Release は 2 年毎に登場、計 8 年間サポートが継続 ○ 8.4 の次は 9.7、その次は 10.7 14

15.

MySQL 8.0 から先への マイグレーション(移行) 15

16.

アップグレード・ダウングレード方法 ● 方法は 4 つ 8.0.34 / 8.1.0 以降はダウングレードも可能に ○ インプレース ○ MySQL Shell でのクローン(InnoDB Cluster) ○ バイナリログによる非同期レプリケーション ○ 論理ダンプとリストア(ロード) ■ MySQL Shell ダンプ/ロードユーティリティ 16

17.

アップグレード、の前に ● アップグレードチェッカユーティリティで事前確認 ○ MySQL Shell のユーティリティ ○ アップグレード時に問題になりそうな点を指摘してくれる https://dev.mysql.com/doc/mysql-shell/8.0/ja/mysql-shell-utilities-upgrade.html The MySQL server at example.com:3306, version (中略) 3) Usage of utf8mb3 charset Warning: The following objects use the utf8mb3 character set. It is recommended to convert them to use (中略) Errors: 7 Warnings: 36 Notices: 0 7 errors were found. Please correct these issues before upgrading to avoid compatibility issues. 17

18.

アップグレード、の前に ● アップグレードチェッカユーティリティで事前確認 ○ MySQL Shell のユーティリティ 便利なユーティリティが多いので mysql コマンドからの移行を推奨 ○ アップグレード時に問題になりそうな点を指摘してくれる https://dev.mysql.com/doc/mysql-shell/8.0/ja/mysql-shell-utilities-upgrade.html The MySQL server at example.com:3306, version (中略) 3) Usage of utf8mb3 charset Warning: The following objects use the utf8mb3 character set. It is recommended to convert them to use (中略) Errors: 7 Warnings: 36 Notices: 0 7 errors were found. Please correct these issues before upgrading to avoid compatibility issues. 18

19.

アップグレードの対応状況マトリクス ● ケース別利用可否 インプレース クローン 非同期 レプリケーション ダンプとロード LTS 8.4 → LTS 9.7 ✓ ✗ ✓ ✓ LTS 8.4.11 → LTS 8.4.20 ✓ ✓ ✓ ✓ Innovation 8.1 → 8.2 ✓ ✗ ✓ ✓ Innovation 8.1 → 8.3 ✓ ✗ ✓ ✓ Innovation 9.1 → LTS 9.7 ✓ ✗ ✓ ✓ LTS 8.4 → LTS 10.7 ✗ ✗ ✗ ✗ 19

20.

アップグレードの対応状況マトリクス クローンでのアップグレードが可能 なのは同一マイナーバージョンのみ ● ケース別利用可否 インプレース クローン 非同期 レプリケーション ダンプとロード LTS 8.4 → LTS 9.7 ✓ ✗ ✓ ✓ LTS 8.4.11 → LTS 8.4.20 ✓ ✓ ✓ ✓ Innovation 8.1 → 8.2 ✓ ✗ ✓ ✓ Innovation 8.1 → 8.3 ✓ ✗ ✓ ✓ Innovation 9.1 → LTS 9.7 ✓ ✗ ✓ ✓ LTS 8.4 → LTS 10.7 ✗ ✗ ✗ ✗ 20

21.

アップグレードの対応状況マトリクス メジャーバージョンを飛ばして アップグレードすることはできない ● ケース別利用可否 インプレース クローン 非同期 レプリケーション ダンプとロード LTS 8.4 → LTS 9.7 ✓ ✗ ✓ ✓ LTS 8.4.11 → LTS 8.4.20 ✓ ✓ ✓ ✓ Innovation 8.1 → 8.2 ✓ ✗ ✓ ✓ Innovation 8.1 → 8.3 ✓ ✗ ✓ ✓ Innovation 9.1 → LTS 9.7 ✓ ✗ ✓ ✓ LTS 8.4 → LTS 10.7 ✗ ✗ ✗ ✗ 21

22.

ダウングレードの対応状況マトリクス ● ケース別利用可否 インプレース クローン 非同期 レプリケーション ダンプとロード LTS 8.4.20 → 8.4.11 ✓ ✓ ✓ ✓ LTS 9.7 → LTS 8.4 ✗ ✗ ✓⭐ ✓⭐ LTS 9.7 → Innovation 9.6 ✗ ✗ ✓⭐ ✓⭐ LTS 9.7 → Innovation 9.5 ✗ ✗ ✓⭐ ✓⭐ ⭐:ロールバック目的のみ(プロダクト環境での常用は非推奨) 22

23.

ダウングレードの対応状況マトリクス インプレース・クローンでのダウングレードが 可能なのは同一マイナーバージョンのみ ● ケース別利用可否 インプレース クローン 非同期 レプリケーション ダンプとロード LTS 8.4.20 → 8.4.11 ✓ ✓ ✓ ✓ LTS 9.7 → LTS 8.4 ✗ ✗ ✓⭐ ✓⭐ LTS 9.7 → Innovation 9.6 ✗ ✗ ✓⭐ ✓⭐ LTS 9.7 → Innovation 9.5 ✗ ✗ ✓⭐ ✓⭐ ⭐:ロールバック目的のみ(プロダクト環境での常用は非推奨) 23

24.

ダウングレードの対応状況マトリクス メジャー/マイナーバージョンをまたぐ ダウングレードはロールバック目的のみ ● ケース別利用可否 インプレース クローン 非同期 レプリケーション ダンプとロード LTS 8.4.20 → 8.4.11 ✓ ✓ ✓ ✓ LTS 9.7 → LTS 8.4 ✗ ✗ ✓⭐ ✓⭐ LTS 9.7 → Innovation 9.6 ✗ ✗ ✓⭐ ✓⭐ LTS 9.7 → Innovation 9.5 ✗ ✗ ✓⭐ ✓⭐ ⭐:ロールバック目的のみ(プロダクト環境での常用は非推奨) 24

25.

クラウドのマネージドサービス利用時の注意 ● 各クラウドの公式リファレンスに示された方法を使う ○ マネージドサービスはフル管理者権限をユーザーに与えていない ■ 使えないコマンド(SQL 文)がある ■ ストアドファンクション・ストアドプロシージャで置き換えるケースがある ○ クラウド独自の便利な移行方法が用意されているケースも ■ Blue / Green デプロイなど 25

26.

クラウドのマネージドサービス利用時の注意 ● マネージドサービスによっては ○ アップグレードパスを限定していることも ■ 例:Google Cloud の Cloud SQL for MySQL では 8.0.37 未満のバージョン から 8.4 への移行は 8.0.37(以降の 8.0.x)を経由する必要がある https://cloud.google.com/sql/docs/mysql/upgrade-major-db-version-inplace?hl=ja#plan-u pgrade (3. MySQL 8.0 から 8.4 にアップグレードする場合は、…) 26

27.

クラウドのマネージドサービス利用時の注意 ● サポート期限が本家 MySQL と異なる場合がある ○ AWS / Amazon RDS for MySQL : https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/MySQL.Concepts.Version Mgmt.html ○ Google Cloud / Cloud SQL for MySQL : https://cloud.google.com/sql/docs/mysql/db-versions?hl=ja 27

28.

クラウドのマネージドサービス利用時の注意 ● 延長サポートがあるケースでは ○ 本家の Sustaining Support(無期限)とは別に料金・内容・期限 などが設定されている 28

29.

ここまでのまとめ ● アップグレード・ダウングレードの方法は 4 つある ○ インプレース・クローン・レプリケーション・ダンプ&リストア ● マネージドサービスでは各クラウドの公式リファレンス に示された方法を使う ○ アップグレードパスや方法が限定されているケースがある ○ 本家 MySQL とは EOL・サポート期間が違うケースもある 29

30.

気になる非互換 (8.0 → 8.4) 30

31.

主に問題になるポイント 2 選 +1 ● mysql_native_password 認証プラグイン無効化 ○ 8.4 でデフォルト無効化(クラウドのマネージドサービスを除く) ● センシティブなキーワードの廃止・置き換え ○ 8.4 で MASTER / SLAVE が削除された ● 動的権限の追加(管理者権限) ○ 詳しくはこちら(本セッションでの説明は省略) https://gihyo.jp/article/2024/05/mysql-rcn0221 31

32.

その他の差分はこちらで確認 ● MySQL Server Version Reference ○ https://dev.mysql.com/doc/mysqld-version-reference/en/ ● MySQL Parameters(MyNA 代表とみたまさひろさん作) ○ https://mysql-params.tmtms.net/mysqld/ 32

33.

mysql_native_password 認証プラグイン無効化 ● この認証プラグインでは SHA-1 を使っている ○ そのため、すでに MySQL 8.0.34 / 8.1.0 で非推奨になっていた 33

34.

mysql_native_password 認証プラグイン無効化 ● バージョンアップ前に mysql_native_password 認証を 指定して作成したユーザーが接続不可に ○ 対象ユーザーの変更・再作成が必要 ■ 認証プラグインとして caching_sha2_password を使う ■ ALTER USER で変更する場合は IDENTIFIED BY ‘【パスワード】’ を省略し ない 34

35.

mysql_native_password 認証プラグイン無効化 ● 古いライブラリやドライバを使っている場合接続不可に ○ PHP 7.4.4 以降でパッケージインストールしたものを使っていれ ば大丈夫なはず https://www.php.net/manual/ja/mysqli.requirements.php https://www.php.net/manual/ja/ref.pdo-mysql.php ○ 自前でドライバを組み込んでビルドしたライブラリや、システム 管理用・データ連携用などひっそりと残っている「小物」に注意 35

36.

mysql_native_password 認証プラグイン無効化 ● サーバーの設定で有効化はできる ○ mysql_native_password=on ■ 注:RDS for MySQL などではデフォルトで有効かつ変更不可になっている ■ デフォルト認証プラグインは authentication_policy で設定 ○ ご利用は計画的に(セキュリティ的に非推奨) ■ 9.0.0 で mysql_native_password 認証プラグインは削除 ○ 詳細はスマートスタイル社のブログ記事で https://blog.s-style.co.jp/2024/05/11793/ 36

37.

センシティブなキーワードの廃止・置き換え ● 8.0.23 以降で徐々に置き換えが始まっていた ○ MASTER → (REPLICATION) SOURCE・BINARY LOG(S) 他 ○ SLAVE → REPLICA など ○ サーバー変数・コマンドラインオプションなども同様 37

38.

センシティブなキーワードの廃止・置き換え ● 8.3.0 までは ○ MASTER / SLAVE を使う構文も非推奨だが併用可能だった ○ MASTER / SLAVE を使うと従来どおりのキーワードを出力 →互換性維持のため 例:SHOW SLAVE STATUS と SHOW REPLICA STATUS では出力結果が別 https://yoku0825.blogspot.com/2022/07/mysqlshow-slave-statusshow-replica.html 38

39.

センシティブなキーワードの廃止・置き換え ● 8.4.0 で MASTER / SLAVE を使う構文が削除された ○ 利用中の管理ツールなどが未対応バージョンの場合対応が必要 ■ 監視ツールで出力結果をパースして使うケースを含む←ここ重要! ■ 設定ファイル(my.cnf)や起動スクリプトなども同様 ○ 詳細はスマートスタイル社のブログ記事で https://blog.s-style.co.jp/2024/07/12381/ 39

40.

ここまでのまとめ ● 大きなポイントは 2 つ ○ mysql_native_password 認証プラグイン無効化 ○ センシティブなキーワードの廃止・置き換え ● 接続ユーザーの認証プラグイン設定、古いライブラリや 管理・監視ツールのバージョンアップなどの対応が必要 ○ 5.x → 8.0 よりはポイントが絞られるが確実に壁になりそう 40

41.

周辺ツールの変化 41

42.

8.0 で EOL になった製品 ● MySQL Workbench ○ 統合ビジュアル(GUI)ツール ○ 後継は MySQL Shell for VS Code https://dev.mysql.com/doc/mysql-shell-gui/en/ ■ gihyo.jp MySQL 道普請便りの MySQL Shell for VS Code 関連記事 https://gihyo.jp/article/2024/10/mysql-rcn0232 https://gihyo.jp/article/2024/12/mysql-rcn0235 https://gihyo.jp/article/2025/02/mysql-rcn0238 42

43.

8.0 で EOL になった製品 ● MySQL Enterprise Monitor ○ Enterprise Edition 以上の契約で使える監視ツール ○ 今後は Oracle Enterprise Manager for MySQL で代替 https://www.mysql.com/jp/products/enterprise/em.html 43

44.

このパートのまとめは省略 44

45.

HeatWave? それって誰ですか? 45

46.

リブランディングでややこしくなった HeatWave ● 要は Oracle Cloud の MySQL マネージドサービス ○ 以前は「MySQL HeatWave」だったが「HeatWave」が頭に https://www.oracle.com/jp/heatwave/features/ ■ HeatWave(HeatWave Cluster / 列指向インメモリデータ処理エンジン) ■ HeatWave GenAI(組み込み LLM・ベクトルストア・チャット) ■ HeatWave MySQL(マネージドな MySQL Database) ■ HeatWave Lakehouse(レイクハウス分析) ■ HeatWave AutoML(機械学習モデルの構築・トレーニング) 46

47.

アーキテクチャ図が複雑化した HeatWave ● GenAI が表現されていないけどそれでも複雑 https://www.oracle.com/jp/heatwave/features/ 47

48.

主役は🐬に違いない HeatWave ● 「本体」その 1 は MySQL Database ○ 名前が変わって「HeatWave MySQL」に ○ MySQL Database 単体で使える ○ 列指向エンジン(後述)はオプション 48

49.

本来のウリはここ↓だったはずの HeatWave ● 「本体」その 2 は列指向エンジン ○ メモリ上に全データを列指向フォーマットで置くエンジン ○ 集計・分析が得意(超高速) ■ 列指向だけど更新系がほとんど遅くならないのが特徴 ■ 9.0 からは複数クエリの並列処理も可能に ■ HeatWave GenAI でベクトルデータの処理をするときなどにも使う ■ 同様に HeatWave Lakehouse・HeatWave AutoML の処理にも使う 49

50.

実は 2 つある HeatWave ● HeatWave on OCI と HeatWave on AWS がある ○ Oracle Cloud Infrastructure 上にあるのが on OCI ○ AWS 上のリソースを使ってサービス提供するのが on AWS ○ on OCI のほうが安くて機能が充実 https://www.oracle.com/jp/heatwave/pricing/ 50

51.

移行事例も地味に増えてきた HeatWave ● AWS や Google Cloud からの移行でコストダウン ○ Docswell の事例 https://www.docswell.com/s/rewtheblow/K4VQ31-20240807-OracleCloud Webinar-Docswell https://zenn.dev/kusuke/scraps/ac9b294bdde490 https://www.docswell.com/ 51

52.

ここまでのまとめ ● HeatWave は Oracle Cloud 上で提供されている MySQL マネージドサービス ● 通常の MySQL では苦手な集計・分析が得意な列指向イン メモリデータ処理エンジンを持つ(オプション) ● 他クラウドからの移行事例が(地味に)増えてきている 52

53.

で、結局、🐬とは どう付き合っていけば良い? 53

54.

私見では ● 普通の人が選ぶなら LTS Release 一択 ○ これが基本 ○ マイグレーション地獄にならないように ○ 2 年ごとにメジャーバージョンアップするサイクルを作る ■ 1 メジャーバージョン間の差分は小さいので移行も難しくない (5.7 → 8.0 のようなことはもうないはず) 54

55.

私見では ● クラウドのマネージドサービスも LTS Release ○ 各社 Innovation Release への対応はあまり積極的ではなさそう →ニーズを考えれば当然 55

56.

私見では ● ただし HeatWave に限れば Innovation Release もアリ ○ 追加機能に強い魅力を感じるなら ○ マイグレーション地獄を受け入れる覚悟で ■ なお HeatWave 各バージョンの提供終了時期は MySQL の EOL とは異なる https://docs.oracle.com/ja-jp/iaas/mysql-database/doc/mysql-server-versions.html (注:HeatWave on AWS では一部提供されないバージョンが存在する) 56

57.

私見では ● 自前インストールもやっぱり LTS Release ○ Standard Edition / Enterprise Edition でのサポート契約を推奨 ■ 世に出るノウハウが減り続けている→だんだん自前運用が厳しくなっている (そんな時代だからこそ発信できる人はどんどん発信して!) ○ Community Edition(自力解決💪)ならこのあたり↓も意識しつつ ■ ビルド方法による性能の違い https://buildup-db.blogspot.com/2024/11/mysql-80.html 57

58.

つまり ● HeatWave 以外は LTS Release ○ 自前インストールならサポート契約を推奨 58

59.

余裕を持った移行計画で 楽しい🐬ライフを 59

60.

おまけ 60

61.

phpMyAdmin の GitHub の様子を眺めてみた ● リポジトリ全体で「seconds behind」を検索 ○ レプリカ側で「SHOW REPLICA STATUS」したときに出る表示 への対応状況を見てみた 61

62.

phpMyAdmin の GitHub の様子を眺めてみた 62

63.

phpMyAdmin の GitHub の様子を眺めてみた ● あわせて Issues(Closed 含む)で「MySQL 8.4」を検索 ↓関連 Pull Request 63

64.

phpMyAdmin の GitHub の様子を眺めてみた ● ざっと見てみた雰囲気では ○ プロダクトコードには Master / Source 両対応の痕跡があった がテストコードは Master のみ ○ いずれテストコードの修正が必要になりそうな雰囲気が 64

65.

phpMyAdmin の GitHub の様子を眺めてみた ● Issues で「mysql_native_password」を検索 ○ すでに Closed なものを含めて検索してみた →過去の苦労も含めて追いかけるため 65

66.

phpMyAdmin の GitHub の様子を眺めてみた 66

67.

phpMyAdmin の GitHub の様子を眺めてみた ● 雑な感想 ○ phpMyAdmin では MariaDB にも対応が必要なのが大変そう →MariaDB は caching_sha2_password とは別の道へ https://mariadb.com/kb/en/authentication-plugin-ed25519/ 67

68.

参考情報など 68

69.

アップグレードを計画するときの参考資料 ● 日本オラクル生駒さんの講演資料 ○ https://speakerdeck.com/ikomachi226/mysqlzui-xin-qing-bao-to-imazhi-tuteokitaiba ziyonatupunoji-chu-zhi-shi 69

70.

MySQL のお役立ちサイト ● 本家 MySQL の公式ドキュメント ○ https://dev.mysql.com/doc/ ● スマートスタイル TECH BLOG(MySQL) ○ https://blog.s-style.co.jp/category/tech/mysql/ 70

71.

MySQL のお役立ちサイト ● gihyo.jp MySQL 道普請便り ○ https://gihyo.jp/list/group/MySQL%E9%81%93%E6%99%AE%E8%AB% 8B%E4%BE%BF%E3%82%8A ● 日々の覚書(MyNA 副代表 yoku0825 さんのブログ) ○ https://yoku0825.blogspot.com/ 71

72.

MySQL のお役立ち書籍 ● MySQL 運用・管理[実践]入門 〜安全かつ高速にデータを扱う内部構造・動作原理を学ぶ ○ MySQL 8.0 向けだが 8.4 以降にも役立つ内容 ○ https://gihyo.jp/book/2024/978-4-297-14184-4 72