経緯は自分でもまったく分からないのですが、気づいたらMySQLのrootアカウントを削除してしまいました。普段は開発中のDBに対してselect, update, insert, deleteのみを許した限定的な権限のユーザでゴニョゴニョしていたので、いざ新規テーブルを作成しようかと思ったらrootでつなげない→途方に暮れる、ということになったわけです。
よくある事例としては「rootのパスワードを忘れました」ということはあるかと思うのですが、「rootアカウント自体を削除してしまいました」という事例はなかなか聞きません。と、いうわけで地味に対応が困ったのですが、何とか復旧できたのでそのメモを記しておきます。OSはFedora5です。
まず、起動しているmysqldを停止させます。Fedoraだと(*)
/etc/init.d/mysqld stop
で、停止します。
(*) 起動パスなどは適宜ご利用の環境にあわせて読んでいただければと思います。
その後、認証なしでMySQLサーバに接続するために、認証をパスさせるようにします。まず、
/usr/bin/mysqld_safe --skip-grant-tables
で、MySQLサーバを起動します。この上で
mysql -u root
で、パス無しでMySQLサーバに接続できます。ここではパス無しrootが暫定的(?)に作られている状態なので、mysql DBを選択し、パスワードを設定します。
use mysql;
update user set password=PASSWORD('NEW_PASSWORD') where user='root';
これでパスワードが設定されました。でも、この段階ではまだrootとは名ばかりで、実際は何もできないユーザにすぎないので、権限を再設定します。
update user set Select_priv='Y', Insert_priv='Y', Update_priv='Y', Delete_priv='Y', Create_priv='Y', Grant_priv='Y', Alter_priv='Y' where User='root';
これで、情報をflushし、接続を閉じます。
flush privileges. exit;
ここで、稼動中のmysqldを停止します。init.d/mysqld 以外からの終了方法を忘れたので(おっと。。)、面倒なのでプロセスを直接Killします。
ps aux | grep mysqld_safe kill -KILL [PID]
普通のmysqldを起動します。
/etc/init.d/mysqld start
これで設定したパスワードでrootで接続し、自由にいろいろできると思います。権限をupdateさせるときにいろいろ行いましたが、もしかすると過不足があるかもしれません。僕の場合はcreate tableを行うことが目的だったので、必要そうな権限をとりあえず有効にしてみましたが、適宜調整ください。
で、今回の件で分かったのは、権限が正しく設定されていないとmysql DBすらrootで覗くことができないんですね。。あと--skip-grant-tablesで起動していると、grant構文が無効になっている、とかも初めて知りました。まー苦労してこそいろいろ勉強になる、ということですねぇ。
- Newer: PHPでffmpegの出力を格納する
- Older: JavaからRubyへ
Google Adsense
Social bookmark comment : 0
No comment.
Comment : 0
Trackback : 0
- TrackBack URL for this entry
- http://blog.katsuma.tv/mt-tb.cgi/76
- Listed below are links to weblogs that reference
- MySQLでrootを削除したときの対処法 from blog.katsuma.tv
2007/07/18 (Wed)