3.6K Views
February 21, 25
スライド概要
PHP カンファレンス名古屋 2025
2025/2/22 ルーム シンフォニー 14:45 〜
AI 要約:
このセッションでは、MySQL 8.0 以降の新しいリリースモデルと移行方法について詳しく説明しています。MySQL 8.0 のサポートが終了する注意点や、メジャーバージョンの管理方法、アップグレードやダウングレードの手段、さらにクラウド環境での注意点についても触れています。また、非互換性についても重要なポイントを挙げて解説しています。
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
さいきんの MySQL との付き合い方 〜 MySQL 8.0 より後の世界へようこそ 〜 PHP カンファレンス名古屋 2025 2025/2/22 😺😸🐈 まつひさ(hmatsu47)
自己紹介 松久裕保(@hmatsu47) ● https://qiita.com/hmatsu47 ● Web インフラのお守り係をしています ● 普段は JAWS-UG 名古屋(・浜松)や PostgreSQL アンカンファレンスで DB ネタを中心に話しています ● 数年前まで「MySQL 8.0 の薄い本」を作って配布していました ● PHP のことは何もわかりません ○ <?php phpinfo(); ?> を書いて満足(本番環境に置いちゃダメなやつ) 2
MySQL は今年 5/23 で 30 歳!🎂🎉 3
MySQL といえば🐬ですが ● 愛知県では名古屋港水族館のほかに南知多ビーチランド (知多郡美浜町)でも 🐬ショーが見れます 4
なお、この先の話では ● PHP と MySQL のバージョン番号が似ているので混乱す るかもしれません ● 「PHP」「MySQL」とバージョン番号を一緒に検索すると大混乱 5
ところでみなさん ● MySQL 8.0 への移行は終わりましたね? 6
安心してないでください ● MySQL 8.0 の EOL、来年(2026 年)の 4 月ですよ 7
MySQL のリリースモデル変更 ざっくりおさらい 8
バージョン番号 ● むかし(例: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
バージョン番号 ● いま(例: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
リリースサイクル(8.0.34 / 8.1.0 以降) ● Innovation Release と LTS Release を設定 ○ いずれも GA(一般提供) ○ Innovation Release のサポートは 3 ヶ月 ■ 次のマイナーバージョンが出るまで ○ LTS Release は Premier Support 5 年+ Extended Support 3 年 ■ 2 年ごとに登場 ■ 途中の機能変更なし(という建前) 11
リリースサイクル(8.0.34 / 8.1.0 以降) ● リリースは毎年 1・4・7・10 月 ○ 大きな不具合が見つかった場合はこのタイミングを待たずに適宜 改修版がリリースされる ○ HeatWave(後述)の新機能も四半期リリースのタイミングを待た ずに随時リリースされる ■ リリースシリーズ内でのバージョン番号(3 つ目の数字)も上がる 12
図示するとこうなる 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
ここまでのまとめ ● 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
MySQL 8.0 から先への マイグレーション(移行) 15
アップグレード・ダウングレード方法 ● 方法は 4 つ 8.0.34 / 8.1.0 以降はダウングレードも可能に ○ インプレース ○ MySQL Shell でのクローン(InnoDB Cluster) ○ バイナリログによる非同期レプリケーション ○ 論理ダンプとリストア(ロード) ■ MySQL Shell ダンプ/ロードユーティリティ 16
アップグレード、の前に ● アップグレードチェッカユーティリティで事前確認 ○ 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
アップグレード、の前に ● アップグレードチェッカユーティリティで事前確認 ○ 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
アップグレードの対応状況マトリクス ● ケース別利用可否 インプレース クローン 非同期 レプリケーション ダンプとロード 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
アップグレードの対応状況マトリクス クローンでのアップグレードが可能 なのは同一マイナーバージョンのみ ● ケース別利用可否 インプレース クローン 非同期 レプリケーション ダンプとロード 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
アップグレードの対応状況マトリクス メジャーバージョンを飛ばして アップグレードすることはできない ● ケース別利用可否 インプレース クローン 非同期 レプリケーション ダンプとロード 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
ダウングレードの対応状況マトリクス ● ケース別利用可否 インプレース クローン 非同期 レプリケーション ダンプとロード 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
ダウングレードの対応状況マトリクス インプレース・クローンでのダウングレードが 可能なのは同一マイナーバージョンのみ ● ケース別利用可否 インプレース クローン 非同期 レプリケーション ダンプとロード 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
ダウングレードの対応状況マトリクス メジャー/マイナーバージョンをまたぐ ダウングレードはロールバック目的のみ ● ケース別利用可否 インプレース クローン 非同期 レプリケーション ダンプとロード 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
クラウドのマネージドサービス利用時の注意 ● 各クラウドの公式リファレンスに示された方法を使う ○ マネージドサービスはフル管理者権限をユーザーに与えていない ■ 使えないコマンド(SQL 文)がある ■ ストアドファンクション・ストアドプロシージャで置き換えるケースがある ○ クラウド独自の便利な移行方法が用意されているケースも ■ Blue / Green デプロイなど 25
クラウドのマネージドサービス利用時の注意 ● マネージドサービスによっては ○ アップグレードパスを限定していることも ■ 例: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
クラウドのマネージドサービス利用時の注意 ● サポート期限が本家 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
クラウドのマネージドサービス利用時の注意 ● 延長サポートがあるケースでは ○ 本家の Sustaining Support(無期限)とは別に料金・内容・期限 などが設定されている 28
ここまでのまとめ ● アップグレード・ダウングレードの方法は 4 つある ○ インプレース・クローン・レプリケーション・ダンプ&リストア ● マネージドサービスでは各クラウドの公式リファレンス に示された方法を使う ○ アップグレードパスや方法が限定されているケースがある ○ 本家 MySQL とは EOL・サポート期間が違うケースもある 29
気になる非互換 (8.0 → 8.4) 30
主に問題になるポイント 2 選 +1 ● mysql_native_password 認証プラグイン無効化 ○ 8.4 でデフォルト無効化(クラウドのマネージドサービスを除く) ● センシティブなキーワードの廃止・置き換え ○ 8.4 で MASTER / SLAVE が削除された ● 動的権限の追加(管理者権限) ○ 詳しくはこちら(本セッションでの説明は省略) https://gihyo.jp/article/2024/05/mysql-rcn0221 31
その他の差分はこちらで確認 ● MySQL Server Version Reference ○ https://dev.mysql.com/doc/mysqld-version-reference/en/ ● MySQL Parameters(MyNA 代表とみたまさひろさん作) ○ https://mysql-params.tmtms.net/mysqld/ 32
mysql_native_password 認証プラグイン無効化 ● この認証プラグインでは SHA-1 を使っている ○ そのため、すでに MySQL 8.0.34 / 8.1.0 で非推奨になっていた 33
mysql_native_password 認証プラグイン無効化 ● バージョンアップ前に mysql_native_password 認証を 指定して作成したユーザーが接続不可に ○ 対象ユーザーの変更・再作成が必要 ■ 認証プラグインとして caching_sha2_password を使う ■ ALTER USER で変更する場合は IDENTIFIED BY ‘【パスワード】’ を省略し ない 34
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
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
センシティブなキーワードの廃止・置き換え ● 8.0.23 以降で徐々に置き換えが始まっていた ○ MASTER → (REPLICATION) SOURCE・BINARY LOG(S) 他 ○ SLAVE → REPLICA など ○ サーバー変数・コマンドラインオプションなども同様 37
センシティブなキーワードの廃止・置き換え ● 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
センシティブなキーワードの廃止・置き換え ● 8.4.0 で MASTER / SLAVE を使う構文が削除された ○ 利用中の管理ツールなどが未対応バージョンの場合対応が必要 ■ 監視ツールで出力結果をパースして使うケースを含む←ここ重要! ■ 設定ファイル(my.cnf)や起動スクリプトなども同様 ○ 詳細はスマートスタイル社のブログ記事で https://blog.s-style.co.jp/2024/07/12381/ 39
ここまでのまとめ ● 大きなポイントは 2 つ ○ mysql_native_password 認証プラグイン無効化 ○ センシティブなキーワードの廃止・置き換え ● 接続ユーザーの認証プラグイン設定、古いライブラリや 管理・監視ツールのバージョンアップなどの対応が必要 ○ 5.x → 8.0 よりはポイントが絞られるが確実に壁になりそう 40
周辺ツールの変化 41
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
8.0 で EOL になった製品 ● MySQL Enterprise Monitor ○ Enterprise Edition 以上の契約で使える監視ツール ○ 今後は Oracle Enterprise Manager for MySQL で代替 https://www.mysql.com/jp/products/enterprise/em.html 43
このパートのまとめは省略 44
HeatWave? それって誰ですか? 45
リブランディングでややこしくなった 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
アーキテクチャ図が複雑化した HeatWave ● GenAI が表現されていないけどそれでも複雑 https://www.oracle.com/jp/heatwave/features/ 47
主役は🐬に違いない HeatWave ● 「本体」その 1 は MySQL Database ○ 名前が変わって「HeatWave MySQL」に ○ MySQL Database 単体で使える ○ 列指向エンジン(後述)はオプション 48
本来のウリはここ↓だったはずの HeatWave ● 「本体」その 2 は列指向エンジン ○ メモリ上に全データを列指向フォーマットで置くエンジン ○ 集計・分析が得意(超高速) ■ 列指向だけど更新系がほとんど遅くならないのが特徴 ■ 9.0 からは複数クエリの並列処理も可能に ■ HeatWave GenAI でベクトルデータの処理をするときなどにも使う ■ 同様に HeatWave Lakehouse・HeatWave AutoML の処理にも使う 49
実は 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
移行事例も地味に増えてきた 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
ここまでのまとめ ● HeatWave は Oracle Cloud 上で提供されている MySQL マネージドサービス ● 通常の MySQL では苦手な集計・分析が得意な列指向イン メモリデータ処理エンジンを持つ(オプション) ● 他クラウドからの移行事例が(地味に)増えてきている 52
で、結局、🐬とは どう付き合っていけば良い? 53
私見では ● 普通の人が選ぶなら LTS Release 一択 ○ これが基本 ○ マイグレーション地獄にならないように ○ 2 年ごとにメジャーバージョンアップするサイクルを作る ■ 1 メジャーバージョン間の差分は小さいので移行も難しくない (5.7 → 8.0 のようなことはもうないはず) 54
私見では ● クラウドのマネージドサービスも LTS Release ○ 各社 Innovation Release への対応はあまり積極的ではなさそう →ニーズを考えれば当然 55
私見では ● ただし HeatWave に限れば Innovation Release もアリ ○ 追加機能に強い魅力を感じるなら ○ マイグレーション地獄を受け入れる覚悟で ■ なお HeatWave 各バージョンの提供終了時期は MySQL の EOL とは異なる https://docs.oracle.com/ja-jp/iaas/mysql-database/doc/mysql-server-versions.html (注:HeatWave on AWS では一部提供されないバージョンが存在する) 56
私見では ● 自前インストールもやっぱり LTS Release ○ Standard Edition / Enterprise Edition でのサポート契約を推奨 ■ 世に出るノウハウが減り続けている→だんだん自前運用が厳しくなっている (そんな時代だからこそ発信できる人はどんどん発信して!) ○ Community Edition(自力解決💪)ならこのあたり↓も意識しつつ ■ ビルド方法による性能の違い https://buildup-db.blogspot.com/2024/11/mysql-80.html 57
つまり ● HeatWave 以外は LTS Release ○ 自前インストールならサポート契約を推奨 58
余裕を持った移行計画で 楽しい🐬ライフを 59
おまけ 60
phpMyAdmin の GitHub の様子を眺めてみた ● リポジトリ全体で「seconds behind」を検索 ○ レプリカ側で「SHOW REPLICA STATUS」したときに出る表示 への対応状況を見てみた 61
phpMyAdmin の GitHub の様子を眺めてみた 62
phpMyAdmin の GitHub の様子を眺めてみた ● あわせて Issues(Closed 含む)で「MySQL 8.4」を検索 ↓関連 Pull Request 63
phpMyAdmin の GitHub の様子を眺めてみた ● ざっと見てみた雰囲気では ○ プロダクトコードには Master / Source 両対応の痕跡があった がテストコードは Master のみ ○ いずれテストコードの修正が必要になりそうな雰囲気が 64
phpMyAdmin の GitHub の様子を眺めてみた ● Issues で「mysql_native_password」を検索 ○ すでに Closed なものを含めて検索してみた →過去の苦労も含めて追いかけるため 65
phpMyAdmin の GitHub の様子を眺めてみた 66
phpMyAdmin の GitHub の様子を眺めてみた ● 雑な感想 ○ phpMyAdmin では MariaDB にも対応が必要なのが大変そう →MariaDB は caching_sha2_password とは別の道へ https://mariadb.com/kb/en/authentication-plugin-ed25519/ 67
参考情報など 68
アップグレードを計画するときの参考資料 ● 日本オラクル生駒さんの講演資料 ○ https://speakerdeck.com/ikomachi226/mysqlzui-xin-qing-bao-to-imazhi-tuteokitaiba ziyonatupunoji-chu-zhi-shi 69
MySQL のお役立ちサイト ● 本家 MySQL の公式ドキュメント ○ https://dev.mysql.com/doc/ ● スマートスタイル TECH BLOG(MySQL) ○ https://blog.s-style.co.jp/category/tech/mysql/ 70
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
MySQL のお役立ち書籍 ● MySQL 運用・管理[実践]入門 〜安全かつ高速にデータを扱う内部構造・動作原理を学ぶ ○ MySQL 8.0 向けだが 8.4 以降にも役立つ内容 ○ https://gihyo.jp/book/2024/978-4-297-14184-4 72