Help us understand the problem. What is going on with this article?

MySQLに127.0.0.1で接続するとAccess denied for user 'root'@'localhost'となる時の対応

ホストをlocalhostで指定すると接続できるが、 127.0.0.1で指定すると接続できないときの解決方法です。
なお、コマンドの変数は以下のことを意味しています。

  • $DB_USER: ユーザー名
  • $DB_PW: パスワード
  • $DB_NAME: DB名

現状の確認

以下のような状態になっているとします。

127.0.0.1だと接続できません

mysql -u$DB_USER -p$DB_PW -D$DB_NAME -h 127.0.0.1

ERROR 1698 (28000): Access denied for user 'root'@'localhost'

localhostと指定すると接続できます。

mysql -u$DB_USER -p$DB_PW -Disubata -h localhost

mysql>

mysqlのユーザーにはhost=127.0.0.1のユーザーがいません

mysql> SELECT user, host FROM mysql.user ORDER BY user, host;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| debian-sys-maint | localhost |
| isucon           | %         |
| isucon           | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+

解決方法

今回は2つの方法を紹介します。

方法1. 『127.0.0.1で接続できるようにする』

DNSを無効にすることでIPアドレスで接続できるようにします。そのためにはskip-name-resolveをtrueに設定します。

/etc/mysql/my.cnf
[mysqld]
skip-name-resolve

設定が完了したらmysqlを再起動して設定を反映させます

sudo systemctl restart mysql

方法2. 『127.0.0.1のmysql.userを作成する』

mysqlでは$DB_USER@localhostと $DB_USER@127.0.0.1は別ユーザーとして識別されます。
そのため、127.0.0.1で接続できるようにユーザー権限の付与をします。

# 権限付与
mysql > GRANT ALL ON *.* TO $DB_USER@'127.0.0.1' IDENTIFIED BY 'root' WITH GRANT OPTION;

# 確認
mysql > SHOW GRANTS for $DB_USER@'127.0.0.1';
+---------------------------------------------------------------------+
| Grants for $DB_USER@127.0.0.1                                       |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO $DB_USER@'127.0.0.1'WITH GRANT OPTION|
+---------------------------------------------------------------------+

# 有効化
mysql > FLUSH PRIVILEGES;

さいごに

ツイッター(@nishina555)やってます。フォローしてもらえるとうれしいです!

nishina555
Webデベロッパーです。現在は業務委託で仕事をしています。サーバーサイドがメイン。Rails/React/Redux/Node/GraphQL/AWS。大学院時代は自然言語処理の研究を行っていました。
https://nishinatoshiharu.com/
onecareer
ワンランク上のキャリアを目指す学生のための新卒採用サービスONE CAREERの開発・運営会社
https://www.onecareer.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした