MySQL の root
パスワードを割り当てていない場合、サーバーは root
として接続するためのパスワードをまったく必要としません。 ただし、これはセキュリティー保護されていません。 パスワードの割当て手順は、セクション2.10.4「初期 MySQL アカウントの保護」 を参照してください。
root
パスワードがわかっていて、それを変更する場合は、セクション13.7.1.1「ALTER USER ステートメント」 および セクション13.7.1.10「SET PASSWORD ステートメント」 を参照してください。
以前に root
パスワードを割り当てたが、忘れた場合は、新しいパスワードを割り当てることができます。 次のセクションでは、Windows、Unix および Unix に似たシステムの手順と、任意のシステムに適用される一般的な手順について説明します。
Windows では、次の手順を使用して MySQL 'root'@'localhost'
アカウントのパスワードをリセットします。 別のホスト名部分を持つ root
アカウントのパスワードを変更するには、そのホスト名を使用するように指示を変更します。
Administrator としてシステムにログオンします。
-
MySQL サーバーが実行されている場合は停止します。 Windows サービスとして実行されているサーバーの場合は、サービスマネージャーを開きます (
メニューから、 、 、 の順に選択します)。 リスト内で MySQL サービスを見つけて、それを停止します。サーバーがサービスとして実行されていない場合は、タスクマネージャーを使用して強制的に停止する必要があることがあります。
-
単一行にパスワード割当てステートメントを含むテキストファイルを作成します。 パスワードを使用するパスワードに置き換えます。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
ファイルを保存します。 この例では、ファイルに
C:\mysql-init.txt
という名前を付けることを前提としています。コンソールウィンドウを開いて、コマンドプロンプトを表示します (cmd を入力します)。
メニューから を選択し、実行するコマンドとして-
ファイルに名前を付けるように
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
設定が含まれています。 サーバーが正常に起動されたら
C:\mysql-init.txt
を削除します。
新しいパスワードを使用して root
として MySQL サーバーに接続できるようになりました。 MySQL サーバーを停止し、通常どおりに再起動します。 サーバーをサービスとして実行している場合は、Windows の「サービス」ウィンドウから開始します。 サーバーを手動で起動している場合は、通常使用するコマンドを使用してください。
Unix では、次の手順を使用して MySQL 'root'@'localhost'
アカウントのパスワードをリセットします。 別のホスト名部分を持つ root
アカウントのパスワードを変更するには、そのホスト名を使用するように指示を変更します。
この手順では、通常実行に使用する Unix ログインアカウントから MySQL サーバーを起動することを前提としています。 たとえば、mysql
のログインアカウントを使用してサーバーを実行する場合は、この手順を使用する前に mysql
としてログインしてください。 または、root
としてログインすることもできますが、この場合は --user=mysql
オプションを指定して mysqld を起動する必要があります。 --user=mysql
を使用せずに root
としてサーバーを起動した場合、サーバーは root
が所有するファイル (ログファイルなど) をデータディレクトリに作成することがあり、以降のサーバーの起動で権限関連の問題の原因となることがあります。 その場合は、ファイルの所有権を mysql
に変更するか、削除する必要があります。
MySQL サーバーを実行する Unix ユーザー (
mysql
など) としてシステムにログオンします。-
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
コマンドに指定されます。 -
単一行にパスワード割当てステートメントを含むテキストファイルを作成します。 パスワードを使用するパスワードに置き換えます。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
ファイルを保存します。 この例では、ファイルに
/home/me/mysql-init
という名前を付けることを前提としています。 ファイルにはパスワードが含まれているため、他のユーザーが読み取れる場所に保存しないでください。mysql
(サーバーが実行されるときのユーザー) としてログインしていない場合は、mysql
による読み取りを許可する権限がファイルに設定されていることを確認してください。-
ファイルに名前を付けるように
init_file
システム変数を設定して、MySQL サーバーを起動します:shell> mysqld --init-file=/home/me/mysql-init &
サーバーは、起動時に
init_file
システム変数で指定されたファイルの内容を実行し、'root'@'localhost'
アカウントのパスワードを変更します。サーバーの通常の起動方法によっては、その他のオプションも必要になる場合があります。 たとえば、
init_file
引数の前に--defaults-file
が必要な場合があります。 サーバーが正常に起動されたら
/home/me/mysql-init
を削除します。
新しいパスワードを使用して root
として MySQL サーバーに接続できるようになりました。 サーバーを停止して、通常モードで再起動します。
前述のセクションでは、Windows、Unix および Unix に似たシステム専用のパスワードリセット手順について説明します。 または、どのプラットフォームでも、mysql クライアントを使用してパスワードをリセットできます (ただし、このアプローチの安全性は低くなります):
必要に応じて MySQL サーバーを停止し、
--skip-grant-tables
オプションを使用して再起動します。 これにより、すべてのユーザーがパスワードなしですべての権限で接続できるようになり、ALTER USER
やSET PASSWORD
などのアカウント管理ステートメントが無効になります。 これはセキュアではないため、--skip-grant-tables
オプションを使用してサーバーを起動すると、skip_networking
を有効にしてリモート接続も無効になります。-
mysql クライアントを使用して MySQL サーバーに接続します。サーバーは
--skip-grant-tables
で起動されたため、パスワードは必要ありません:shell> mysql
-
mysql
クライアントで、account-management ステートメントが機能するように付与テーブルをリロードするようにサーバーに指示します:mysql> FLUSH PRIVILEGES;
次に、
'root'@'localhost'
アカウントのパスワードを変更します。 パスワードを使用するパスワードに置き換えます。 別のホスト名部分を持つroot
アカウントのパスワードを変更するには、そのホスト名を使用するように指示を変更します。mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
新しいパスワードを使用して root
として MySQL サーバーに接続できるようになりました。 サーバーを停止し、通常どおりに再起動します (--skip-grant-tables
オプションを指定せず、skip_networking
システム変数を有効にせずに)。