👏

【MySQL】ActiveRecord::ConnectionNotEstablished: Access denied を解消したい

2021/01/23に公開

はじめに

発生したエラー

ActiveRecord::ConnectionNotEstablished: Access denied for user 'wdyluser'@'localhost' (using password: YES)

Mysql2::Error::ConnectionError: Access denied for user 'wdyluser'@'localhost' (using password: YES)

結論

config/database.yml

password: 00000
↓
password: "00000"

結論:config/database.ymlに設定するパスワードは" "(または ' ' )で囲わないといけません、、、

前ふり

前提

railsでアプリを作っており、DBは、初めはSQLiteを使ってましたが、MySQLへ移行することとなりました。
その移行の際に、おもいっきりハマりましたので、同じような方の手助けとなるべく、この記事を書きます。

環境

macOS BigSur 11.1
mysql Ver 8.0.23
ruby 2.7.0p0
Rails 6.1.1

実践

このRailsのDBを(初めから| |後から)MySQLに変更するを参考に進めていきます。
(とても参考になりました)

MySQLをGemfileに加える

Gemfile

gem 'mysql2'
# gem 'sqlite3', '~> 1.4'


bundle install

config/database.ymlに設定を書く

※MySQL側で作成した、databaseやusername,passwordなどを記述します(前もって作っておきます)
config/database.yml

default: &default
  adapter: mysql2
  database: wdyldb
  username: wdyluser
  password: 00000 ← ※間違っています
  host: 127.0.0.1
  encoding: utf8

development:
  <<: *default

test:
  <<: *default

production:
  <<: *default

db:migrateの実行

bundle exec rails db:migrate

を実行する、、、
しかし、

ActiveRecord::ConnectionNotEstablished: Access denied for user 'wdyluser'@'localhost' (using password: YES)

Mysql2::Error::ConnectionError: Access denied for user 'wdyluser'@'localhost' (using password: YES)

このエラーが発生、、、

試したこと

  • MySQLにログインできるか
mysql -uwdyluser -p00000


できた(usernameとそのパスワードは正しい)

  • DBは存在しているか
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| wdyldb             |
+--------------------+
2 rows in set (0.00 sec)


存在する

  • userは存在しているか、また、権限はあるか
mysql> show grants for wdyluser@localhost;
+--------------------------------------------------------------+
| Grants for wdyluser@localhost                                |
+--------------------------------------------------------------+
| GRANT USAGE ON *.* TO `wdyluser`@`localhost`                 |
| GRANT ALL PRIVILEGES ON `wdyldb`.* TO `wdyluser`@`localhost` |
+--------------------------------------------------------------+


存在している、権限もある

解決方法

config/database.yml

password: 00000
↓
password: "00000"

パスワードを" "で囲ったらマイグレーションが通りました!

時間を無駄にした感がすごかったので、私のような人が減るように、共有します!

Discussion