MySQL の root を削除してしまった(ので、対処した) 2016年10月2日

MySQLroot.jpg 社畜ちゃん台詞メーカー

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:4Yesterday:0Total:736 since 2 October 2016

*1 実際にあったのは 6月
*2 MySQLのマニュアルには「mysqld_safe ― MySQL サーバー起動スクリプト」との小見出しがあるので、モードではないようです
*3 普通はプロンプトは「返る」との漢字だは思いますが、行ったきりで戻って来ないので……

添付ファイル: fileMySQLroot.jpg 152件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 02 Oct 2016 (日) 16:20:02 (1381d)