phpMyAdmin を使って、ユーザをコピーしたり単に増やしたりしている中で、
(経緯はとにかく)間違って root
を削除してしまいました*1。
もちろん(!)本番環境です。
サーバの root を削除した訳ではないので復旧できたのですが、 ちょっと困りました。 ので、その記録。
http://blog.katsuma.tv/2007/07/mysql_root_reset.html などを参考にしました。
サーバの root 権限は持っていませんが、 sudo で root 権限での実行ができる環境です。
MySQLサーバ(mysqld)を停止させる
考えるのが面倒なので kill する
$ sudo kill -KILL [PID]
認証をスキップして、 セーフモード(?*2)を使って MySQLサーバを起動
$ sudo /usr/bin/mysqld_safe --skip-grant-tables
ここで接続していた ssh
のプロンプトが帰って来なくなるので*3、
別に ssh でサーバに接続する
上の mysqld_safe の起動に & を付ければプロンプトは帰って来るが、
以下の作業が正しく行えなかった
対話モードで MySQL を開く(ユーザは root)
$ sudo mysql -u root
ここからは、sql(の文法)なので、最後に「;」(セミコロン)が必要
mysql DBを選択
> use mysql;
パスワードを設定
> update user set password=PASSWORD('NEW_PASSWORD') where user='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 しないとだめ!)、対話モードの mysql を閉じる
> flush privileges; > exit;
稼動中の MySQLサーバを停止(kill)
$ sudo kill -KILL [PID]
MySQLサーバ(mysqld)を起動
$ sudo /etc/rc.d/init.d/mysqld start
phpMyAdmin で確認(省略)
ふ〜(約2時間)
root の権限が不足していたので (phpMyAdmin での表示が元どおりにならなかったのでわかった)、 更に update user を後から行った。
Today:1 | Yesterday:1 | Total:1610 since 2 October 2016 |