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.1でmysqlにログイン出来るか確認
$ 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をしてアクセスすると、無事データベースにアクセスする事が出来ました。