MySQL Shell 8.0  /  MySQL Shell ユーティリティ  /  アップグレードチェッカユーティリティ

このページは機械翻訳したものです。

8.1 アップグレードチェッカユーティリティ

util.checkForServerUpgrade() 関数は、MySQL サーバーインスタンスのアップグレード準備ができているかどうかを確認できるアップグレードチェッカユーティリティです。 MySQL Shell 8.0.13 から、最初の MySQL Server 8.0 General Availability (GA) リリース (8.0.11) から現在の MySQL Shell リリース番号と一致する MySQL Server リリース番号まで、アップグレード先のターゲット MySQL Server リリースを選択できます。 アップグレードチェッカユーティリティは、指定されたターゲットリリースに関連する自動チェックを実行し、手動で行う必要がある関連チェックをさらにアドバイスします。

アップグレードチェッカユーティリティを使用して、MySQL 5.7 サーバーインスタンスの互換性エラーおよびアップグレードの問題を確認できます。 MySQL Shell 8.0.13 から、これを使用して、MySQL 8.0 リリースシリーズ内の別の GA ステータスリリースで MySQL 8.0 サーバーインスタンスをチェックすることもできます。 MySQL Server インスタンスを指定せずに checkForServerUpgrade() を起動すると、グローバルセッションに現在接続されているインスタンスがチェックされます。 現在接続されているインスタンスを表示するには、\status コマンドを発行します。

注記
  1. アップグレードチェッカユーティリティでは、MySQL 5.7 より前のバージョンの MySQL Server インスタンスのチェックはサポートされていません。

  2. MySQL Server は GA リリース間のアップグレードのみをサポートしています。 MySQL 5.7 または 8.0 の GA 以外のリリースからのアップグレードはサポートされません。 サポートされているアップグレードパスの詳細は、アップグレードパス を参照してください。

MySQL Shell 8.0.16 から、アップグレードチェッカユーティリティはサーバーインスタンスの構成ファイル (my.cnf または my.ini) を確認できます。 このユーティリティは、構成ファイルで定義されているが、ターゲットの MySQL Server リリースで削除されているシステム変数をチェックします。また、構成ファイルで定義されておらず、ターゲットの MySQL Server リリースでデフォルト値が異なるシステム変数もチェックします。 これらのチェックでは、checkForServerUpgrade() を起動するときに、構成ファイルへのファイルパスを指定する必要があります。

アップグレードチェッカユーティリティは、TCP ソケットまたは Unix ソケットを使用して、X プロトコル 接続または クラシック MySQL プロトコル 接続を介して動作できます。 事前に接続を作成することも、関数の引数として指定することもできます。 ユーティリティは常に新しいセッションを作成してサーバーに接続するため、MySQL Shell グローバルセッションは影響を受けません。

MySQL Shell 8.0.20 までは、アップグレードチェッカユーティリティの実行に使用されるユーザーアカウントに ALL 権限が必要です。 MySQL Shell 8.0.21 からは、ユーザーアカウントに RELOADPROCESS および SELECT 権限が必要です。

アップグレードチェッカユーティリティでは、テキスト形式 (デフォルト) または JSON 形式 (devops 自動化で使用するための解析および処理が簡単な場合があります) で出力を生成できます。

アップグレードチェッカユーティリティには、次のシグネチャがあります:

checkForServerUpgrade (ConnectionData connectionData, Dictionary options)

どちらの引数もオプションです。 接続がまだ存在しない場合、最初の接続データが提供されます。2 番目の接続データは、次のオプションを指定するために使用できるディクショナリです:

password

アップグレードチェッカユーティリティの実行に使用されるユーザーアカウントのパスワード。 このディクショナリオプションを使用するか、接続詳細の一部としてパスワードを指定できます。 パスワードを指定しない場合、ユーティリティはサーバーへの接続時にパスワードの入力を求めます。

targetVersion

アップグレード先のターゲット MySQL Server バージョン。 MySQL Shell 8.0.22 では、リリース 8.0.11 (最初の MySQL Server 8.0 GA リリース)、8.0.12, 8.0.13, 8.0.14, 8.0.15, 8.0.16, 8.0.17, 8.0.18, 8.0.19, 8.0.20, 8.0.21 または 8.0.22 を指定できます。 短い形式のバージョン番号 8.0 を指定するか、targetVersion オプションを省略すると、ユーティリティは現在の MySQL Shell リリース番号と一致する MySQL Server リリース番号へのアップグレードをチェックします。

configPath

確認する MySQL サーバーインスタンスの my.cnf または my.ini 構成ファイルへのローカルパス (C:\ProgramData\MySQL\MySQL Server 8.0\my.ini など)。 ファイルパスを省略し、アップグレードチェッカユーティリティで構成ファイルを必要とするチェックを実行する必要がある場合、そのチェックは失敗し、ファイルパスを指定する必要があることを知らせるメッセージが表示されます。

outputFormat

アップグレードチェッカユーティリティからの出力が返される形式。 このオプションを省略した場合のデフォルトはテキスト形式 (TEXT) です。 JSON を指定すると、かわりに、アップグレードチェッカユーティリティの JSON 出力 にリストされている形式で整形式の JSON 出力が返されます。

たとえば、次のコマンドは、グローバルセッションに現在接続されている MySQL サーバーインスタンスを確認し、テキスト形式で出力します:

mysqlsh> \status
MySQL Shell version 8.0.22
...
Server version:               5.7.25-log MySQL Community Server (GPL)
...
mysqlsh> util.checkForServerUpgrade()

次のコマンドは、URI user@example.com:3306 の MySQL サーバーをチェックして、最初の MySQL Server 8.0 GA ステータスリリース (8.0.11) にアップグレードします。 ユーザーパスワードと構成ファイルパスは、オプションディクショナリの一部として提供され、出力はデフォルトのテキスト形式で返されます:

mysqlsh> util.checkForServerUpgrade('user@example.com:3306', {"password":"password", "targetVersion":"8.0.11", "configPath":"C:\ProgramData\MySQL\MySQL Server 8.0\my.ini"})

次のコマンドは、現在の MySQL Shell リリース番号 (デフォルト) と一致する MySQL Server リリース番号にアップグレードするために同じ MySQL サーバーをチェックし、その後の処理のために JSON 出力を返します:

mysqlsh> util.checkForServerUpgrade('user@example.com:3306', {"password":"password", "outputFormat":"JSON", "configPath":"C:\ProgramData\MySQL\MySQL Server 8.0\my.ini"})

MySQL 8.0.13 から、mysqlsh コマンドインタフェースを使用して、コマンドラインからアップグレードチェッカユーティリティを起動できます。 この構文の詳細は、セクション5.8「API コマンドラインインタフェース」 を参照してください。 次の例では、MySQL サーバーのリリース 8.0.21 へのアップグレードをチェックし、JSON 出力を返します:

mysqlsh -- util checkForServerUpgrade user@localhost:3306 --target-version=8.0.21 --output-format=JSON --config-path=/etc/mysql/my.cnf

次の例に示すように、中カッコを使用して名前付きオプションとして接続データをグループ化することもできます。これは、メソッド名に camelCase ではなく小文字とハイフンを使用できることも示しています:

mysqlsh -- util check-for-server-upgrade { --user=user --host=localhost --port=3306 } --target-version=8.0.21 --output-format=JSON --config-path=/etc/mysql/my.cnf

次の例では、Unix ソケット接続を使用し、コマンドラインからユーティリティを起動するための古い形式を示しますが、これはまだ有効です:

./bin/mysqlsh --socket=/tmp/mysql.sock --user=user -e "util.checkForServerUpgrade()"

アップグレードチェッカユーティリティのヘルプを表示するには、次のコマンドを発行します:

mysqlsh> util.help("checkForServerUpgrade")

util.checkForServerUpgrade() は値を返さなくなりました ( MySQL Shell 8.0.13 の前に、値 0、1 または 2 が返されました)。

アップグレードチェッカユーティリティを起動すると、MySQL Shell はサーバーインスタンスに接続し、アップグレード用のインストールの準備 で説明されている設定をテストします。 例:

The MySQL server at example.com:3306, version
5.7.25-enterprise-commercial-advanced - MySQL Enterprise Server - Advanced Edition (Commercial),
will now be checked for compatibility issues for upgrade to MySQL 8.0.22...

1) Usage of old temporal type
  No issues found

2) Usage of db objects with names conflicting with new reserved keywords
  Warning: The following objects have names that conflict with new reserved keywords. 
  Ensure queries sent by your applications use `quotes` when referring to them or they will result in errors.
  More information: https://dev.mysql.com/doc/refman/en/keywords.html

  dbtest.System - Table name
  dbtest.System.JSON_TABLE - Column name
  dbtest.System.cube - Column name

3) Usage of utf8mb3 charset
  Warning: The following objects use the utf8mb3 character set. It is recommended to convert them to use 
  utf8mb4 instead, for improved Unicode support.
  More information: https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html 
 
  dbtest.view1.col1 - column's default character set: utf8 

4) Table names in the mysql schema conflicting with new tables in 8.0
  No issues found

5) Partitioned tables using engines with non native partitioning
  Error: In MySQL 8.0 storage engine is responsible for providing its own
  partitioning handler, and the MySQL server no longer provides generic
  partitioning support. InnoDB and NDB are the only storage engines that
  provide a native partitioning handler that is supported in MySQL 8.0. A
  partitioned table using any other storage engine must be altered—either to
  convert it to InnoDB or NDB, or to remove its partitioning—before upgrading
  the server, else it cannot be used afterwards.
  More information:
    https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-configuration-changes

  dbtest.part1_hash - MyISAM engine does not support native partitioning

6) Foreign key constraint names longer than 64 characters
  No issues found

7) Usage of obsolete MAXDB sql_mode flag
  No issues found

8) Usage of obsolete sql_mode flags
  No issues found

9) ENUM/SET column definitions containing elements longer than 255 characters 
  No issues found

10) Usage of partitioned tables in shared tablespaces
  Error: The following tables have partitions in shared tablespaces. Before upgrading to 8.0 they need 
  to be moved to file-per-table tablespace. You can do this by running query like 
  'ALTER TABLE table_name REORGANIZE PARTITION X INTO 
    (PARTITION X VALUES LESS THAN (30) TABLESPACE=innodb_file_per_table);'
  More information: https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals

  dbtest.table1 - Partition p0 is in shared tablespace tbsp4
  dbtest.table1 - Partition p1 is in shared tablespace tbsp4 

11) Circular directory references in tablespace data file paths
  No issues found

12) Usage of removed functions
  Error: Following DB objects make use of functions that have been removed in
    version 8.0. Please make sure to update them to use supported alternatives
    before upgrade.
  More information:
    https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals

  dbtest.view1 - VIEW uses removed function PASSWORD

13) Usage of removed GROUP BY ASC/DESC syntax 
  Error: The following DB objects use removed GROUP BY ASC/DESC syntax. They need to be altered so that 
  ASC/DESC keyword is removed from GROUP BY clause and placed in appropriate ORDER BY clause.
  More information: https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-13.html#mysqld-8-0-13-sql-syntax 

  dbtest.view1 - VIEW uses removed GROUP BY DESC syntax
  dbtest.func1 - FUNCTION uses removed GROUP BY ASC syntax 

14) Removed system variables for error logging to the system log configuration
  No issues found

15) Removed system variables
  Error: Following system variables that were detected as being used will be
    removed. Please update your system to not rely on them before the upgrade.
  More information: https://dev.mysql.com/doc/refman/8.0/en/added-deprecated-removed.html#optvars-removed

  log_builtin_as_identified_by_password - is set and will be removed
  show_compatibility_56 - is set and will be removed

16) System variables with new default values
  Warning: Following system variables that are not defined in your
    configuration file will have new default values. Please review if you rely on
    their current values and if so define them before performing upgrade.
  More information: https://mysqlserverteam.com/new-defaults-in-mysql-8-0/

  back_log - default value will change
  character_set_server - default value will change from latin1 to utf8mb4
  collation_server - default value will change from latin1_swedish_ci to
    utf8mb4_0900_ai_ci
  event_scheduler - default value will change from OFF to ON
[...]

17) Zero Date, Datetime, and Timestamp values
  Warning: By default zero date/datetime/timestamp values are no longer allowed
    in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in
    SQL_MODE by default. These modes should be used with strict mode as they will
    be merged with strict mode in a future release. If you do not include these
    modes in your SQL_MODE setting, you are able to insert
    date/datetime/timestamp values that contain zeros. It is strongly advised to
    replace zero values with valid ones, as they may not work correctly in the
    future.
  More information:
    https://lefred.be/content/mysql-8-0-and-wrong-dates/

  global.sql_mode - does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE
    which allows insertion of zero dates
  session.sql_mode -  of 2 session(s) does not contain either NO_ZERO_DATE or
    NO_ZERO_IN_DATE which allows insertion of zero dates
  dbtest.date1.d - column has zero default value: 0000-00-00

18) Schema inconsistencies resulting from file removal or corruption
  No issues found

19) Tables recognized by InnoDB that belong to a different engine
  No issues found

20) Issues reported by 'check table x for upgrade' command
  No issues found

21) 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

Errors:   7
Warnings: 36
Notices:  0

7 errors were found. Please correct these issues before upgrading to avoid compatibility issues.
  • この例では、サーバーインスタンスで実行されたチェックで、チェックされたサーバーで見つかったアップグレードシナリオのエラーが返されたため、サーバーインスタンスをターゲットの MySQL 8.0 リリースにアップグレードする前に変更が必要です。

  • レポートのエラー数をクリアするために必要な変更を行った場合は、さらに変更を加えて警告を削除することも検討する必要があります。 これらの構成の改善により、サーバーインスタンスとターゲットリリースとの互換性が向上します。 ただし、サーバーインスタンスは、警告を削除せずに正常にアップグレードできます。

  • この例に示すように、アップグレードチェッカユーティリティでは、自動化できず、手動で行う必要がある、警告または通知 (情報) レベルのいずれかとして評価される、さらに関連性のあるチェックに関するアドバイスおよび指示も提供される場合があります。

アップグレードチェッカユーティリティの JSON 出力

outputFormat ディクショナリオプションを使用して JSON 出力を選択した場合、アップグレードチェッカユーティリティによって返される JSON オブジェクトには、次のキーと値のペアがあります:

serverAddress

チェックされた MySQL サーバーインスタンスへの MySQL Shell 接続のホスト名およびポート番号。

serverVersion

チェックされたサーバーインスタンスの MySQL バージョンが検出されました。

targetVersion

アップグレードチェックのターゲット MySQL バージョン。

errorCount

ユーティリティで検出されたエラーの数。

warningCount

ユーティリティで検出された警告の数。

noticeCount

ユーティリティによって検出された通知の数。

summary

テキスト出力の最後に提供されるサマリーステートメントのテキスト (「既知の互換性エラーまたは問題が見つかりませんでした。」など)。

checksPerformed

JSON オブジェクトの配列。自動的にチェックされた個々のアップグレードの問題 (削除された関数の使用など) ごとに 1 つずつ。 各 JSON オブジェクトには、次のキーと値のペアがあります:

id

一意の文字列であるチェックの ID。

title

チェックの短い説明。

status

チェックが正常に実行された場合は「OK」、それ以外の場合は「ERROR」。

description

アドバイスを組み込むチェック (使用可能な場合) の詳細な説明、またはチェックの実行に失敗した場合はエラーメッセージ。

documentationLink

使用可能な場合は、詳細情報またはアドバイスを含むドキュメントへのリンク。

detectedProblems

チェックの結果として見つかったエラー、警告または通知を表す JSON オブジェクトの配列 (空の可能性があります)。 各 JSON オブジェクトには、次のキーと値のペアがあります:

level

メッセージレベル。エラー、警告または通知のいずれか。

dbObject

メッセージが関連するデータベースオブジェクトを識別する文字列。

description

使用可能な場合は、データベースオブジェクトに関する問題の特定の説明を含む文字列。

manualChecks

JSON オブジェクトの配列で、アップグレードパスに関連し、手動でチェックする必要がある個々のアップグレードの問題 (たとえば、MySQL 8.0 でのデフォルトの認証プラグインの変更) ごとに使用されます。 各 JSON オブジェクトには、次のキーと値のペアがあります:

id

一意の文字列である手動チェックの ID。

title

手動チェックの簡単な説明。

description

手動チェックの詳細な説明と、情報およびアドバイス。

documentationLink

使用可能な場合は、詳細情報またはアドバイスを含むドキュメントへのリンク。