備忘録 〜プログラミング〜

プログラミングに関する事をつらつらと、、

play frameworkでCannot connect to database [default]エラー

mysqlをアンインストールして再インストール後、play frameworkでrunしたときに、データベースに接続出来ないエラーが発生しました。

application.confのDB設定はこんな感じ

db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost/{db_name}/"
db.default.user={user_name}
db.default.password={password_}

 

$ mysql -u {user_name} -p

でログインも出来るし、DBも作ってるのにエラーがなくならない。

そこで、コンソールのエラーを見てみると、以下のエラーが

Caused by: java.sql.SQLException: Access denied for user '{user_name}'@'127.0.0.1' (using password: YES)

localhostと、127.0.0.1の違いをはっきりわかっていなかったので違いを検索

MySQLでlocalhostと127.0.0.1の違い - Qiita

全然違うみたいですね。

とりあえず、127.0.0.1mysqlにログイン出来るか確認

$ mysql -h 127.0.0.1 -u {user_name} -p

パスワードを入力。

が、ログイン出来ず。

これは!と思い、色々検索してると、stackoverflowでこんな解答を発見


java - Access denied for user 'root'@'localhost' - Stack Overflow

root@'%'が権利を持っていない。

確かに、mysql

mysql> SELECT host, user FROM mysql.user

確認しても{user_name}のホストはlocalhostのみで127.0.0.1のホストはなし。

とりあえず、'%'はipアドレスワイルドカードのようなので、以下を実行

mysql> GRANT ALL PRIVILEGES ON *.* TO {user_name}@'%' IDENTIFIED BY '{password}' WITH GRANT OPTION;

その後、再度play runをしてアクセスすると、無事データベースにアクセスする事が出来ました。