ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

Mysqlで「Access denied for user ‘root’@’localhost’ (using password: NO)」

スポンサードリンク

毎回引っかかります。
何度も探すの面倒なので、メモ。

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

こういう感じのエラーですよね。
3ステップでいきましょう。

まず、停止します。

$ /etc/init.d/mysql stop

やさしいモードで起動します。
詳しくは権限使わないで、起動しますー。モードです。

普通にコマンドをタイプすると、プロセスが常駐してしまうので
バッググラウンド「&」を利用します。

$ mysqld_safe --skip-grant-tables &
140xxx 00:00:00 mysqld_safe Logging to '/var/log/mysqld.log'.
140xxx 00:00:00 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
140xxx 00:00:00 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended


そして、ログインするんだよ!

$ mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)

orz
3ステップ・・・

原因調査
時間かかるなと、思ったけどすぐにわかった。

どうやら、セーフモードのソケットが作成されていないっぽい。
作成してほしいところを確認

$ cat /etc/my.cnf
~~~~いろいろ省略~~~~
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

配置されるディレクトリの確認

$ ls -d /var/run/mysqld/
ls: cannot access /var/run/mysql: そのようなファイルやディレクトリはありません

確定っぽい。で、作成

$ mkdir /var/run/mysqld
$ chmod 777 /var/run/mysqld

もっかい起動してみます。

$ mysqld_safe --skip-grant-tables &
140xxx xx:xx:xx mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

お、できたっぽい。
そして、ログインするんだよ!(やり直し)

$ mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.17 MySQL Community Server (GPL)

mysql>

うし!

では、ユーザー情報が登録されているテーブルを一旦削除します。

mysql> use mysql;
mysql> truncate table user;

# キャッシュを削除する必要があるらしいので。
mysql> flush privileges;

# ユーザーを再定義
mysql> grant all privileges on *.* to root@localhost identified by 'password' with grant option;

# もっかい、キャッシュ削除
mysql> flush privileges;

# ここまで終えたら、一旦ログアウト
mysql> quit;


んで、mysqlをふつーに起動してログインしてみよう。

$ mysql -u root -p password

入れた!
ログインできたよ!

mysqlインストール直後はこうなるので、覚えておきましょう。