はじめに
こんにちは。
本日はMySQLでエラーが出て苦戦していたので備忘録として残そうと思います。
環境
環境は大事だったのでとりあえず記載します。
- OS
- MacOS
- MySQL
- 8.0.29
- docker-compose.yamlで環境作成
- アプリ
- Express(TypeScript)
エラー内容
タイトル通りですが以下のエラーが出ていました。
Unexpected error occurred Error: Access denied for user 'XXX'@'localhost' (using password: YES)
またコンソールでも以下が出ていました。
Failed to load resource: the server responded with a status of 500 (Internal Server Error) express
500のエラーが出ているということで、サーバー側のエラーなのは確かで次に記載していくが以下を試した。
試した内容
とりあえずググって以下を試したのですが、全てうまくいきませんでした。
対応1
一番最初に疑ったのがDockerに設定した内容とExpressに設定した内容が間違っている可能性が本当に間違っていないかを疑った。。。
が当然うまくいかない。もし違っていたら違うエラー出そうだし。。
対応2
volumesを破棄して新たに作成する
まずエラーでググると上記の対応が出ましたが。。うまくいかず。
一応Volumesの削除の方法は以下になります。
$ docker volume ls
$ docker volume rm ${Volume ID}
再度作成
$ docker-compose up -d
これで行くかも!と思ったがダメだった。。
対応3
Servicesの修正
正直エラーだけでは原因が全然わからなかったので、とりあえず試せることを試そうと思い。
docker-compose.ymlのservicesに関係があるのかと以下を確認
ちなみにservicesは以下で作成していた。
services:
mysql:
image: mysql:8.0.29
platform: linux/x86_64
ports:
- 3306:3306
portの修正
ポート3306を変えたらできたという記事が出たのでとりあえず試してみることに
とりあえず以下に修正。
ports:
- 3307:3306
当然ダメでした。。笑
platformの修正
platform: linux/x86_64だと起動しないという記事を発見したのでとりあえず
platformを削除して確認。あまり期待はしていなかったがとりあえず試せる方法は片っ端に試すことにだが当然うまくいかず。
対応4
色々と漁っていると一つの記事があった。
内容はというと、もともと別で入れたMySQLとDocker環境のMySQLがある場合は別環境のMySQLを参照しようとしてエラーが起きているという記事を発見。私の環境ではhomebrewから入れたMySQLがあったためMySQLを切断することに以下コマンドを実行。
mysql.server stop
そして念の為に再度、対応2をおこなったがダメだった
※この対応4については後ほどもう一度話をさせていただきます
解決方法
色々失敗方法を試しましたが、ここからは解決方法をお話しします。
今回のエラーの原因は対応4の原因が近くhomebrewのMySQLが起動しており、docker-composeのMySQLではなくhomebrewのMySQLを見に行っていたためにエラーが起きていたようです。
でも対応4でMySQLの接続を切ったのではないの?と思った方私も思いました。
それで以下を追加で試してみました。
// ここでMySQLを切断
$ mysql.server stop
// 接続状況を確認
$ mysql.server status
すると切断のコマンドを叩いてはいるのだが、ステータス状況を確認すると切断されていない
あれ。。と思いhomebrewのMySQLは切断方法は違うのかと再度検索すると記事が出てきた。homebrewから導入したMySQLは切断方法が違うらしい。。。
以下のコマンドを叩いた
※@5.6は導入しているバージョンなので自分のバージョンに合わせてください。
brew services stop mysql@5.6
するとエラーが解消した。
(すごく疲れた。。。)
最後に
MySQLって環境の違いでコマンド違うんですね。
あまり考えていなかったので、そういうこともあるんだなと思いました。
またdocker導入すると今回のように既存からあるものを参照することもあるんだなと知りました。
あまりdockerは使用しないので色々と勉強になりました。
最後までご覧いただきありがとうございました。