MySQL 8.0 リファレンスマニュアル MySQL NDB Cluster 8.0 を含む

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

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_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