Documentation Home
MySQL 5.6 リファレンスマニュアル
Download this Manual
PDF (US Ltr) - 27.1Mb
PDF (A4) - 27.1Mb
EPUB - 7.5Mb
HTML Download (TGZ) - 7.2Mb
HTML Download (Zip) - 7.2Mb


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

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

root のパスワードを知っているがそれを変更する場合は、セクション13.7.1.7「SET PASSWORD 構文」を参照してください。

root のパスワードを以前設定したが忘れた場合は、新しいパスワードを設定できます。次のセクションでは、Windows システムと UNIX システムでの手順、およびすべてのシステムに当てはまる一般的な手順について説明します。

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

Windows では、次の手順を使用してすべての MySQL root アカウントのパスワードをリセットします。

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

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

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

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

    UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
    FLUSH PRIVILEGES;
    

    UPDATE ステートメントおよび FLUSH ステートメントは、それぞれ単一の行に記述します。UPDATE ステートメントはすべての root アカウントのパスワードをリセットし、FLUSH ステートメントは付与テーブルをメモリーにリロードするようにサーバーに通知して、パスワードの変更が認識されるようにします。

  4. ファイルを保存します。この例では、ファイルに C:\mysql-init.txt という名前を付けます。

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

  6. 特殊な --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 設定が含まれています。

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

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

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

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

  1. mysqld サーバーが実行される UNIX ユーザー (たとえば、mysql) としてシステムにログオンします。

  2. サーバーのプロセス 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 コマンドに指定されます。

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

    UPDATE mysql.user SET Password=PASSWORD('MyNewPass') WHERE User='root';
    FLUSH PRIVILEGES;
    

    UPDATE ステートメントおよび FLUSH ステートメントは、それぞれ単一の行に記述します。UPDATE ステートメントはすべての root アカウントのパスワードをリセットし、FLUSH ステートメントは付与テーブルをメモリーにリロードするようにサーバーに通知して、パスワードの変更が認識されるようにします。

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

  5. 特殊な --init-file オプションを指定して MySQL サーバーを起動します。

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

    --init-file オプションで指定されたファイルの内容がサーバーの起動時に実行され、各 root アカウントのパスワードが変更されます。

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

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

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

前のセクションでは、Windows システムおよび UNIX システムでのパスワードのリセットの手順を説明しました。ほかの方法としては、すべてのプラットフォームで mysql クライアントを使用して新しいパスワードを設定できます (ただし、この方法はセキュリティー保護の面で劣ります)。

  1. mysqld を停止し、--skip-grant-tables オプションを指定して再起動します。これにより、だれでもパスワードなしで接続できるようになり、すべての権限が付与されます。これはセキュアではないため、リモートクライアントによる接続を回避するために、--skip-networking と組み合わせて --skip-grant-tables を使用する必要がある場合もあります。

  2. 次のコマンドを使用して mysqld サーバーに接続します。

    shell> mysql
    
  3. mysql クライアントで次のステートメントを発行します。パスワードを使用するパスワードに置き換えます。

    mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass')
        ->                   WHERE User='root';
    mysql> FLUSH PRIVILEGES;
    

    FLUSH ステートメントは、パスワードの変更を認識させるために、付与テーブルをメモリーにリロードするようにサーバーに通知します。

新しいパスワードを使用して root として MySQL サーバーに接続できるようになりました。サーバーを指定して、通常モード (--skip-grant-tables オプションおよび --skip-networking オプションを指定しない) で再起動します。


User Comments
  Posted by Schneelocke on February 16, 2005
On Windows installations, it is also possible to disable grant table loading and restart the server using the MySQL System Tray Monitor (the relevant option is under Configure Instance->Startup Variables->Security).

I got all sorts of unhelpful error messages when trying to reset the root password on the console as described, but using the System Tray monitor and the graphical MySQL Administrator worked flawlessly.

  Posted by Chetan Graham on May 12, 2008
Make sure you have your InnoDB Base Directory and Data Directory path's correct or you will continue to get this error. "Error 1045 Access denied for 'root'@'localhost'[using password: Yes] "

If you have InnoDB set up you must have the correct path to these two directories in MySQL.

I've learned the hard way for the last several years on similar errors.

Oh, Also please understand, that [using password: Yes] does not necessarily mean you are using the wrong password.
You might need to allow mysqld-nt.exe from your FireWall or your Virus Software has an inbound FireWall setup or you do not have Administrative rights to do this installation (if you are installing for first time.)

Hope this helps someone.
Blessings,
Chetanji
  Posted by cnemo why on September 23, 2008
I also found a good example on how to reset is here: http://blog.dotkam.com/2007/04/10/mysql-reset-lost-root-password/
  Posted by Cameron James on January 13, 2010
If you're looking to fix root's permissions, not just reset the password, insert the following code on a new line at the start of the mysql-init file.
It will effectively reset root with the permissions to do whatever root pleases.

grant all privileges on *.* to root@localhost;
  Posted by Mofassir Haque on January 15, 2010
You can delete root password by re-installing MySqL but mysql folder under program files and under my documents must be deleted first.
  Posted by jacques montes on February 26, 2010
When resetting the root password, I had to remove the previously directory "c:\Documents and Settings\Administrator\Application Data\MySQL" to be able to reset the password. And in my case the directory was hidden ...
  Posted by Brenda Wallace on October 27, 2010
on debian and ubuntu you can reset the password by doing:

sudo dpkg-reconfigure mysql-server-5.1

  Posted by Sam Sherlock on November 9, 2010
Windows 7 when reseting root password using this method I had to run cmd as administrator before the advice above would take effect.

(and yes I did indeed install mysql and forget what pass I gave root; almost immediately - do-do-donut)
  Posted by Klaus Slott on December 3, 2010
If using the example above on a unix system and MySQL is running on non-root account: Remember to ensure that file permissions for the mysql-init file allows mysqld to read the file.
  Posted by Barry Galbraith on February 4, 2011
When resetting root password in Windows, if you start the server with
>mysqld --defaults-file="c:\mysql\my.ini" --init-file=c:\\init.txt
the command will start the server, but not return to a prompt. It will appear to lock up.

Better to use

>start mysqld --defaults-file="c:\mysql\my.ini" --init-file=c:\\init.txt

It opens a new window, starts mysqld, the new window will close, and return to a prompt.
  Posted by ramasamy g on November 26, 2011
If you have trouble stopping mysqld proccess

In debian/ubuntu

try /etc/init.d/mysql stop
  Posted by Apple Grew on January 17, 2012
If you are using CentOS 6 (maybe others too). To reset the root password use the following steps:-

1) sudo service mysqld stop
2) sudo service mysqld startsos
3) mysql -u root
4) Now you will be at mysql prompt. Here type:-
4.1) UPDATE mysql.user SET Password=PASSWORD('NewPassHere') WHERE User='root';
4.2) FLUSH PRIVILEGES;
4.3) quit;
5) sudo service mysqld restart
  Posted by Oliver Candelario on April 23, 2012
  Posted by Brian Lindval on April 25, 2012
An important note for those using the initial recommended steps with MySQL on Windows.
Make sure to run the command prompt as administrator even if you are logged in as administrator. The initial steps failed until elevating the rights for the command prompt for me.
  Posted by Florian Rustedt on July 24, 2012
Very important:
On actual Ubuntu (LTS12) and perhaps also on other systems, the init-file must have the same owner, as the mysqld!

So working way will be p.e.:
mysqld --user=mysql --init-file=/tmp/reset-mysql-pw.sql

Where /tmp/reset-mysql-pw.sql has the owner "mysql", too
  Posted by David Beecher on November 16, 2013
One thing to note--

If you do the password reset and you still can't get in due to the following error:

[root@dbdev log]# mysql -uroot -p
Enter password:
ERROR 2049 (HY000): Connection using old (pre-4.1.1) authentication protocol refused (client option 'secure_auth' enabled)

Go into the /etc/my.cnf file and make sure that:

old_password=0

THEN reset the password and try again.

Good luck,
David

  Posted by Lance Kuttner on December 2, 2013
Sign Up Login You must be logged in to post a comment.