mysql_upgrade はすべてのデータベースのすべてのテーブルに対して、MySQL サーバーの現在のバージョンとの非互換性を調べます。また、mysql_upgrade は、システムテーブルをアップグレードして、追加された可能性のある新しい権限または機能を利用できるようにします。
mysql_upgrade は、テーブルに非互換性がある可能性が見つかった場合はテーブルのチェックを実行し、問題が検出された場合はテーブルの修復を試みます。テーブルを修復できない場合は、手動でテーブルを修復する方法について、セクション2.11.4「テーブルまたはインデックスの再作成または修復」を参照してください。
mysql_upgrade は、MySQL をアップグレードするたびに実行するようにしてください。
Linux で、MySQL を RPM パッケージからインストールする場合は、サーバーとクライアントの RPM をインストールする必要があります。mysql_upgrade はサーバー RPM に含まれていますが、クライアント RPM に mysqlcheck が含まれるため、クライアント RPM が必要です。(セクション2.5.5「RPM パッケージを使用して MySQL を Linux にインストールする」を参照してください。)
Windows Server 2008、Vista、およびそれ以降では、mysql_upgrade を管理者権限で実行する必要があります。そのためには、コマンドプロンプトを管理者として実行してそのコマンドを実行します。そうしないと、アップグレードが正しく実行されない場合があります。
アップグレードを実行する前に、必ず現在の MySQL インストールをバックアップするようにしてください。セクション7.2「データベースバックアップ方法」を参照してください。
一部のアップグレードの非互換性により、MySQL インストールをアップグレードして mysql_upgrade を実行する前に特殊な処理が必要な場合があります。このような非互換性が、使用しているインストールに該当するかどうかの判断、およびその対処方法については、セクション2.11.1「MySQL のアップグレード」を参照してください。
mysql_upgrade を使用するには、サーバーが稼働していることを確認してください。そのあと、次のように呼び出します。
shell> mysql_upgrade [options]
mysql_upgrade の実行後、システムテーブルに行われた変更が有効になるように、サーバーを停止して再起動します。
複数の 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 は次のコマンドを実行して、テーブルのチェックと修復およびシステムテーブルのアップグレードを実行します。
mysqlcheck --no-defaults --databases
--fix-db-names --fix-table-names mysql
mysqlcheck --no-defaults --check-upgrade --databases
--auto-repair mysql
mysql < fix_priv_tables
mysqlcheck --no-defaults --all-databases
--skip-database=mysql --fix-db-names --fix-table-names
mysqlcheck --no-defaults --check-upgrade --all-databases
--skip-database=mysql --auto-repair
前述のコマンドに関する注意:
mysql_upgrade はまた、mysql_upgrade コマンドに
--write-binlog
オプションが指定されたかどうかに応じて、--write-binlog
または--skip-write-binlog
を mysqlcheck コマンドに追加します。mysql_upgrade は mysqlcheck を
--all-databases
オプションで呼び出すため、すべてのデータベースのすべてのテーブルが処理され、完了するのに長時間かかる場合があります。各テーブルはロックされるため、処理中にほかのセッションで使用することはできません。チェックと修復の処理には時間がかかることがあり、特に大きなテーブルでは長い時間を要する可能性があります。--check-upgrade
オプションで実行されるチェックの詳細は、CHECK TABLE
ステートメントのFOR UPGRADE
オプションの説明を参照してください (セクション13.7.2.2「CHECK TABLE 構文」を参照してください)。fix_priv_tables
は、mysql_upgrade により内部的に生成され、mysql
データベース内のテーブルをアップグレードするための SQL ステートメントを含むスクリプトを示します。
チェックおよび修復が行われたすべてのテーブルは、現在の MySQL バージョン番号でマークされます。これにより、次に同じバージョンのサーバーで mysql_upgrade を立ち上げるときに、そのテーブルを再度チェックして修正する必要があるかどうかが確実にわかります。
mysql_upgrade はまた、MySQL バージョン番号をデータディレクトリの mysql_upgrade_info
という名前のファイルに保存します。これは、テーブルのチェックをスキップできるように、すべてのテーブルがこのリリースに関してチェック済みかどうかを迅速にチェックするために使用されます。このファイルを無視してとにかくチェックを実行するには、--force
オプションを使用します。
mysql_upgrade では、ヘルプテーブルの内容はアップグレードされません。アップグレードの手順については、セクション5.1.10「サーバー側のヘルプ」を参照してください。
デフォルトでは、mysql_upgrade は MySQL root
ユーザーとして実行されます。mysql_upgrade の実行時に root
のパスワードが期限切れの場合、パスワードが期限切れであり、その結果 mysql_upgrade が失敗したというメッセージが表示されます。これを修正するには、root
のパスワードを期限が切れていないものにリセットして、mysql_upgrade をふたたび実行します。
shell> mysql -u root -p
Enter password: **** <- enter root password here
mysql> SET PASSWORD = PASSWORD('root-password');
mysql> quit
shell> mysql_upgrade [options]
mysql_upgrade は次のオプションをサポートします。これらはコマンド行またはオプションファイルの [mysql_upgrade]
グループおよび [client]
グループで指定できます。その他のオプションは mysqlcheck に渡されます。オプションファイルの詳細は、セクション4.2.6「オプションファイルの使用」を参照してください。
表 4.4 mysql_upgrade オプション
オプション名 | 説明 | 導入 |
---|---|---|
--basedir | 使用しない | |
--character-sets-dir | 文字セットがインストールされているディレクトリ | |
--compress | クライアントとサーバー間で送信される情報をすべて圧縮 | |
--datadir | 使用しない | |
--debug | デバッグのログを書き込み | |
--debug-check | プログラムの終了時にデバッグ情報を出力 | |
--debug-info | プログラムの終了時に、デバッグ情報、メモリー、および CPU の統計を出力 | |
--default-auth | 使用する認証プラグイン | 5.6.2 |
--default-character-set | デフォルト文字セットを指定 | |
--defaults-extra-file | 通常のオプションファイルに加えてオプションファイルを読み取る | |
--defaults-file | 指名されたオプションファイルのみを読み取る | |
--defaults-group-suffix | オプショングループのサフィクス値 | |
--force | MySQL の現在のバージョンに対して mysql_upgrade を実行済みでも強制的に実行 | |
--help | ヘルプメッセージを表示して終了 | |
--host | 指定されたホスト上で MySQL サーバーに接続 | |
--login-path | ログインパスオプションを .mylogin.cnf から読み取り | 5.6.6 |
--no-defaults | オプションファイルを読み取らない | |
--password | サーバーに接続する際に使用するパスワード | |
--pipe | Windows で、名前付きパイプを使用してサーバーに接続 | |
--plugin-dir | プラグインがインストールされているディレクトリ | 5.6.2 |
--port | 接続に使用する TCP/IP ポート番号 | |
--print-defaults | デフォルトを出力 | |
--protocol | 使用する接続プロトコル | |
--shared-memory-base-name | 共有メモリー接続に使用する共有メモリーの名前 | |
--socket | ローカルホストへの接続で、使用する Unix ソケットファイル | |
--ssl | 接続に SSL を有効化 | |
--ssl-ca | 信頼された SSL CA のリストを含むファイルのパス | |
--ssl-capath | 信頼された SSL CA の PEM 形式の証明書を含むディレクトリのパス | |
--ssl-cert | PEM 形式の X509 証明書を含むファイルのパス | |
--ssl-cipher | SSL の暗号化に使用される、許可された暗号のリスト | |
--ssl-crl | 証明書失効リストを含むファイルのパス | 5.6.3 |
--ssl-crlpath | 証明書失効リストファイルを含むディレクトリのパス | 5.6.3 |
--ssl-key | PEM 形式の X509 鍵を含むファイルのパス | |
--ssl-verify-server-cert | サーバーへの接続時に、サーバーの証明書内のコモンネーム値をホスト名に対して検証 | |
--tmpdir | 一時ファイルのディレクトリ | |
--upgrade-system-tables | システムテーブルのみを更新し、データは更新しない | |
--user | サーバーへの接続時に使用する MySQL ユーザー名 | |
--verbose | 冗長モード | |
--version-check | 適切なサーバーバージョンをチェック | 5.6.12 |
--write-binlog | すべてのステートメントをバイナリログに書き込み |
-
短いヘルプメッセージを表示して終了します。
-
MySQL インストールディレクトリへのパス。このオプションは、後方互換性のため受け付けられますが無視されます。MySQL 5.7 では削除されました。
-
文字セットがインストールされているディレクトリ。セクション10.5「文字セットの構成」を参照してください。
-
クライアントとサーバーの両方が圧縮をサポートしている場合、その間で送受信される情報をすべて圧縮します。
-
データディレクトリへのパス。このオプションは、後方互換性のため受け付けられますが無視されます。MySQL 5.7 では削除されました。
-
--debug[=
,debug_options
]-# [
debug_options
]デバッグのログを書き込みます。一般的な
debug_options
文字列はd:t:o,
です。デフォルトはfile_name
d:t:O,/tmp/mysql_upgrade.trace
です。 -
プログラムの終了時に、デバッグ情報を出力します。
-
プログラムの終了時に、デバッグ情報とメモリーおよび CPU 使用率の統計を出力します。
-
使用するクライアント側の認証プラグイン。セクション6.3.7「プラガブル認証」を参照してください。
このオプションは MySQL 5.6.2 で追加されました。
-
--default-character-set=
charset_name
charset_name
をデフォルト文字セットとして使用します。セクション10.5「文字セットの構成」を参照してください。 -
--defaults-extra-file=
file_name
このオプションファイルは、グローバルオプションファイルのあとに読み取りますが、(UNIX では) ユーザーオプションファイルの前に読み取るようにしてください。ファイルが存在しないかアクセスできない場合、エラーが発生します。
file_name
は、フルパス名でなく相対パス名として指定された場合、現行ディレクトリを基準にして解釈されます。 -
指定されたオプションファイルのみ使用します。ファイルが存在しないかアクセスできない場合、エラーが発生します。
file_name
は、フルパス名でなく相対パス名として指定された場合、現行ディレクトリを基準にして解釈されます。 -
通常のオプショングループだけでなく、通常の名前に
str
のサフィクスが付いたグループも読み取ります。たとえば、mysql_upgrade は通常[client]
グループおよび[mysql_upgrade]
グループを読み取ります。--defaults-group-suffix=_other
オプションを指定した場合、mysql_upgrade は[client_other]
グループおよび[mysql_upgrade_other]
グループも読み取ります。 -
mysql_upgrade_info
ファイルを無視し、MySQL の現在のバージョンに対して mysql_upgrade を実行済みでも強制的に実行します。 -
--host=
,host_name
-h
host_name
指定されたホストの MySQL サーバーに接続します。
-
指名されたログインパスから
.mylogin.cnf
ログインファイルのオプションを読み取ります。「ログインパス」は、host
、user
、およびpassword
という限定されたオプションのセットのみを許可するオプショングループです。ログインパスは、サーバーホストおよびそのサーバーで認証するための認証情報を示す値のセットであると考えてください。ログインパスファイルを作成するには、mysql_config_editor ユーティリティーを使用します。セクション4.6.6「mysql_config_editor — MySQL 構成ユーティリティー」を参照してください。このオプションは MySQL 5.6.6 で追加されました。 -
オプションファイルを読み取りません。オプションファイルから不明のオプションを読み取ることが原因でプログラムの起動に失敗する場合、
--no-defaults
を使用して、オプションを読み取らないようにすることができます。例外として、
.mylogin.cnf
ファイルは、存在する場合はすべての場合に読み取られます。これにより、--no-defaults
が使用されたとしても、コマンド行よりも安全な方法でパスワードを指定できます。(.mylogin.cnf
は mysql_config_editor ユーティリティーによって作成されます。セクション4.6.6「mysql_config_editor — MySQL 構成ユーティリティー」を参照してください)。 -
--password[=
,password
]-p[
password
]サーバーに接続する際に使用するパスワードです。短いオプション形式 (
-p
) を使用した場合は、オプションとパスワードの間にスペースを置くことはできません。コマンド行で、--password
オプションまたは-p
オプションに続けてpassword
の値を指定しなかった場合、mysql_upgrade はそれを要求します。コマンド行でのパスワード指定は、セキュアでないと考えるべきです。セクション6.1.2.1「パスワードセキュリティーのためのエンドユーザーガイドライン」を参照してください。オプションファイルを使用すれば、コマンド行でパスワードを指定することを回避できます。
-
Windows で、名前付きパイプを使用してサーバーに接続します。このオプションは、サーバーが名前付きパイプ接続をサポートしている場合にのみ適用されます。
-
プラグインを検索するディレクトリ。
--default-auth
オプションを使用して認証プラグインを指定したが、mysql_upgrade がそれを検出できない場合は、このオプションを指定しなければならない可能性があります。セクション6.3.7「プラガブル認証」を参照してください。このオプションは MySQL 5.6.2 で追加されました。
-
接続に使用する TCP/IP ポート番号。
-
プログラム名と、オプションファイルから受け取るすべてのオプションを出力します。
-
--protocol={TCP|SOCKET|PIPE|MEMORY}
サーバーへの接続に使用する接続プロトコル。このオプションは、ほかの接続パラメータによって、必要なプロトコル以外のものが通常使用される場合に役立ちます。許可される値の詳細は、セクション4.2.2「MySQL サーバーへの接続」を参照してください。
-
--shared-memory-base-name=
name
Windows で、共有メモリーを使用して作成されるローカルサーバーへの接続の共有メモリー名。デフォルト値は
MYSQL
です。共有メモリー名では大文字と小文字を区別します。共有メモリー接続を可能にするには、サーバーは
--shared-memory
オプションで起動する必要があります。 -
localhost
への接続用に使用する、Unix ソケットファイル、または Windows では使用する名前付きパイプの名前。 -
--ssl
で始まるオプションは、SSL を使用してサーバーに接続することを許可するかどうかを指定し、SSL 鍵および証明書を検索する場所を指定します。セクション6.3.10.4「SSL コマンドのオプション」を参照してください。 -
一時ファイルを作成するために使用するディレクトリのパス名。
-
システムテーブルのみをアップグレードし、データはアップグレードしません。
-
--user=
,user_name
-u
user_name
サーバーへの接続時に使用する MySQL ユーザー名。デフォルトのユーザー名は
root
です。 -
冗長モード。プログラムの動作についてより多くの情報を出力します。
-
mysql_upgrade の接続先のサーバーのバージョンをチェックして、mysql_upgrade がビルドされたバージョンと同じであることを確認します。そうでない場合は mysql_upgrade は終了します。このオプションはデフォルトで有効にされています。
--skip-version-check
を使用して無効化してください。このオプションは MySQL 5.6.12 で追加されました。 -
mysql_upgrade の実行中にバイナリロギングを有効にします。MySQL 5.6.6 以前では、これはデフォルトの動作でした。(アップグレード中にバイナリロギングを無効にするには、プログラムを
--skip-write-binlog
で起動することによって、このオプションの逆を使用する必要がありました。)MySQL 5.6.7 から、mysql_upgrade によるバイナリロギングはデフォルトで無効です (Bug #14221043)。アクションをバイナリログに書き込む場合は、明示的に--write-binlog
を使用してプログラムを呼び出します。(また、MySQL 5.6.7 から、--skip-write-binlog
オプションは実際には何もしません。)グローバルトランザクション識別子を有効にして稼働している MySQL サーバーでは、mysql_upgrade を実行することは推奨されません (Bug #13833710)。これは、GTID を有効にするということは、mysql_upgrade がシステムテーブルに対して、
MyISAM
などの非トランザクションストレージエンジンを使用して実行する必要のある更新が、失敗することを意味するからです。詳細は、セクション17.1.3.4「GTID ベースレプリケーションの制約」を参照してください。