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

MySQL最新情報と いま知っておきたいバージョンアップの基礎知識

mikoma
October 17, 2024
79

MySQL最新情報と いま知っておきたいバージョンアップの基礎知識

2024/10/18 OSC Fall オンラインでの公演資料
10/15にリリースされた9.1イノベーションリリースで追加された機能概要とバージョンアップする際のポイントを掲載しています。

mikoma

October 17, 2024
Tweet

Transcript

  1. 生駒 眞知子 (Machiko IKOMA) 所属 • 日本オラクル株式会社 • MySQL GBU

    BIツール開発、オープンソースデータベースに携わった後日本オラクルに入社。 入社以来、MySQLのお客様・パートナーの技術支援を担当。。 2 Copyright © 2024, Oracle and/or its affiliates
  2. MySQLの道のり 3 Copyright © 2024, Oracle and/or its affiliates 1995

    2000 2005 2010 2015 2020 2025 MySQL AB(MySQL社)創業 最初のバージョンを公開 独自のオープンソース・ ライセンスからGPLに 商用版サブスクリプション ”MySQL Network” 発表 オラクルがMySQLの トランザクション・エンジン InnoDBの開発企業 Innobase OYを買収 サン・マイクロシステムズが MySQL ABを$1B (約11億円)で買収 オラクルがサン・マイクロシステムズを $7.4B (約81億円)で買収することを発表 欧州委員会の承認を経て 2010年1月27日に買収完了 MySQL部門も MySQL Global Business Unit として統合 MySQL社の 日本法人 MySQL 株式会社設立 MySQLのクラウド・ サービスの第1世代を リリース 高速クエリ処理 エンジンを搭載した MySQL HeatWave リリース MySQLの第2世代クラウド・サービス MySQL Database Serviceをリリース v3.23 v4.0 v5.1 v5.0 v5.5 v5.6 v5.7 v8.0 v8.2 v8.1 v9.0 v8.4 LTS イノベーション・リリースと LTS(Long-term Support) リリースで構成される 新しいリリースモデルを発表 v8.3
  3. 柔軟なMySQLの利用方法 MySQLサーバーは全て共通のソースコードのためハイブリッド構成も可能 コミュニティ版MySQL • レプリケーションや透過的暗号化 など運用に重要な機能を実装 • GPLv2 *OpenSSLに関する追加条項あり 商用版MySQL

    • サポートサービスや高度な セキュリティ機能を提供 • SE/EE/CGEが選択可能 HeatWave MySQL • MySQLチームが100%開発・ 提供するクラウド・サービス • 高速データ分析エンジン& 機械学習エンジンを組み込み MySQL Operator for k8s • MySQLの高可用性構成を Kubernetes上に構築&運用管理 • 商用版MySQL EEがベース 4 Copyright © 2024, Oracle and/or its affiliates いずれの利用方法でもMySQL開発チームと連携した 専門部隊によるサポートサービスをご利用いただけます MySQLを自社で運用管理 MySQLのマネージドサービス クラウドネイティブなMySQL 15倍 Redshift より高速 18倍 Snowflake より高速 35倍 BigQuery より高速 TPC-H 500TB MySQL HeatWave Lakehouseとのクエリ処理性能比較
  4. イノベーション・リリース バグ修正と新機能追加を行うリリース MySQL 9.0, 9.1 … • リリース方針 バグ修正 セキュリティ・パッチ

    新機能追加 機能やパラメータの非推奨化および削除 • リリースサイクル 3ヶ月毎 次バージョンのリリースでEOL Copyright © 2024, Oracle and/or its affiliates LTS(Long-Term Support)リリース バグ修正のみを行うリリース MySQL 8.4 • リリース方針 バグ修正 セキュリティ・パッチ バージョン間の互換性重視 • リリースサイクル リリース後8年間サポート 複数のLTSリリースをサポート予定 5 本番運用想定のテスト済み 本番運用想定のテスト済み
  5. GAから最長8年間 バグ修正、パッチ、アップデートを提供 Oracle Lifetime Support for MySQL Copyright © 2024,

    Oracle and/or its affiliates 6 サポート概要 Premier (1-5年) Extended (6-8年) Sustaining (9年以降) 24時間365日サポート 無制限インシデント ナレッジベース メンテナンス・リリース、バグ修正、パッチ、 アップデートの提供 既存のもののみ
  6. 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022

    2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 MySQL Releases and Support Timelines MySQL 5.6 MySQL 5.7 MySQL 8.0 MySQL 8.1 MySQL 8.4 Copyright © 2024, Oracle and/or its affiliates 7 MySQL 9.0 Bug Fix series LTS series Innovation Releases Innovation Release Premier Support Extended Support Sustaining Support MySQL 8.2 MySQL 8.3 MySQL 9.1
  7. 9.0.0 IR 8.4.1 LTS 8.0.38 Copyright © 2024, Oracle and/or

    its affiliates 9 2024年7月のリリース時
  8. 9.0.1 IR 8.4.2 LTS 8.0.39 Copyright © 2024, Oracle and/or

    its affiliates 10 2024年7月のリリース時 ※こういうこともあります。。。
  9. 9.1.0 IR 8.4.3 LTS 8.0.40 Copyright © 2024, Oracle and/or

    its affiliates 11 2024年10月リリース!
  10. 9.2.0 IR 8.4.4 LTS 8.0.41 Copyright © 2024, Oracle and/or

    its affiliates 12 2025年1月のリリース時 ※バージョン番号はリリースされるまで確定ではありませんが、想定されるバージョン番号で説明しています。
  11. Community Edition • CREATE DATABASE と DROP DATABASE のクラッシュセーフサポート •

    アトミックなDDLをサポートするInnoDBや他のストレージエンジンに対応 • ファイルシステムやその他の問題によって発生する可能性のある問題を的確に処理 • CREATE VIEW文のIF NOT EXISTS句のサポート • 指定されたビューが存在しない場合、ビューを作成 • ビューが既に存在する場合、ビュー定義は変更されず警告を出力 • EXPLAINの改善 • 準結合(semijoin)が使用されている場合、EXPLAIN FORMAT=TREEの出力結果にその情報 を包含 MySQL Server 9.1で追加された主な機能 Copyright © 2024, Oracle and/or its affiliates 13 CE
  12. Enterprise Edition JavaScript ストアドプログラムのVECTOR型サポート • ベクトル値を入力引数、出力引数、プリペアドステートメントのbind()パラメータ、戻り値として使用で きるように強化 MySQL Server 9.1で追加された主な機能

    Copyright © 2024, Oracle and/or its affiliates 14 EE SQLでのストアドプログラムと同様に作成可能 mysql> CREATE FUNCTION gcd(a INT, b INT) -> RETURNS INT NO SQL LANGUAGE JAVASCRIPT AS -> $mle$ $> let x = Math.abs(a) $> let y = Math.abs(b) $> while(y) { $> var t = y $> y = x % y $> x = t $> } $> return x $> $mle$ -> ; Query OK, 0 rows affected (0.01 sec) MySQL9.0 IR 利用もSQLでのストアドプログラムと同様 mysql> SELECT gcd(75, 220), gcd(75, 225); +--------------+--------------+ | gcd(75, 220) | gcd(75, 225) | +--------------+--------------+ | 5 | 75 | +--------------+--------------+ 1 row in set (0.00 sec)
  13. Enterprise Edition アプライヤ統計の拡張 • レプリケーション・パイプライン全体から統計情報を収集することでMySQLの可観測性を強化 • replication_applier_metrics 指定されたレプリケーション・チャネルに対するアプライヤ・メトリクスの提供 • replication_applier_progress_by_worker

    指定されたワーカーに対するメトリクスの提供 • DDLとDMLを区別する • レプリケーション・スループット(バイト/秒)の監視する • 完了したトランザクション、キューに入れられたトランザクション、進行中のトランザクション • レプリケーションの遅れを診断し、追いつくまでの時間を見積もる MySQL Server 9.1で追加された主な機能 Copyright © 2024, Oracle and/or its affiliates 15 EE
  14. Enterprise Edition OpenTelemetryサポート機能今日 - OpenTelemetry ログのサポート • MySQLサーバーからテレメトリーログをエクスポート • OpenTelemetry

    標準をサポートするコレクターとバックエンドに送信 • ログはOTLP HTTPプロトコルによるプッシュモデルを使用して、単一のエンドポイントにエクスポート可能 • ネットワーク暗号化はTLS経由で提供 • ログ圧縮をサポート • 本番環境での運用時トラブルシューティング • MySQLサーバーからログイベントを収集 • ログデータを OpenTelemetry OTLPフォーマットに整形 • OTLP ログを外部の OpenTelemetry Collector プロセスに送信可能 MySQL Server 9.1で追加された主な機能 Copyright © 2024, Oracle and/or its affiliates 16 EE
  15. Enterprise Edition OpenID Connectサポート • MySQL 9.1 のConnector、MySQL Router、クライアントは、OpenID Connect

    をサポートする 外部の認証サーバ(IAM)によって実行された認証に基づいて、ユーザの ID を提供することが可能 <OpenID プロバイダの例> Oracle • Oracle Identity Cloud • Oracle Access Management Microsoft • Microsoft Entra ID (formerly Azure Active Directory) • ADFS on Windows Server など プロバイダリスト : https://openid.net/certification/ MySQL Server 9.1で追加された主な機能 Copyright © 2024, Oracle and/or its affiliates 17 EE
  16. MySQL for Developers License Copyright © 2024, Oracle and/or its

    affiliates 18 Full access to MySQL Enterprise Edition • Enterprise Server • Backup • Router • Shell • Connectors • JavaScript 学習、開発用途であれば、MySQL Enterprise EditionをOTNからダウンロードして無償で使用可能に!! ※OTN:Oracle Technology Network Download Now https://www.oracle.com/mysql/technologies/mysql-enterprise-edition-downloads.html ダウンロード https://www.oracle.com/mysql/technologies/mysql-enterprise-edition-downloads.html
  17. • Connector/J, C++, NET, ODBC, Python: 基本的にはMySQLサーバーのバージョン番号の最新に追随 例) MySQL 8.0.40,

    8.4.3と9.1.0がリリース → Connectorsのバージョン番号は9.1.0になる • MySQL Workbench: 8.0でリリース終了→ MySQL Shell for VS Codeが後継 (MySQL Workbench 8.0 は サポート中の全てのMySQLサーバーへ接続は可能) • MySQL Enterprise Monitor: 2025年1月でEOL → 「Oracle Enterprise Manager for MySQL」と「OCI Database Management Service 」が後継 コネクタ、周辺ツールについて Copyright © 2024, Oracle and/or its affiliates 19
  18. MySQL Workbench (EOL) • MySQLサーバーを管理、起動停止 • ER図を用いたデータベース設計 • ER図からMySQLサーバー上にテーブルや インデックスを作成するフォワード・エンジニアリング

    • MySQLサーバー上のオブジェクトからER図を 作成するリバース・エンジニアリング • SQLエディタでのSQL開発 • 各種RDBMSからのマイグレーション • PostgreSQL, MS SQL Server, MS Access, SQLite, SQL Anywhere, Sybase ASE MySQL Shell for VS Code (previewリリース) • MySQLサーバーやHeatWaveインスタンスへの 接続を管理 • Oracle Cloud Infrastructure (OCI) の HeatWaveや関連するサービスの管理 • データベースに接続した上でDB Editorでの作業 • DB Notebook インターフェース • MySQL Shell GUI Console https://www.mysql.com/jp/why- mysql/presentations/dbts2024-appdev/ MySQLのGUIクライアント Copyright © 2024, Oracle and/or its affiliates 20
  19. Copyright © 2024, Oracle and/or its affiliates 22 MySQLバージョンアップの流れ •

    バージョンとバージョンアップ方式の決定 • バージョン間の変更点確認と修正(パラメーター、予約語、関数など) • MySQLサーバーのバージョンアップテスト • アプリケーションのテスト • バージョンアップ(本番移行)作業計画策定 • バージョンアップ実施(本番移行)
  20. Copyright © 2024, Oracle and/or its affiliates 23 MySQLバージョンアップの流れ •

    バージョンとバージョンアップ方式の決定 • バージョン間の変更点確認と修正(パラメーター、予約語、関数など) • MySQLサーバーのバージョンアップテスト • アプリケーションのテスト • バージョンアップ(本番移行)作業計画策定 • バージョンアップ実施(本番移行)
  21. Copyright © 2024, Oracle and/or its affiliates 24 ✓ 必要な作業計画を立てて確実に作業を行うため

    ✓ パラメーターのデフォルト値変更、非推奨/削除による不要なトラブルを避けるため ✓ アプリケーション側の修正要/不要などの影響を確認しておくため …etc. なぜ重要なのか?
  22. バージョン間のパラメーター仕様変更例 mysql_native_password 削除 • caching_sha2_password がデフォルトの認証プラグインに変更(SHA-256) • mysql_native_passwordのプラグイン化 • mysql_native_password

    は非推奨 • デフォルトではプラグインとしてロードされないように変更 • mysql_native_password を削除 25 Copyright © 2024, Oracle and/or its affiliates https://blogs.oracle.com/mysql/post/mysql-90-its-time-to-abandon-the-weak-authentication-method MySQL8.0 MySQL8.4 LTS MySQL9.0 IR
  23. 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022

    2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 MySQL Releases and Support Timelines MySQL 5.6 MySQL 5.7 MySQL 8.0 MySQL 8.1 MySQL 8.4 Copyright © 2024, Oracle and/or its affiliates 26 MySQL 9.0 Bug Fix series LTS series Innovation Releases Innovation Release Premier Support Extended Support Sustaining Support MySQL 8.2 MySQL 8.3 MySQL 9.1 2026年4月以降は 新規バグ修正やパッチは 提供されないステータス
  24. Copyright © 2024, Oracle and/or its affiliates 27 リリースモデルとバージョン •

    LTSとInnovation Release ✓ サポート期間 ✓ 必要な機能/バグ修正 • サポートOS https://www.mysql.com/support/supportedplatforms/database.html • アプリケーション、フレームワーク等の対応状況 • リリースシリーズ(メジャーバージョン)のアップグレードには綿密な計画とテストが必要 バージョンアップ方式 • ロジカルアップグレード : 旧MySQL インスタンスから新しいインスタンスに SQL をエクスポート • インプレースアップグレード : MySQL サーバパッケージを置き換え • レプリケーション・トポロジ・アップグレード : レプリケーションを構成しているMySQLサーバーのアップグレード バージョンとバージョンアップ方式の決定
  25. Copyright © 2024, Oracle and/or its affiliates 28 バージョンアップ手法① MySQL5.7

    MySQL8.0 バックアップ リストア ロジカルアップグレード MySQL5.7 インプレースアップグレード MySQL8.0 モジュールの置き換え
  26. 新環境へのデータ移行 • アップグレード方式 • 旧環境とは別に新環境のMySQLデータベースを作成し、そこにデータを格納する • 実施方法 • 旧環境のデータベースを残したまま新しい環境を作成可能 •

    新環境のMySQLデータベースに必要なユーザーを作成後、mysqldumpで取得したユーザーデータ をロードする • 2つ以上先のメジャーバージョンへも直接移行可能 Or • MySQL Shell loadDumpによる移行 Or • MySQL Shell CopyInstanceによる移行 ロジカルアップグレード Copyright © 2024, Oracle and/or its affiliates 29
  27. Copyright © 2024, Oracle and/or its affiliates 30 • アップグレード方式

    • MySQLサーバーのバイナリを新しいバージョンに入れ替えて、mysqlを起動する • 実施方法 • 旧環境のデータベースを直接アップグレードする • 1つ先のメジャーバージョンへバージョンアップ可能 • リスクをより低くするためには、まずそのバージョン内で最新のマイナーバージョンまで インプレースアップグレードした後で、次のメジャーバージョンにインプレースアップグレードする (例:MySQL 5.7.21 --> 5.7.44 --> 8.0.11 --> 8.0.39) インプレースアップグレード
  28. Copyright © 2024, Oracle and/or its affiliates 31 • 新バージョンのモジュールをインストールする

    • バージョンアップ先が別筐体の場合は、単純に新バージョンをインストールするだけ • MySQL8.0 入門 ~インストール編 for Windows~ https://www.mysql.com/jp/why-mysql/presentations/mysql-80-for-beginners-install-windows- doc-jp/ • MySQL8.0 入門 ~インストール編 for Linux~ https://www.mysql.com/jp/why-mysql/presentations/mysql-80-for-beginners-install-for-linux- and-architecture-2022-doc-jp/ モジュールのバージョンアップ 参考資料
  29. レプリケーション・トポロジ・アップグレード バージョンアップ手法② Copyright © 2024, Oracle and/or its affiliates 32

    MySQL5.7 MySQL5.7 レプリケーション ソース レプリカ MySQL8.0 バージョンアップ • レプリカ→ソースの順にバージョンアップを実行する • レプリカのメジャーバージョン1つ新しい構成はサポートされる • バージョンの組み合わせはアップグレードパスを確認 https://dev.mysql.com/doc/refman/8.4/en/upgrade-paths.html • レプリカが複数ある場合:すべてのレプリカのバージョンアップ後にソースをバージョンアップ 停止
  30. アップグレードパス 例 インプレース CLONE Replication DumpInstance/ LoadDump LTS -> LTS

    LTS 8.4 -> LTS 9.7 LTS 8.4 -> LTS 10.7 LTS 8.4.0 -> LTS 8.4.11 Innovation -> Innovation Innovation 8.1 -> 8.2 Innovation 8.1 -> 8.3 Innovation -> LTS Innovation 8.1 -> LTS 8.4 Copyright © 2024, Oracle and/or its affiliates 33
  31. Copyright © 2024, Oracle and/or its affiliates 34 バージョンアップによるメンテナンス時間を最小化する工夫 レプリケーション機能によるバージョンアップによるメンテナンス時間の最小化

    • 新環境を別筐体に用意し、既存環境をソース、新環境をレプリカとしてレプリケーションを設定する • 「ソース:MySQL 5.7、レプリカ:MySQL 8.0」のような構成はサポートされる • レプリケーションにより更新内容が伝搬され、遅延がなくなってからアプリケーションの接続先を切り替えれば、 メンテナンス時間を短縮可能 ソース MySQL 5.7 レプリカ MySQL 5.7 レプリカ MySQL 5.7 ソース Version 5.7 レプリカ MySQL 8.0 レプリカ MySQL 5.7 ロジカルアップグレード データ同期
  32. MySQL Server アップグレード・チェッカー・ユーティリティを実行する • util.checkForServerUpgrade() • MySQL Shellを実行できる環境が必要 • バージョンアップが可能かチェック(43項目)

    ドキュメントから確認する • MySQL Server Version Reference (バージョンリファレンス) • MySQLサーバーのパラメーター、関数等の変更情報サマリ • MySQL 8.4 Reference Manual (リファレンスマニュアル) • MySQLサーバー8.4の機能ドキュメント • MySQL 8.4 Release Notes (リリースノート) • 8.4リリースシリーズの変更点サマリ バージョン間の差異の確認方法 Copyright © 2024, Oracle and/or its affiliates 35
  33. MySQL Shell 8.1 (util新機能) mysqlsh> util.copyInstance(connectionData[, options]) mysqlsh> util.copySchemas(schemaList, connectionData[,

    options]) mysqlsh> util.copyTables(schemaName, tablesList, connectionData[, options]) コピーユーティリティは中間ストレージを使わずに、MySQLインスタンス間でDDLとデータをコピー ・dumpInstance() とloadDump()を1つの操作に統合 *ほとんどのオプションをそのまま利用可能 ・HeatWave MySQL Database Serviceへのコピーも可能 *デフォルトでHeatWave MySQL Database Serviceへの互換性チェックが有効 *ソースがMySQL 5.7の場合は自動的にcheckForServerUpgradeを実行 https://dev.mysql.com/doc/mysql-shell/8.4/en/mysql-shell-utils-copy.html Copyright © 2024, Oracle and/or its affiliates 36
  34. • MySQLの「新しい」クライアント・プログラム • 2017年にGA (新しい? ) • SQL以外にもJavaScriptとPythonをサポート • 開発や運用を効率化する各種DevOpsユーティリティ

    • [Tab]キーでコード補完 地味に便利 • MySQLサーバーへの接続方法いろいろ • ユーザー名とパスワードのログイン情報を記憶させることも可能 • Linux: .mylogin.cnf に暗号化して格納 • macOS, Windows: OSの鍵管理システムを利用 MySQL Shellって何? Copyright © 2024, Oracle and/or its affiliates 37 $ mysqlsh -u user -h host -P port -D schema $ mysqlsh --user=user --host=host --port=port --schema=schema $ mysqlsh user@host:port/schema $ mysqlsh --uri user@host:port/schema $ mysqlsh mysqlx://user@host:port/schema MySQL Shellを起動後に接続も可能 MySQL SQL > \js Switching to JavaScript mode... MySQL JS > \py Switching to Python mode... MySQL Py > \sql Switching to SQL mode... Commands end with ; MySQL SQL > MySQL Shell 8.1.0 Copyright (c) 2016, 2023, Oracle and/or its affili Oracle is a registered trademark of Oracle Corpora Other names may be trademarks of their respective Type '\help' or '\?' for help; '\quit' to exit. MySQL JS > \c user@host:port/schema
  35. 5. バージョンアップ アップグレード・チェッカー・ユーティリティ 6. どこで作業しているかの確認 プロンプトのカスタマイズ 7. レプリケーションの構築 • グループ・レプリケーションの構築

    MySQL InnoDB Cluster • 非同期レプリケーションの構築 MySQL InnoDB ReplicaSet • 災害対策構成の構築 MySQL InnoDB ClusterSet MySQL Shellの主な機能 Copyright © 2024, Oracle and/or its affiliates 38 1. テスト環境の作成 「サンドボックス」MySQLサーバーの構築と起動 2. アプリ開発でJSONの利用 MySQLドキュメントストア (NoSQL APIとドキュメント・データベース) 3. バックアップ/リカバリやデータ移動 ダンプ&ロードユーティリティ コピーユーティリティ パラレルインポートユーティリティ JSONインポートユーティリティ テーブルエクスポートユーティリティ 4. パフォーマンス関連情報の取得 診断ユーティリティ (Diagnostics Utilities)
  36. MySQL Shell と mysqldump の性能比較 39 Copyright © 2024, Oracle

    and/or its affiliates. All rights reserved. 39 25 80 32 1092 2800 1109 1276 0 500 1000 1500 2000 2500 3000 Ontime Stackoverflow EN Wikipedia All ダンプスループット(MB/s) データセット MySQL 論理バックアップスループット比較 mysqldump MySQL Shell dumpInstance 4 16 3 5 107 195 77 186 0 50 100 150 200 250 Ontime Stackoverflow EN Wikipedia All ロードスループット(MB/s) データセット MySQL 論理ダンプロードスループット比較 mysqldump MySQL Shell loadIDump • 全データセットのダンプ/ロードスループットの比較 • Airline On-Time Statistics(transtats.bts.gov)、Stackoverflow(archive.org)、EN Wikipedia (enwiki backup)の全データセットを、同一システム条件でスループット比較 https://dev.mysql.com/blog-archive/mysql-shell-dump-load-part-2-benchmarks/
  37. MySQL Shell MySQLのバージョンアップ前に互換性のチェック • 5.7から8.0, 8.0から8.4へのメジャーバージョンアップ • 8.0, 8.4内でのマイナーバージョンアップ •

    5.7より前のバージョンには非対応 • GA版のMySQLサーバーのみ対応 • バージョンアップ先を指定してチェック可能 チェック対象のMySQLサーバーに接続 • 接続時のユーザーは以下の権限必須 RELOAD, PROCESS, SELECT • コマンドラインまたはMySQL Shell内でコマンド実行 1) 5.6.4以前のTIME型、DATETIME型、TIMESTAMP型の利用 2) ルーチンなどのオブジェクトでのMySQL 8.0文法チェック 3) オブジェクト名でのMySQL 8.0の予約語の利用 4) 古いキャラクタセット utf8mb3 または utf8 の利用 5) テーブル名でのMySQL 8.0のデータディクショナリのテーブル名の利用 6) ネイティブのパーティショニングをサポートしていないストレージエンジンでの パーティショニングの利用 7) 64文字以上の外部キー名の利用 8) 廃止されたSQLモード MAXDB の利用 9) 廃止されたSQLモードの利用 10) ENUM型またはSET型での64文字以上の項目の利用 11) 共通表領域に置かれたテーブルでのパーティショニングの利用 12) 表領域ファイルのファイルパスの循環参照 13) 廃止された関数の利用 14) 廃止された`GROUP BY ASC/DESC`構文の利用 15) 廃止されたエラーログをシステムログに書き出すオプションの利用 16) 廃止されたシステム変数の利用 17) デフォルト値が新しい値に変わるシステム変数の利用 18) 年月日にゼロが含まれていないか 19) ファイルの削除や破損によるスキーマの不整合 20) 8.0でInnoDBを利用するテーブルでの他のエンジン利用 21) `check table x for upgrade`コマンドで発生したエラー 22) 認証プラグインのアップグレードに関する注意事項 23) 初期値を持てないカラム対応 24) 5.7で用いられていた不適切なテーブル名/スキーマ名 25) 5.7での孤立したルーチン 26) 廃止された、オブジェクト名での$サインの使用 27) 5.7以上では動かない大きすぎるインデックス 28) 廃止された、ルーチンでの'.<table>’文法 …etc. アップグレード・チェッカー・ユーティリティ Copyright © 2024, Oracle and/or its affiliates 40
  38. MySQL Shell コマンドラインから実行: mysqlsh root:@localhost:3306 -e "util.checkForServerUpgrade();" MySQL ShellのJavaScriptまたはPythonモードから実行 mysql-js>

    util.checkForServerUpgrade("root@localhost:3306"); MySQL ShellからMySQLサーバーに接続済みの場合は引数無しで実行 mysql-py> util.check_for_server_upgrade(); 出力: Error - 修正しない場合はバージョンアップが失敗する (例: 古い日付型利用など) Warning -修正しない場合はバージョンアップ後に意図しないエラーが発生する可能性あり (例: 予約語との競合) Notice – 情報提供のみ 出力の最後にそれぞれの件数をサマリーとして表示 アップグレード・チェッカー・ユーティリティ Copyright © 2024, Oracle and/or its affiliates 41 https://dev.mysql.com/doc/mysql-shell/8.4/en/mysql-shell-utilities-upgrade.html
  39. Copyright © 2024, Oracle and/or its affiliates 42 MySQL Shell

    8.1から MySQL サーバー 5.7.42 に対してチェックした結果 MySQL Shell でのアップグレードチェック (1/4) MySQL JS > shell.connect('root@localhost:4321') Creating a session to 'root@localhost:4321' Please provide the password for 'root@localhost:4321': ********** Save password for 'root@localhost:4321'? [Y]es/[N]o/Ne[v]er (default No): Y Fetching schema names for auto-completion... Press ^C to stop. Your MySQL connection id is 6 Server version: 5.7.42-log MySQL Community Server (GPL) No default schema selected; type \use <schema> to set one. <ClassicSession:root@localhost:4321> MySQL localhost:4321 ssl JS > util.checkForServerUpgrade() The MySQL server at localhost:4321, version 5.7.42-log - MySQL Community Server (GPL), will now be checked for compatibility issues for upgrade to MySQL 8.1.0... 1) Usage of old temporal type No issues found ...... 中略 ...... アップグレード対象のMySQLに接続 (クラシックプロトコルでよい) util.checkForServerUpdate() を実行 チェック項目について 順次検証結果をレポート ※MySQL Shell 8.1は既にサポート終了しているバージョンです。MySQL Shell最新版をご使用ください。
  40. Copyright © 2024, Oracle and/or its affiliates 43 MySQL Shell

    8.1から MySQL サーバー 5.7.42 に対してチェックした結果(続) MySQL Shell でのアップグレードチェック (2/4) 9) Usage of obsolete sql_mode flags Notice: The following DB objects have obsolete options persisted for sql_mode, which will be cleared during upgrade to 8.0. More information: https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals global system variable sql_mode - defined using obsolete NO_AUTO_CREATE_USER option ...... 中略 ...... 15) Removed system variables for error logging to the system log configuration To run this check requires full path to MySQL server configuration file to be specified at 'configPath' key of options dictionary More information: https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-13.html#mysqld-8-0-13-logging ...... 中略 ...... ※MySQL Shell 8.1は既にサポート終了しているバージョンです。MySQL Shell最新版をご使用ください。
  41. Copyright © 2024, Oracle and/or its affiliates 44 MySQL Shell

    8.1から MySQL サーバー 5.7.42 に対してチェックした結果(続) MySQL Shell でのアップグレードチェック (3/4) 22) New default authentication plugin considerations Warning: The new default authentication plugin 'caching_sha2_password' offers more secure password hashing than previously used 'mysql_native_password’ (and consequent improved client connection authentication). However, it also has compatibility implications that may affect existing MySQL installations. If your MySQL installation must serve pre-8.0 clients and you encounter compatibility issues after upgrading, the simplest way to address those issues is to reconfigure the server to revert to the previous default authentication plugin (mysql_native_password). For example, use these lines in the server option file: [mysqld] default_authentication_plugin=mysql_native_password However, the setting should be viewed as temporary, not as a long term or permanent solution, because it causes new accounts created with the setting in effect to forego the improved authentication security. If you are using replication please take time to understand how the authentication plugin changes may impact you. More information: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password- compatibility-issues https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password- replication ※MySQL Shell 8.1は既にサポート終了しているバージョンです。MySQL Shell最新版をご使用ください。
  42. Copyright © 2024, Oracle and/or its affiliates 45 MySQL Shell

    8.1から MySQL サーバー 5.7.42 に対してチェックした結果(続) MySQL Shell でのアップグレードチェック (4/4) ...... 中略 ...... Errors: 0 Warnings: 1 Notices: 1 NOTE: No fatal errors were found that would prevent an upgrade, but some potential issues were detected. Please ensure that the reported issues are not significant before upgrading. MySQL localhost:4321 ssl JS > Error、Warning、Noticeの件数を 最後にサマリーとして表示 ※MySQL Shell 8.1は既にサポート終了しているバージョンです。MySQL Shell最新版をご使用ください。
  43. MySQL Server Version Reference 5.7~8.4についてバージョン間の差異をオブジェクトごとに記載 ✓ mysqldのオプションとパラメーター組み込み関数と演算子 ✓ ロード可能な関数 ✓

    INFORMATION_SCHEMA ✓ Performance Schema ✓ Sys schema ✓ ビルドオプション ✓ 予約語 ドキュメントでバージョン間差異を確認する Copyright © 2024, Oracle and/or its affiliates 46 https://dev.mysql.com/doc/mysqld-version-reference/en/
  44. MySQL Server Version Reference 記載例)オプション値の差異 ドキュメントでバージョン間差異を確認する Copyright © 2024, Oracle

    and/or its affiliates 47 オプション名 追加された バージョン 非推奨となった バージョン 削除された バージョン Cmd : コマンドライン有効可否 Cnf : 設定ファイル有効可否 Svr : サーバーシステム変数 Stat : ステータス変数 Scope :スコープ(セッション/グローバル/その両方) Dyn : 動的設定可否 サポート状況
  45. MySQL 8.4 Reference Manual 1世代前のリリースシリーズとの変更点を記載 • ”Upgrading MySQL” • Changes

    in MySQL 8.4 • Overview of changes in MySQL 8.4.0 • What Is New in MySQL 8.4 since MySQL 8.0 • Features Added or Changed in MySQL 8.4 (追加または変更された機能) • Features Deprecated in MySQL 8.4 (非推奨となった機能) • Features Removed in MySQL 8.4 (削除された機能) • Server and Status Variables and Options Added, Deprecated, or Removed in MySQL 8.4 since 8.0 • Options and Variables Introduced in MySQL 8.4 • Options and Variables Deprecated in MySQL 8.4 • Options and Variables Removed in MySQL 8.4 https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html ドキュメントでバージョン間差異を確認する Copyright © 2024, Oracle and/or its affiliates 48
  46. MySQL 8.4 Release Notes 各バージョンの変更内容を機能ごとに記載 ドキュメントでバージョン間差異を確認する Copyright © 2024, Oracle

    and/or its affiliates 50 バージョンごとの 変更内容 https://dev.mysql.com/doc/relnotes/mysql/8.4/en/news-8-4-0.html 機能ごとの変更内容
  47. MySQL 8.0 Release Notes ドキュメントでバージョン間差異を確認する Copyright © 2024, Oracle and/or

    its affiliates 51 互換性が失われる変更点には “Incompatible Change“という 見出しがついている
  48. MySQL Parameters https://mysql-params.tmtms.net/mysqld/ バージョン間でのパラメーター、予約語などの各種差異を確認できるWebページ Copyright © 2024, Oracle and/or its

    affiliates 52 -MySQL Parameters のデータの作り方 https://zenn.dev/tmtms/articles/031079d690379b6913a6 -MySQL Parameters で SQL 構文の差分を確認できるようにした https://zenn.dev/tmtms/articles/202405-mysql-params