MySQLのrootパスワードを忘れたら

2月 17, 2010

しつこくMySQLユーザアカウントネタ。

標題の対処法はどこにでも書かれているが、いちいち調べるのは面倒だからここにも
書いておこう。。と思っていたら、今日さっそく利用した。
人生、どのタイミングで何が起きるか分かりません。

スタンダードな対処法
1.MySQLインスタンスを停止する。
2.認証スキップモードで起動する。セーフモード、ともいうらしい。

# /usr/bin/mysqld_safe – -skip-grant-tables &

※mysqld_safeのパスは標準では上記のようになると思うが、環境によっては違うかも。。

3.認証なしでログイン。

# mysql -u root

4.rootパスワードを更新

mysql > UPDATE mysql.user SET password=PASSWORD(‘new-passowrd‘)
-> WHERE User= ‘root’;
mysql > FLUSH PRIVILEGES;
mysql > ¥q

5.現在のMySQLを停止させて、通常モードで起動する。
6.先ほど設定したパスワードでログインできるか確認する。


この他に、rootパスワードをNULLにセットして一旦抜けてからmysqladminでパスワード
設定する、なんていうのもあったが、ちょっと冗長な気がする。。
いろんなやり方を知るのはいいけど、同じ結果になるなら方法は簡潔な方がいい。
しかしせっかくなのでmysqladminでのパスワードセット方法も書いておこう。
こういう時以外でも使えるわけだし。

# mysqladmin -u root password new-passowrd
# mysqladmin reload


パスワードを指定する際は、クォーテーションで囲む必要はないそうだ。

ちなみに自分の場合、rootパスワードを忘れたというより、初期状態は空になっている
ハズのrootパスワードが何故かセットされていたという現象に遭遇した。詳しいことは
書けないが、やはり人生何が起こるか分からないものなのだ。

それから話はそれるが、ググっていたらこちらに面白いことが書いてあったので、
記録させてもらおう。

MySQLのユーザアカウントはOSのユーザアカウントとは別のものだが、MySQLへの
ログイン時にユーザ名が指定されていないときは、現在のOS上のログインユーザ名を
MySQLのユーザー名に置き換えてログインを試みてくれる、ということらしい。

し、知らなかった。
MySQLのユーザアカウント管理、深いよ。。


追記
上記の「現在のOS上のログインユーザ」というのは、マシンに接続したときのユーザ、
つまりまさにログインユーザであって、suでスイッチしたユーザではない。
・・・ってことが、やってみて分かった。

さらに追記
下記のコマンドを思い切り間違えていたので修正しました。我ながらトホホだ、、、

- -skip-grant-options
↓ ↓ ↓
- -skip-grant-tables



Categories: MySQL