調べるとAccess denied for user 'root'@'localhost' (using password: NO)の対処はたくさん出てくるけど、Access denied for user 'root'@'localhost'で終わっているエラーはすぐに出てこないので自分用に残します。
対処法
mysqlにユーザーを指定してログイン。
別のマシンでサーバーが動いていたら、ホスト名も指定する。
パスワード入力を求められるので、パスワードを覚えていたら入力。
間違えて何度もエラーが出るなら頭にsudo付けたら入れる。
$ mysql -u root -p
任意のユーザー名とパスワードを入力する。
ここではユーザーに全てのDB操作権限を付与している。
*.*にDBの名前を入れる。
大文字小文字区別しないので小文字でもいい。
私の場合は既存のユーザーに権限付与したので、存在しないユーザーを指定したらユーザー作成から始めないといけないかもしれない。
mysql> GRANT ALL PRIVILEGES On *.* TO ユーザー名@localhost IDENTIFIED BY ‘パスワード’;
このあとにrails db:createしても同じエラーが出たので,database.ymlを修正。
usernameとpasswordに先程作成した任意のユーザー名とパスワードを入力。
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: ユーザー名
password: パスワード
socket: /var/run/mysqld/mysqld.sock
development:
<<: *default
database: hoge_development
test:
<<: *default
database: hoge_test
production:
<<: *default
database: hoge_production
username: hgoe
password: <%= ENV['HOGE_PASSWORD'] %>
$ rails db:create
Created database 'hoge_development'
Created database 'hoge_test'
上手く行きました。
ちなみに表示されるプロンプトの意味
| 促す | 意味 |
|---|---|
| mysql> | 新しいクエリの準備ができました |
| -> | 複数行クエリの次の行を待機しています |
| '> | 一重引用符(')の完了を待つ |
| "> | 二重引用符(")の完了を待つ |
| `> | バックティック(`)の完了を待つ |
| /*> | コメント(/*)の完了を待つ |