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


B.3.3.2 root のパスワードをリセットする方法

MySQL の root パスワードを割り当てていない場合、サーバーは root として接続するためのパスワードをまったく必要としません。 ただし、これはセキュリティー保護されていません。 パスワードの割当て手順は、セクション2.10.4「初期 MySQL アカウントの保護」 を参照してください。

root パスワードがわかっていて、それを変更する場合は、セクション13.7.1.1「ALTER USER ステートメント」 および セクション13.7.1.10「SET PASSWORD ステートメント」 を参照してください。

以前に root パスワードを割り当てたが、忘れた場合は、新しいパスワードを割り当てることができます。 次のセクションでは、Windows、Unix および Unix に似たシステムの手順と、任意のシステムに適用される一般的な手順について説明します。

B.3.3.2.1 root のパスワードのリセット: Windows システム

Windows では、次の手順を使用して MySQL 'root'@'localhost'アカウントのパスワードをリセットします。 別のホスト名部分を持つ root アカウントのパスワードを変更するには、そのホスト名を使用するように指示を変更します。

  1. Administrator としてシステムにログオンします。

  2. MySQL サーバーが実行されている場合は停止します。 Windows サービスとして実行されているサーバーの場合は、サービスマネージャーを開きます (「スタート」メニューから、「コントロール パネル」「管理ツール」「サービス」の順に選択します)。 リスト内で MySQL サービスを見つけて、それを停止します。

    サーバーがサービスとして実行されていない場合は、タスクマネージャーを使用して強制的に停止する必要があることがあります。

  3. 単一行にパスワード割当てステートメントを含むテキストファイルを作成します。 パスワードを使用するパスワードに置き換えます。

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
  4. ファイルを保存します。 この例では、ファイルに C:\mysql-init.txt という名前を付けることを前提としています。

  5. コンソールウィンドウを開いて、コマンドプロンプトを表示します (「スタート」メニューから「ファイル名を指定して実行」を選択し、実行するコマンドとして cmd を入力します)。

  6. ファイルに名前を付けるように init_file システム変数を設定して MySQL サーバーを起動します (オプション値のバックスラッシュが二重になることに注意してください):

    C:\> cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
    C:\> mysqld --init-file=C:\\mysql-init.txt

    MySQL を別の場所にインストールした場合は、cd コマンドを適宜調整します。

    サーバーは、起動時に init_file システム変数で指定されたファイルの内容を実行し、'root'@'localhost'アカウントのパスワードを変更します。

    サーバー出力をログファイルではなくコンソールウィンドウに表示するには、mysqld コマンドに --console オプションを追加します。

    MySQL インストールウィザードを使用して MySQL をインストールした場合、--defaults-file オプションの指定が必要になることがあります。 例:

    C:\> mysqld
             --defaults-file="C:\\ProgramData\\MySQL\\MySQL Server 8.0\\my.ini"
             --init-file=C:\\mysql-init.txt

    適切な --defaults-file 設定はサービスマネージャーを使用して見つけることができます (「スタート」メニューから「コントロール パネル」「管理ツール」「サービス」の順に選択します)。 リスト内で MySQL サービスを見つけて、それを右クリックし、「プロパティ」オプションを選択します。 「実行ファイルのパス」フィールドに --defaults-file 設定が含まれています。

  7. サーバーが正常に起動されたら C:\mysql-init.txt を削除します。

新しいパスワードを使用して root として MySQL サーバーに接続できるようになりました。 MySQL サーバーを停止し、通常どおりに再起動します。 サーバーをサービスとして実行している場合は、Windows の「サービス」ウィンドウから開始します。 サーバーを手動で起動している場合は、通常使用するコマンドを使用してください。

B.3.3.2.2 root パスワードのリセット: Unix および Unix- 類似システム

Unix では、次の手順を使用して MySQL 'root'@'localhost'アカウントのパスワードをリセットします。 別のホスト名部分を持つ root アカウントのパスワードを変更するには、そのホスト名を使用するように指示を変更します。

この手順では、通常実行に使用する Unix ログインアカウントから MySQL サーバーを起動することを前提としています。 たとえば、mysql のログインアカウントを使用してサーバーを実行する場合は、この手順を使用する前に mysql としてログインしてください。 または、root としてログインすることもできますが、この場合は --user=mysql オプションを指定して mysqld を起動する必要があります--user=mysql を使用せずに root としてサーバーを起動した場合、サーバーは root が所有するファイル (ログファイルなど) をデータディレクトリに作成することがあり、以降のサーバーの起動で権限関連の問題の原因となることがあります。 その場合は、ファイルの所有権を mysql に変更するか、削除する必要があります。

  1. MySQL サーバーを実行する Unix ユーザー (mysql など) としてシステムにログオンします。

  2. MySQL サーバーが実行されている場合は停止します。 サーバーのプロセス ID が含まれている .pid ファイルを見つけます。 このファイルの正確な場所と名前は、配布、ホスト名、および構成によって異なります。 一般的な場所は、/var/lib/mysql//var/run/mysqld/、および /usr/local/mysql/data/ です。 通常、ファイル名には .pid という拡張子が付けられており、mysqld またはシステムのホスト名で始まります。

    通常の kill (kill -9 ではなく) を mysqld プロセスに送信して、MySQL サーバーを停止します。 次のコマンドで、.pid ファイルの実際のパス名を使用します:

    shell> kill `cat /mysql-data-directory/host_name.pid`

    cat コマンドには逆引用符 (通常の引用符ではなく) を使用します。 これにより、cat の出力が kill コマンドに指定されます。

  3. 単一行にパスワード割当てステートメントを含むテキストファイルを作成します。 パスワードを使用するパスワードに置き換えます。

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
  4. ファイルを保存します。 この例では、ファイルに/home/me/mysql-init という名前を付けることを前提としています。 ファイルにはパスワードが含まれているため、他のユーザーが読み取れる場所に保存しないでください。 mysql (サーバーが実行されるときのユーザー) としてログインしていない場合は、mysql による読み取りを許可する権限がファイルに設定されていることを確認してください。

  5. ファイルに名前を付けるように init_file システム変数を設定して、MySQL サーバーを起動します:

    shell> mysqld --init-file=/home/me/mysql-init &

    サーバーは、起動時に init_file システム変数で指定されたファイルの内容を実行し、'root'@'localhost'アカウントのパスワードを変更します。

    サーバーの通常の起動方法によっては、その他のオプションも必要になる場合があります。 たとえば、init_file 引数の前に --defaults-file が必要な場合があります。

  6. サーバーが正常に起動されたら /home/me/mysql-init を削除します。

新しいパスワードを使用して root として MySQL サーバーに接続できるようになりました。 サーバーを停止して、通常モードで再起動します。

B.3.3.2.3 root のパスワードのリセット: 一般的な手順

前述のセクションでは、Windows、Unix および Unix に似たシステム専用のパスワードリセット手順について説明します。 または、どのプラットフォームでも、mysql クライアントを使用してパスワードをリセットできます (ただし、このアプローチの安全性は低くなります):

  1. 必要に応じて MySQL サーバーを停止し、--skip-grant-tables オプションを使用して再起動します。 これにより、すべてのユーザーがパスワードなしですべての権限で接続できるようになり、ALTER USERSET PASSWORD などのアカウント管理ステートメントが無効になります。 これはセキュアではないため、--skip-grant-tables オプションを使用してサーバーを起動すると、skip_networking を有効にしてリモート接続も無効になります。

  2. mysql クライアントを使用して MySQL サーバーに接続します。サーバーは --skip-grant-tables で起動されたため、パスワードは必要ありません:

    shell> mysql
  3. mysql クライアントで、account-management ステートメントが機能するように付与テーブルをリロードするようにサーバーに指示します:

    mysql> FLUSH PRIVILEGES;

    次に、'root'@'localhost'アカウントのパスワードを変更します。 パスワードを使用するパスワードに置き換えます。 別のホスト名部分を持つ root アカウントのパスワードを変更するには、そのホスト名を使用するように指示を変更します。

    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

新しいパスワードを使用して root として MySQL サーバーに接続できるようになりました。 サーバーを停止し、通常どおりに再起動します (--skip-grant-tables オプションを指定せず、skip_networking システム変数を有効にせずに)。


関連キーワード:  パスワード, サーバー, 起動, init, リセット, file, 変更, アカウント, 実行, 接続