mysql5.6でrootパスワードがdeniedされた際にログインできるようにする

作業環境

centos6.9
mysql5.6

概要

しばらく放置していたサーバーのMYSQLにログインしようとしたらこういうエラーが出た

# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

やったこと

mysql止めようとしたらコマンドが違うらしい

# service mysql stop
mysql: unrecognized service

service系のコマンドはこうすると見つかると聞いた

# ls /etc/rc.d/init.d/ | grep mysql
mysqld

mysqlを止める

# service mysqld stop
Stopping mysqld:                                           [  OK  ]

セーフモードで起動してテーブルの権限をスキップする

# mysqld_safe --skip-grant-tables &
180810 10:18:18 mysqld_safe Logging to '/var/log/mysqld.log'.
180810 10:18:18 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

このままとコマンド入力できないので[ctrl]+を押して出ること

mysqlにパスワード無しでログインする

# mysql -u root

ログインできたらmysqlの設定テーブルをuseする

> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

現在登録されているユーザーを一応確認しよう

> select * from user;

今回はユーザーをすべて削除してから新しくrootユーザーを作ることにした。

> truncate table user;
> flush privileges;

ローカルからだけ入れるrootを作成。
すべてのSQLが使えてユーザーを作れる設定で作成する。
[/sql] > grant all privileges on *.* to root@localhost identified by ‘パスワード’ with grant option;
> flush privileges;
[/sql]

rootユーザーが設定できたか確認してみる

> select * from user;
> exit;

再起動する

# service mysqld restart
180810 11:26:10 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [  OK  ]
[1]+  Done                    mysqld_safe --skip-grant-tables

パスワード無しでログインできないか確認、エラーが出ればOK

# mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

先程設定したパスワードでログインできるか確認、ログインできればOK

#  mysql -u root -p

おわり。