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