2015.4.2

MySQLでなぜかrootを消してしまったり権限をなくしてしまった時の対処方法

263767641

こんばんは。田中です。
稀にあるようでないような現象かもしれませんが、(普通はありません。PASSを忘れたくらいならよくあるかと思いますが…)
なぜかMySQLでのrootを削除してしまったりREVOKEで全権限を無くしてしまった場合の対処法を備忘録として残しておきます。

言うまでもなく権限の無いrootユーザーやそれに変わるユーザーが存在しない場合、MySQLではエラーが頻発します。

以下、簡単ですが手順の解説です。コマンドライン操作解説については割愛しています。

root権限を復活させる

MySQLを停止

まずはMySQLを止めます。

/etc/init.d/mysqld stop

次に、–skip-grant-tablesオプション付きでMySQLを起動させます。

/usr/bin/mysqld_safe --skip-grant-tables

このようにすることによってMySQL既存権限を無視してMySQLを起動できます。

mysql -u root

これでパス無しでMySQLに接続することが可能です。
もちろんこのままではダメなので各設定を行っていきます。

use mysql;
update user set password=PASSWORD('ぱすわーど') where user='root';

次に権限を再設定します。

ユーザーに権限を設定する

updateで権限を付与します。以下コピペです。

update user set Select_priv='Y',Insert_priv='Y',Update_priv='Y',Delete_priv='Y',Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y',Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',Rpl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',Create_user_priv='Y'where User='root';

ちょっと多いのでどこか違っていたらすみません。。

そうしましたら一度接続を閉じます。

flush privileges;
exit;

抜けます。

\q

次に–skip-grant-tablesオプションなしで起動させるために、プロセスをKILLします。
PID不明な場合はps auxで調べてください。

# kill -KILL (mysqld_safe のPID)
# kill -KILL (mysqld のPID)

MySQLを再起動させる

# service mysqld start

以上で終了です。
まあ大切なのはrootとかどうとかではなく権限ってことですね。
また勉強です。

参考サイト