0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Access denied for user 'sail'@'%' to database のエラー解消

Posted at

1. はじめに

Laravel で sail を使って開発をしている際にハマったエラーについて、解決策をまとめます。
Laravel は、 PHP のフレームワークで、sail とは、Laravel での開発を簡単にスタートできるように準備された公式の Docker 環境です。sail を使用して複数のプロダクトを開発している方のお役に立てれば幸いです。

目次

1.はじめに
2.使用環境
3.エラー発生状況
4.試したこと
5.結論

2. 使用環境

  • MacBook Air : M2チップ / 16 GB
  • PHP : 8.2.14
  • Laravel Framework : 10.39.0
  • My SQL : 8.0.32
  • PHP My Admin : 5.2.1
  • Docker :
Client:
 Cloud integration: v1.0.35+desktop.5
 Version:           24.0.7
 API version:       1.43
 Go version:        go1.20.10
 Git commit:        afdd53b
 Built:             Thu Oct 26 09:04:20 2023
 OS/Arch:           darwin/arm64
 Context:           desktop-linux

Server: Docker Desktop 4.26.0 (130397)
 Engine:
  Version:          24.0.7
  API version:      1.43 (minimum version 1.12)
  Go version:       go1.20.10
  Git commit:       311b9ff
  Built:            Thu Oct 26 09:08:15 2023
  OS/Arch:          linux/arm64
  Experimental:     false
 containerd:
  Version:          1.6.25
  GitCommit:        d8f198a4ed8892c764191ef7b3b06d8a2eeb5c7f
 runc:
  Version:          1.1.10
  GitCommit:        v1.1.10-0-g18a0cb0
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

3. エラー発生状況

Laravel の学習をしていて、sail を使用しプロジェクトを2つ作成しました。2つのプロジェクトを切り替えて作業しようとしたところ、My SQL のエラーが発生するとともに、PHP My Admin で表示される内容がおかしいことに気づきました。

タイミング

sail downでプロジェクト A の sail を停止し、プロジェクト B のディレクトリに移動。sail up -dでプロジェクト B
の sail を起動し、localhostにブラウザで接続した時。

エラーメッセージ

データベースにアクセスできないようです。

lluminate \ Database \ QueryExceptionPHP 8.2.1410.38.2
SQLSTATE[HY000] [1044] Access denied for user 'sail'@'%' to database 'example_app'
SELECT count(*) AS aggregate FROM `articles`

スクリーンショット 2024-01-04 12.52.09.png
example_app はデータベース名です。

PHP My Admin の挙動

プロジェクト B で sail を起動しているにも関わらず、locahost:8080に接続して PHP My Admin にログインすると、プロジェクト A のデータベースが表示される。

プロジェクト A の sail はもう停止しているのに、どうして A のデータベースに接続するんだろう?と、はてなでいっぱいでした。

4. 試したこと

  • プロジェクト B の sail を一度停止して、起動し直す。
    →改善せず。

  • プロジェクト B の sail を停止し、プロジェクト A の sail を起動。改めて sail を停止する。
    →改善せず。

  • .env ファイルの DB 環境変数の確認
    →正しく設定されている。

  • マイグレーションの反映 sail artisan migrate
    以下のエラー発生。
    スクリーンショット 2024-01-04 21.05.13.png

  • ボリュームの削除 sail down -v
    参考資料 : Laracasts
    スクリーンショット 2024-01-04 12.56.37.png
    -v オプションをつけたことで、 volume も削除されたことが分かります。
    この後改めてsail up -dで sail を起動したところ、ようやくプロジェクト B のデータベースにアクセスすることができ、localhostもエラーなく表示されました。

5. 結論

Laravel sail で My SQL 周りの挙動がおかしい時には、ボリュームの削除で解決することがあると分かりました。ただ、ボリュームを削除するということは、データベースの中のデータが消えてしまうということなので、ご注意ください。特に問題ない場合は、ボリュームを削除した上で、また sail artisan migrate でテーブルを作成した上で、ダミーデータの挿入を行ってください。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?