MySQL の root
のパスワードを設定したことがない場合、root
として接続するときにサーバーはパスワードを要求しません。ただし、これはセキュリティー保護されていません。パスワードを割り当てる手順については、セクション2.10.2「最初の MySQL アカウントのセキュリティー設定」を参照してください。
root
のパスワードを知っているがそれを変更する場合は、セクション13.7.1.7「SET PASSWORD 構文」を参照してください。
root
のパスワードを以前設定したが忘れた場合は、新しいパスワードを設定できます。次のセクションでは、Windows システムと UNIX システムでの手順、およびすべてのシステムに当てはまる一般的な手順について説明します。
Windows では、次の手順を使用してすべての MySQL root
アカウントのパスワードをリセットします。
Administrator としてシステムにログオンします。
-
MySQL サーバーが実行されている場合は停止します。Windows サービスとして実行されているサーバーの場合は、サービスマネージャーを開きます (
メニューから、 、 、 の順に選択します)。リスト内で MySQL サービスを見つけて、それを停止します。サーバーがサービスとして実行されていない場合は、タスクマネージャーを使用して強制的に停止する必要があることがあります。
-
次のステートメントを含むテキストファイルを作成します。パスワードを使用するパスワードに置き換えます。
UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root'; FLUSH PRIVILEGES;
UPDATE
ステートメントおよびFLUSH
ステートメントは、それぞれ単一の行に記述します。UPDATE
ステートメントはすべてのroot
アカウントのパスワードをリセットし、FLUSH
ステートメントは付与テーブルをメモリーにリロードするようにサーバーに通知して、パスワードの変更が認識されるようにします。 ファイルを保存します。この例では、ファイルに
C:\mysql-init.txt
という名前を付けます。コンソールウィンドウを開いて、コマンドプロンプトを表示します (cmd を入力します)。
メニューから を選択し、実行するコマンドとして-
特殊な
--init-file
オプション (オプション値のバックスラッシュは 2 つです) を指定して MySQL サーバーを起動します。C:\> C:\mysql\bin\mysqld --init-file=C:\\mysql-init.txt
C:\mysql
以外の場所に MySQL をインストールした場合は、それに応じてコマンドを変更します。--init-file
オプションで指定されたファイルの内容がサーバーの起動時に実行され、各root
アカウントのパスワードが変更されます。サーバーがログファイルではなくコンソールウィンドウに出力を表示するようにする場合は、
--console
オプションをコマンドに追加することもできます。MySQL Installation Wizard を使用して MySQL をインストールした場合は、
--defaults-file
オプションを指定する必要があることがあります。C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld.exe" --defaults-file="C:\\Program Files\\MySQL\\MySQL Server 5.6\\my.ini" --init-file=C:\\mysql-init.txt
適切な
--defaults-file
設定はサービスマネージャーを使用して見つけることができます ( メニューから 、 、 の順に選択します)。リスト内で MySQL サービスを見つけて、それを右クリックし、「プロパティ」
オプションを選択します。「実行ファイルのパス」
フィールドに--defaults-file
設定が含まれています。 サーバーが正常に起動されたら
C:\mysql-init.txt
を削除します。
新しいパスワードを使用して root
として MySQL サーバーに接続できるようになりました。MySQL サーバーを停止して、通常モードで再起動します。サーバーをサービスとして実行している場合は、Windows の「サービス」ウィンドウから開始します。サーバーを手動で起動している場合は、通常使用するコマンドを使用してください。
UNIX では、次の手順を使用してすべての MySQL root
アカウントのパスワードをリセットします。この手順は、サーバーの実行に通常使用する UNIX のログインアカウントを使用して実行されるようにサーバーが起動されることを想定しています。たとえば、mysql
のログインアカウントを使用してサーバーを実行する場合は、この手順を使用する前に mysql
としてログインしてください。または、root
としてログインすることもできますが、この場合は --user=mysql
オプションを指定して mysqld を起動する必要があります。--user=mysql
を使用せずに root
としてサーバーを起動した場合、サーバーは root
が所有するファイル (ログファイルなど) をデータディレクトリに作成することがあり、以降のサーバーの起動で権限関連の問題の原因となることがあります。これが発生した場合は、それらのファイルの所有権を mysql
に変更するか、それらを削除する必要があります。
mysqld サーバーが実行される UNIX ユーザー (たとえば、
mysql
) としてシステムにログオンします。-
サーバーのプロセス ID が含まれている
.pid
ファイルを見つけます。このファイルの正確な場所と名前は、配布、ホスト名、および構成によって異なります。一般的な場所は、/var/lib/mysql/
、/var/run/mysqld/
、および/usr/local/mysql/data/
です。通常、ファイル名には.pid
という拡張子が付けられており、mysqld
またはシステムのホスト名で始まります。MySQL サーバーを停止するには、次のコマンドに
.pid
ファイルのパス名を使用して、通常のkill
(kill -9
ではありません) を mysqld プロセスに送信します。shell> kill `cat /mysql-data-directory/host_name.pid`
cat
コマンドには逆引用符 (通常の引用符ではなく) を使用します。これにより、cat
の出力がkill
コマンドに指定されます。 -
次のステートメントを含むテキストファイルを作成します。パスワードを使用するパスワードに置き換えます。
UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root'; FLUSH PRIVILEGES;
UPDATE
ステートメントおよびFLUSH
ステートメントは、それぞれ単一の行に記述します。UPDATE
ステートメントはすべてのroot
アカウントのパスワードをリセットし、FLUSH
ステートメントは付与テーブルをメモリーにリロードするようにサーバーに通知して、パスワードの変更が認識されるようにします。 ファイルを保存します。この例では、ファイルに
/home/me/mysql-init
という名前を付けます。このファイルにはパスワードが含まれているため、ほかのユーザーが見ることができる場所に保存しないでください。mysql
(サーバーが実行されるときのユーザー) としてログインしていない場合は、mysql
による読み取りを許可する権限がファイルに設定されていることを確認してください。-
特殊な
--init-file
オプションを指定して MySQL サーバーを起動します。shell> mysqld_safe --init-file=/home/me/mysql-init &
--init-file
オプションで指定されたファイルの内容がサーバーの起動時に実行され、各root
アカウントのパスワードが変更されます。 サーバーが正常に起動されたら
/home/me/mysql-init
を削除します。
新しいパスワードを使用して root
として MySQL サーバーに接続できるようになりました。サーバーを停止して、通常モードで再起動します。
前のセクションでは、Windows システムおよび UNIX システムでのパスワードのリセットの手順を説明しました。ほかの方法としては、すべてのプラットフォームで mysql クライアントを使用して新しいパスワードを設定できます (ただし、この方法はセキュリティー保護の面で劣ります)。
mysqld を停止し、
--skip-grant-tables
オプションを指定して再起動します。これにより、だれでもパスワードなしで接続できるようになり、すべての権限が付与されます。これはセキュアではないため、リモートクライアントによる接続を回避するために、--skip-networking
と組み合わせて--skip-grant-tables
を使用する必要がある場合もあります。-
次のコマンドを使用して mysqld サーバーに接続します。
shell> mysql
-
mysql クライアントで次のステートメントを発行します。パスワードを使用するパスワードに置き換えます。
mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass') -> WHERE User='root'; mysql> FLUSH PRIVILEGES;
FLUSH
ステートメントは、パスワードの変更を認識させるために、付与テーブルをメモリーにリロードするようにサーバーに通知します。
新しいパスワードを使用して root
として MySQL サーバーに接続できるようになりました。サーバーを指定して、通常モード (--skip-grant-tables
オプションおよび --skip-networking
オプションを指定しない) で再起動します。