それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

MySQLのパスワード忘れの場合。

MySQLのパスワードを紛失することが多いので、リカバリ方法をメモっておく.沢山のサーバーやWEBアプリを入れたり消したりしているとパスワードが分からなくなっていく、仮想化していたり、久しぶりに起動したサーバーにパスワードを紛失して、パスワードをリセットしたくてあたふたすることがないように、MySQLのパスワードの再設定方法をメモっておく

MySQLのパスワード リカバリの手順

  1. Mysqlプロセスを停止
  2. セーフモード(認証無し)でmysql起動する
  3. MySQLにログイン
  4. 管理用データベースを選択
  5. パスワードを変更するべきユーザーを一覧表示する。
  6. パスワードを変更する。
  7. 権限を一新する
  8. MySQLを再起動する。
  9. 更新した権限でログインできるかチェックする。

Mysqlプロセスを停止

緊急時リカバリ処理なのでOSにroot ログインを前提としている

/etc/init.d/mysqld stop

セーフモード(認証無し)で起動する

/usr/bin/mysqld_safe --user=root --skip-grant-tables &

MySQLにログイン

mysql -u root

管理用データベースを選択

mysql> use mysql;

パスワードを変更するべきユーザーを一覧表示する。

パスワードを変更したいユーザーをちゃんと捜す

mysql> select host, User, Password from user;
+-----------+---------+------------------+
| host      | User    | Password         |
+-----------+---------+------------------+
| localhost | root    | xxxxxxxxxxxxxxxx |
| web-srv2  | root    | xxxxxxxxxxxxxxxx |
| 127.0.0.1 | root    | xxxxxxxxxxxxxxxx |
| localhost |         | xxxxxxxxxxxxxxxx |
| localhost | wpadmin | xxxxxxxxxxxxxxxx |
+-----------+---------+------------------+

パスワードを変更する。

mysql> update user set password=password('this_is_my_new_password') where user='root'; #今回はRootパスワードを対象にした

this_is_my_new_password の部分を再設定したいパスワードに読み替えてください。

権限を一新する

mysql> flush privileges; #もしかしたら不要?
mysql> exit;

Mysqlを再起動する。

# /etc/init.d/mysqld stop 
# /etc/init.d/mysqld start 

更新した権限でログインできるかチェックする。

$ mysql -p  -u USERNAME
rootのパスワードを変更したのなら
root@localhost# mysql -p  #rootでログイン

これでOK.

MySQLのパスワード更新は、プロセス管理権限のあるユーザーで行なうこと。


ポイントは--skip-grant-tablesオプションをつけて、MySQLを再起動する点にある。

2010-08-25 追記

ブクマコメントで指摘いただきました。

セーフモード(認証無し)で起動するは、--user=rootは不要とのこと。--skip-networkingはつけた方が良いとのこと。まぁ確かにそうだね。

/usr/bin/mysqld_safe  --skip-grant-tables &  
/usr/bin/mysqld_safe  --skip-grant-tables  --skip-networking  &  # またはネットワークなし

--skip-networking はネットワーク越しのアクセスを受け付けないってことなんですね。

ありがとうございます