Go製のDBマイグレーションツールgooseを使用してMySQLコンテナに疎通をしたかったのですが、以下のエラーが表示され、疎通確認がうまくいきませんでした。
エラー内容
MySQLに接続出来ない。パスワードが違うようです。
あってるんだけど何故!?
Received #1045 error from MySQL server: "Access denied for user 'root'@'localhost' (using password: YES)"
エラー原因
原因としてはいくつか考えられますが、今回は1番の場合でした。他にも試したので可能性として全部記載しておきます。
エラー原因1.ホストでポートを使用している
macで3306ポートを使用している処理を確認
$ sudo lsof -i:3306
mysqlサーバが稼働していました。macで3306ポートを使用していた為、これを以下のコマンドで停止しました。sudoをつけないと止まらなかったです。
$ sudo mysql.server stop
以下のコマンドで停止確認します。
$ mysql.server status
もしこれで止まらなかったら、以下も試してみてください。
$ mysql.server stop
$ brew services stop mysql
エラー原因2.goose の設定ファイル dbconf.yml 誤り
書き方は以下の2通りあり、どちらでも動きました。
何故mymysql?と思いましたが大丈夫でした。
development:
driver: mymysql
open: tcp:localhost:3306*dmm_aff/root/pass
development:
driver: mysql
open: root:pass@tcp(127.0.0.1:3306)/dmm_aff
localhostを指定する場合は、hostsファイルにlocalhost設定をしておく必要があります。以下記事参考。
エラー原因3.パスワードが間違えている
MySQLのパスワードを確認してください。
goose状況確認
$ goose status
これでエラーにならなくなったので、gooseからMySQLの疎通確認が取れました。

