MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  mysql_upgrade — MySQL テーブルのチェックとアップグレード

4.4.5 mysql_upgrade — MySQL テーブルのチェックとアップグレード

注記

MySQL 8.0.16 では、MySQL サーバーは以前に mysql_upgrade によって処理されたアップグレードタスクを実行します (詳細は、セクション2.11.3「MySQL のアップグレードプロセスの内容」 を参照)。 したがって、mysql_upgrade は不要であり、そのバージョンで非推奨になりました。将来のバージョンの MySQL で削除される予定です。 mysql_upgrade はアップグレードタスクを実行しなくなったため、無条件にステータス 0 で終了します。

MySQL をアップグレードするたびに、mysql_upgrade を実行する必要があります。これにより、アップグレードした MySQL サーバーとの非互換性が検索されます:

  • 追加された可能性のある新しい権限または機能を利用できるように、mysql スキーマ内のシステムテーブルがアップグレードされます。

  • パフォーマンススキーマ、INFORMATION_SCHEMA、および sys スキーマがアップグレードされます。

  • ユーザースキーマを調べます。

mysql_upgrade は、テーブルに非互換性がある可能性が見つかった場合はテーブルのチェックを実行し、問題が検出された場合はテーブルの修復を試みます。 テーブルを修復できない場合は、手動でテーブルを修復する方法について、セクション2.11.13「テーブルまたはインデックスの再作成または修復」を参照してください。

mysql_upgrade は MySQL サーバーと直接通信し、アップグレードの実行に必要な SQL ステートメントを送信します。

注意

アップグレードを実行するに、必ず現在の MySQL インストールをバックアップするようにしてください。 セクション7.2「データベースバックアップ方法」を参照してください。

一部のアップグレードの非互換性では、MySQL インストールをアップグレードして mysql_upgrade を実行する前に特別な処理が必要になる場合があります。 このような非互換性が、使用しているインストールに該当するかどうかの判断、およびその対処方法については、セクション2.11「MySQL のアップグレード」を参照してください。

次のように mysql_upgrade を使用します:

  1. サーバーが実行されていることを確認します。

  2. mysql_upgrade を起動して、mysql スキーマのシステムテーブルをアップグレードし、他のスキーマのテーブルをチェックおよび修復します:

    shell> mysql_upgrade [options]
  3. システムテーブルの変更を有効にするには、サーバーを停止して再起動します。

アップグレードする MySQL サーバーインスタンスが複数ある場合は、目的の各サーバーへの接続に適した接続パラメータを使用して mysql_upgrade を起動します。 たとえば、ローカルホストで 3306 から 3308 までのポートでサーバーが稼働している場合、適切なポートに接続してそれぞれをアップグレードします。

shell> mysql_upgrade --protocol=tcp -P 3306 [other_options]
shell> mysql_upgrade --protocol=tcp -P 3307 [other_options]
shell> mysql_upgrade --protocol=tcp -P 3308 [other_options]

Unix でのローカルホスト接続では、--protocol=tcp オプションを使用すると、Unix ソケットファイルではなく TCP/IP を強制的に使用して接続が行われます。

デフォルトでは、mysql_upgrade は MySQL root ユーザーとして実行されます。 mysql_upgrade の実行時に root パスワードの有効期限が切れた場合は、パスワードの有効期限が切れ、mysql_upgrade が失敗したことを示すメッセージが表示されます。 これを修正するには、root パスワードをリセットして有効期限を解除し、mysql_upgrade を再度実行します。 まず、root としてサーバーに接続します:

shell> mysql -u root -p
Enter password: ****  <- enter root password here

ALTER USER を使用してパスワードをリセットします:

mysql> ALTER USER USER() IDENTIFIED BY 'root-password';

次に、mysql を終了し、mysql_upgrade を再度実行します:

shell> mysql_upgrade [options]
注記

特定のストレージエンジン (MyISAM など) を無効にするように disabled_storage_engines システム変数を設定してサーバーを実行すると、mysql_upgrade が次のようなエラーで失敗することがあります:

mysql_upgrade: [ERROR] 3161: Storage engine MyISAM is disabled
(Table creation is disallowed).

これを処理するには、disabled_storage_engines を無効にしてサーバーを再起動します。 これで、mysql_upgrade を正常に実行できるようになります。 その後、disabled_storage_engines を元の値に設定してサーバーを再起動します。

--upgrade-system-tables オプションを指定して起動しないかぎり、mysql_upgrade は必要に応じてすべてのユーザースキーマのすべてのテーブルを処理します。 テーブルチェックの完了には時間がかかる場合があります。 各テーブルはロックされるため、処理中にほかのセッションで使用することはできません。 チェックと修復の処理には時間がかかることがあり、特に大きなテーブルでは長い時間を要する可能性があります。 テーブルチェックでは、CHECK TABLE ステートメントの FOR UPGRADE オプションを使用します。 このオプションに必要な内容の詳細は、セクション13.7.3.2「CHECK TABLE ステートメント」 を参照してください。

mysql_upgrade は、チェックおよび修復されたすべてのテーブルを現在の MySQL バージョン番号でマークします。 これにより、次回同じバージョンのサーバーで mysql_upgrade を実行するときに、特定のテーブルを再度チェックまたは修復する必要があるかどうかを判断できます。

mysql_upgrade は、MySQL のバージョン番号をデータディレクトリ内の mysql_upgrade_info という名前のファイルに保存します。 これは、テーブルのチェックをスキップできるように、すべてのテーブルがこのリリースに関してチェック済みかどうかを迅速にチェックするために使用されます。 このファイルを無視してとにかくチェックを実行するには、--force オプションを使用します。

注記

mysql_upgrade_info ファイルは非推奨です。将来のバージョンの MySQL で削除される予定です。

mysql_upgrademysql.user システムテーブルの行をチェックし、plugin カラムが空の行について、資格証明がそのプラグインと互換性のあるハッシュ形式を使用している場合は、そのカラムを'mysql_native_password'に設定します。 4.1 より前のパスワードハッシュを持つ行は、手動でアップグレードする必要があります。

mysql_upgrade では、タイムゾーンテーブルまたはヘルプテーブルの内容はアップグレードされません。 アップグレード手順については、セクション5.1.15「MySQL Server でのタイムゾーンのサポート」 および セクション5.1.17「サーバー側ヘルプのサポート」 を参照してください。

--skip-sys-schema オプションで呼び出されないかぎり、mysql_upgradesys スキーマがインストールされていない場合はインストールし、それ以外の場合は現在のバージョンにアップグレードします。 sys スキーマは存在するが version ビューがない場合、その存在しないという前提で、ユーザーが作成したスキーマがあるとエラーが発生します:

A sys schema exists with no sys.version view. If
you have a user created sys schema, this must be renamed for the
upgrade to succeed.

この場合にアップグレードするには、まず既存の sys スキーマを削除するか、名前を変更します。

mysql_upgrade は次のオプションをサポートします。これらはコマンド行またはオプションファイルの [mysql_upgrade] グループおよび [client] グループで指定できます。 MySQL プログラムによって使用されるオプションファイルの詳細については、セクション4.2.2.2「オプションファイルの使用」を参照してください。

表 4.10 「mysql_upgrade オプション」

オプション名 説明 導入 非推奨
--bind-address 指定されたネットワークインタフェースを使用して MySQL サーバーに接続
--character-sets-dir 文字セットがインストールされているディレクトリ
--compress クライアントとサーバー間で送信される情報をすべて圧縮 8.0.18
--compression-algorithms サーバーへの接続に許可される圧縮アルゴリズム 8.0.18
--debug デバッグログの書込み
--debug-check プログラムの終了時にデバッグ情報を出力
--debug-info プログラムの終了時に、デバッグ情報、メモリー、および CPU の統計を出力
--default-auth 使用する認証プラグイン
--default-character-set デフォルト文字セットを指定
--defaults-extra-file 通常のオプションファイルに加えて、名前付きオプションファイルを読み取ります
--defaults-file 指名されたオプションファイルのみを読み取る
--defaults-group-suffix オプショングループのサフィクス値
--force mysql_upgrade が現在の MySQL バージョンに対してすでに実行されている場合でも実行を強制
--get-server-public-key サーバーから RSA 公開キーをリクエスト
--help ヘルプメッセージを表示して終了
--host MySQL サーバーがあるホスト
--login-path ログインパスオプションを .mylogin.cnf から読み取り
--max-allowed-packet サーバーとの間で送受信するパケットの最大長
--net-buffer-length TCP/IP とソケット通信のバッファーサイズ
--no-defaults オプションファイルを読み取らない
--password サーバーに接続する際に使用するパスワード
--pipe 名前付きパイプを使用してサーバに接続する (Windows のみ)
--plugin-dir プラグインがインストールされているディレクトリ
--port 接続用の TCP/IP ポート番号
--print-defaults デフォルトオプションの印刷
--protocol 使用するトランスポートプロトコル
--server-public-key-path RSA 公開鍵を含むファイルへのパス名
--shared-memory-base-name 共有メモリー接続用の共有メモリー名 (Windows のみ)
--skip-sys-schema sys スキーマをインストールまたはアップグレードしない
--socket 使用する Unix ソケットファイルまたは Windows 名前付きパイプ
--ssl-ca 信頼できる SSL 認証局のリストを含むファイル
--ssl-capath 信頼できる SSL 認証局の証明書ファイルを含むディレクトリ
--ssl-cert X.509 証明書を含むファイル
--ssl-cipher 接続の暗号化に許可される暗号
--ssl-crl 証明書失効リストを含むファイル
--ssl-crlpath 証明書失効リストファイルを含むディレクトリ
--ssl-fips-mode クライアント側で FIPS モードを有効にするかどうか
--ssl-key X.509 キーを含むファイル
--ssl-mode サーバーへの接続に必要なセキュリティ状態
--tls-ciphersuites 暗号化された接続に許可される TLSv1.3 暗号スイート 8.0.16
--tls-version 暗号化された接続に許可される TLS プロトコル
--upgrade-system-tables システムテーブルのみを更新し、ユーザースキーマは更新しない
--user サーバーへの接続時に使用する MySQL ユーザー名
--verbose 冗長モード
--version-check 適切なサーバーバージョンをチェック
--write-binlog すべてのステートメントをバイナリログに書き込み
--zstd-compression-level zstd 圧縮を使用するサーバーへの接続の圧縮レベル 8.0.18

  • --help

    短いヘルプメッセージを表示して終了します。

  • --bind-address=ip_address

    複数のネットワークインタフェースを持つコンピュータで、このオプションを使用して、MySQL サーバーへの接続に使用するインタフェースを選択します。

  • --character-sets-dir=dir_name

    文字セットがインストールされているディレクトリ。 セクション10.15「文字セットの構成」を参照してください。

  • --compress, -C

    可能であれば、クライアントとサーバーの間で送信されるすべての情報を圧縮します。 セクション4.2.8「接続圧縮制御」を参照してください。

    MySQL 8.0.18 では、このオプションは非推奨です。 MySQL の将来のバージョンで削除されることが予想されます。 レガシー接続圧縮の構成を参照してください。

  • --compression-algorithms=value

    サーバーへの接続に許可される圧縮アルゴリズム。 使用可能なアルゴリズムは、protocol_compression_algorithms システム変数の場合と同じです。 デフォルト値は uncompressed です。

    詳細は、セクション4.2.8「接続圧縮制御」を参照してください。

    このオプションは MySQL 8.0.18 で追加されました。

  • --debug[=debug_options], -# [debug_options]

    デバッグのログを書き込みます。 一般的な debug_options 文字列は d:t:o,file_name です。 デフォルトは d:t:O,/tmp/mysql_upgrade.trace です。

  • --debug-check

    プログラムの終了時に、デバッグ情報を出力します。

  • --debug-info, -T

    プログラムの終了時に、デバッグ情報とメモリーおよび CPU 使用率の統計を出力します。

  • --default-auth=plugin

    使用するクライアント側認証プラグインに関するヒント。 セクション6.2.17「プラガブル認証」を参照してください。

  • --default-character-set=charset_name

    charset_name をデフォルト文字セットとして使用します。 セクション10.15「文字セットの構成」を参照してください。

  • --defaults-extra-file=file_name

    このオプションファイルは、グローバルオプションファイルのあとに読み取りますが、(UNIX では) ユーザーオプションファイルの前に読み取るようにしてください。 ファイルが存在しないかアクセスできない場合、エラーが発生します。file_name は、フルパス名でなく相対パス名として指定された場合、現行ディレクトリを基準にして解釈されます。

    このオプションおよびその他のオプションファイルオプションの詳細は、セクション4.2.2.3「オプションファイルの処理に影響するコマンド行オプション」 を参照してください。

  • --defaults-file=file_name

    指定されたオプションファイルのみ使用します。 ファイルが存在しないかアクセスできない場合、エラーが発生します。file_name は、フルパス名でなく相対パス名として指定された場合、現行ディレクトリを基準にして解釈されます。

    このオプションおよびその他のオプションファイルオプションの詳細は、セクション4.2.2.3「オプションファイルの処理に影響するコマンド行オプション」 を参照してください。

  • --defaults-group-suffix=str

    通常のオプショングループだけでなく、通常の名前に str のサフィクスが付いたグループも読み取ります。 たとえば、mysql_upgrade は通常 [client] グループおよび [mysql_upgrade] グループを読み取ります。 --defaults-group-suffix=_other オプションを指定した場合、mysql_upgrade[client_other] グループおよび [mysql_upgrade_other] グループも読み取ります。

    このオプションおよびその他のオプションファイルオプションの詳細は、セクション4.2.2.3「オプションファイルの処理に影響するコマンド行オプション」 を参照してください。

  • --force

    mysql_upgrade_info ファイルを無視し、MySQL の現在のバージョンに対して mysql_upgrade を実行済みでも強制的に実行します。

  • --get-server-public-key

    RSA キーペアベースのパスワード交換に必要な公開キーをサーバーにリクエストします。 このオプションは、caching_sha2_password 認証プラグインで認証されるクライアントに適用されます。 そのプラグインの場合、サーバーは要求されないかぎり公開鍵を送信しません。 このオプションは、そのプラグインで認証されないアカウントでは無視されます。 クライアントがセキュアな接続を使用してサーバーに接続する場合と同様に、RSA ベースのパスワード交換を使用しない場合も無視されます。

    --server-public-key-path=file_name が指定され、有効な公開キーファイルが指定されている場合は、--get-server-public-key よりも優先されます。

    caching_sha2_password プラグインの詳細は、セクション6.4.1.2「SHA-2 プラガブル認証のキャッシュ」 を参照してください。

  • --host=host_name, -h host_name

    指定されたホストの MySQL サーバーに接続します。

  • --login-path=name

    .mylogin.cnf ログインパスファイルの指定されたログインパスからオプションを読み取ります。 「ログインパス」は、接続先の MySQL サーバーおよび認証に使用するアカウントを指定するオプションを含むオプショングループです。 ログインパスファイルを作成または変更するには、mysql_config_editor ユーティリティを使用します。 セクション4.6.7「mysql_config_editor — MySQL 構成ユーティリティー」を参照してください。

    このオプションおよびその他のオプションファイルオプションの詳細は、セクション4.2.2.3「オプションファイルの処理に影響するコマンド行オプション」 を参照してください。

  • --max-allowed-packet=value

    クライアント/サーバー通信用のバッファーの最大サイズ。 デフォルトの値は 24M バイトです。 最小値と最大値は 4KB と 2GB です。

  • --net-buffer-length=value

    クライアント/サーバー通信用のバッファーの初期サイズ。 デフォルト値は 1MB − 1KB です。 最小値と最大値は 4KB と 16MB です。

  • --no-defaults

    オプションファイルを読み取りません。 オプションファイルから不明のオプションを読み取ることが原因でプログラムの起動に失敗する場合、--no-defaults を使用して、オプションを読み取らないようにすることができます。

    例外として、.mylogin.cnf ファイルは、存在する場合はすべての場合に読み取られます。 これにより、 --no-defaults が使用されたとしても、コマンド行よりも安全な方法でパスワードを指定できます。(.mylogin.cnfmysql_config_editor ユーティリティーによって作成されます。 セクション4.6.7「mysql_config_editor — MySQL 構成ユーティリティー」を参照してください)。

    このオプションおよびその他のオプションファイルオプションの詳細は、セクション4.2.2.3「オプションファイルの処理に影響するコマンド行オプション」 を参照してください。

  • --password[=password], -p[password]

    サーバーへの接続に使用される MySQL アカウントのパスワード。 パスワード値はオプションです。 指定しない場合、mysql_upgrade によってプロンプトが表示されます。 指定する場合は、--password= または -p とそれに続くパスワードの間にスペースなしが存在する必要があります。 パスワードオプションを指定しない場合、デフォルトではパスワードは送信されません。

    コマンド行でのパスワード指定は、セキュアでないと考えるべきです。 コマンド行でパスワードを指定しないようにするには、オプションファイルを使用します。 セクション6.1.2.1「パスワードセキュリティーのためのエンドユーザーガイドライン」を参照してください。

    パスワードがなく、mysql_upgrade でパスワードの入力を求められないように明示的に指定するには、--skip-password オプションを使用します。

  • --pipe, -W

    Windows で、名前付きパイプを使用してサーバーに接続します。 このオプションは、ネームパイプ接続をサポートするために named_pipe システム変数を有効にしてサーバーを起動した場合にのみ適用されます。 また、接続を行うユーザーは、named_pipe_full_access_group システム変数で指定された Windows グループのメンバーである必要があります。

  • --plugin-dir=dir_name

    プラグインを検索するディレクトリ。 このオプションは、--default-auth オプションを使用して認証プラグインを指定しても、mysql_upgrade がそれを検出しない場合に指定します。 セクション6.2.17「プラガブル認証」を参照してください。

  • --port=port_num, -P port_num

    TCP/IP 接続の場合、使用するポート番号。

  • --print-defaults

    プログラム名と、オプションファイルから受け取るすべてのオプションを出力します。

  • --protocol={TCP|SOCKET|PIPE|MEMORY}

    サーバーへの接続に使用するトランスポートプロトコル。 これは、他の接続パラメータが通常、必要なプロトコル以外のプロトコルを使用する場合に便利です。 許可される値の詳細は、セクション4.2.7「接続トランスポートプロトコル」を参照してください。

  • --server-public-key-path=file_name

    RSA キーペアベースのパスワード交換のためにサーバーが必要とする公開キーのクライアント側コピーを含む、PEM 形式のファイルへのパス名。 このオプションは、sha256_password または caching_sha2_password 認証プラグインで認証されるクライアントに適用されます。 これらのプラグインのいずれかで認証されないアカウントでは、このオプションは無視されます。 クライアントがセキュアな接続を使用してサーバーに接続する場合と同様に、RSA ベースのパスワード交換を使用しない場合も無視されます。

    --server-public-key-path=file_name が指定され、有効な公開キーファイルが指定されている場合は、--get-server-public-key よりも優先されます。

    sha256_password の場合、このオプションは、MySQL が OpenSSL を使用して構築された場合にのみ適用されます。

    sha256_password および caching_sha2_password プラグインの詳細は、セクション6.4.1.3「SHA-256 プラガブル認証」 および セクション6.4.1.2「SHA-2 プラガブル認証のキャッシュ」 を参照してください。

  • --shared-memory-base-name=name

    Windows の場合、共有メモリを使用してローカルサーバに接続するために使用する共有メモリ名。 デフォルト値は MYSQL です。 共有メモリー名では大文字と小文字が区別されます。

    このオプションは、共有メモリー接続をサポートするために shared_memory システム変数を有効にしてサーバーを起動した場合にのみ適用されます。

  • --skip-sys-schema

    デフォルトでは、sys スキーマがインストールされていない場合は mysql_upgrade によってインストールされ、それ以外の場合は現在のバージョンにアップグレードされます。 --skip-sys-schema オプションは、この動作を抑止します。

  • --socket=path, -S path

    localhost への接続用に使用する、Unix ソケットファイル、または Windows では使用する名前付きパイプの名前。

    Windows では、このオプションは、名前付きパイプ接続をサポートするために named_pipe システム変数を有効にしてサーバーを起動した場合にのみ適用されます。 また、接続を行うユーザーは、named_pipe_full_access_group システム変数で指定された Windows グループのメンバーである必要があります。

  • --ssl*

    --ssl で始まるオプションは、SSL を使用してサーバーに接続するかどうかを指定し、SSL 鍵および証明書を検索する場所を指定します。 暗号化接続のコマンドオプションを参照してください。

  • --ssl-fips-mode={OFF|ON|STRICT}

    クライアント側で FIPS モードを有効にするかどうかを制御します。 --ssl-fips-mode オプションは、暗号化された接続の確立には使用されず、許可する暗号化操作に影響する点で、他の --ssl-xxx オプションとは異なります。 セクション6.8「FIPS のサポート」を参照してください。

    次の --ssl-fips-mode 値を使用できます:

    • OFF: FIPS モードを無効にします。

    • ON: FIPS モードを有効にします。

    • STRICT: strict FIPS モードを有効にします。

    注記

    OpenSSL FIPS オブジェクトモジュールが使用できない場合、--ssl-fips-mode に許可される値は OFF のみです。 この場合、--ssl-fips-modeON または STRICT に設定すると、クライアントは起動時に警告を生成し、FIPS 以外のモードで動作します。

  • --tls-ciphersuites=ciphersuite_list

    TLSv1.3 を使用する暗号化された接続に許可される暗号スイート。 値は、コロンで区切られた 1 つ以上の暗号スイート名のリストです。 このオプションに指定できる暗号スイートは、MySQL のコンパイルに使用される SSL ライブラリによって異なります。 詳細は、セクション6.3.2「暗号化された接続 TLS プロトコルおよび暗号」を参照してください。

    このオプションは MySQL 8.0.16 で追加されました。

  • --tls-version=protocol_list

    暗号化された接続に許可される TLS プロトコル。 値は、1 つまたは複数のコンマ区切りプロトコル名のリストです。 このオプションに指定できるプロトコルは、MySQL のコンパイルに使用される SSL ライブラリによって異なります。 詳細は、セクション6.3.2「暗号化された接続 TLS プロトコルおよび暗号」を参照してください。

  • --upgrade-system-tables, -s

    mysql スキーマのシステムテーブルのみをアップグレードし、ユーザースキーマはアップグレードしません。

  • --user=user_name, -u user_name

    サーバーへの接続に使用する MySQL アカウントのユーザー名。 デフォルトのユーザー名は root です。

  • --verbose

    冗長モード。 プログラムの動作についてより多くの情報を出力します。

  • --version-check, -k

    mysql_upgrade の接続先のサーバーのバージョンをチェックして、mysql_upgrade がビルドされたバージョンと同じであることを確認します。 そうでない場合は mysql_upgrade は終了します。 このオプションはデフォルトで有効にされています。--skip-version-check を使用して無効化してください。

  • --write-binlog

    デフォルトでは、mysql_upgrade によるバイナリロギングは無効になっています。 アクションをバイナリログに書き込む場合は、--write-binlog を使用してプログラムを起動します。

    グローバルトランザクション識別子 (GTID) を有効にして (gtid_mode=ON) サーバーを実行している場合は、mysql_upgrade によるバイナリロギングを有効にしないでください。

  • --zstd-compression-level=level

    zstd 圧縮アルゴリズムを使用するサーバーへの接続に使用する圧縮レベル。 許可されるレベルは 1 から 22 で、大きい値は圧縮レベルの増加を示します。 デフォルトの zstd 圧縮レベルは 3 です。 圧縮レベルの設定は、zstd 圧縮を使用しない接続には影響しません。

    詳細は、セクション4.2.8「接続圧縮制御」を参照してください。

    このオプションは MySQL 8.0.18 で追加されました。


関連キーワード:  サーバー, 接続, テーブル, セクション, 参照, プログラム, 実行, パスワード, 圧縮, チェック