Laravel Sail v11でMySQLに接続できないときの対応策
-いきなり躓かないために-
フレームワークはDBを扱うクラスや環境設定が最初から用意されているので、MySQLに接続するのも簡単と思っていたのですが、最新のLaravel Sailを使った時、いきなり接続エラーが出て困りましたので、その対策についての覚書です。
Laravel Sailはデフォルトmysqlが使えるように設定されています。大きな変更はないはずです。
.env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
# ↓ ローカル環境でmysqlが起動している時は追加
FORWARD_DB_PORT=3307 # 今回は追加
DB_DATABASE=gundb # データベース名
DB_USERNAME=sail
DB_PASSWORD=password
試しに、"./vendor/bin sail up -d"として起動しました。
localhost:8573
環境によってどんなエラーが表示されるか分かりませんが、似たようなエラーが表示されると思います。まずどんな状況かLaravel sailコマンドでmysqlに入り確認してみます。
今まで起動しているコンテナIDやコンテナ名を探して、"docker exec -it <コンテナ名> bash"としてコンテナ内部に入ってコマンド打っていましたが、Laravelに専用のコマンドがありますので、今回はそちらを使っていきます。
VSCodeのターミナルから、"./vendor/bin/sail mysql <DB名前>"と入力しましょう。
mysqlに接続
./vendor/bin/sail mysql gundb
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
--省略--
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| gundb | <←DBが作成されている>
| information_schema |
| performance_schema |
| testing |
+--------------------+
4 rows in set (0.00 sec)
mysql> select database();
+------------+
| database() |
+------------+
| gundb | <←接続もされている>
+------------+
1 row in set (0.00 sec)
# テーブルはあるのかと言うと...
mysql> show tables;
Empty set (0.01 sec) -- 空っぽです
mysql>quit #← ひとまず抜けます
そこで、sessionテーブルを作成することに。
コマンド実行
./vendor/bin/sail artisan session:table
INFO Migration created successfully.
./vendor/bin/sail artisan migrate
INFO Preparing database.
Creating migration table
................. 1秒 DONE
INFO Running migrations.
................. 1秒 DONE
テーブルが出来たか確認します。
テーブルの確認
./vendor/bin/sail mysql gundb
---省略----
mysql>
mysql> show tables;
+------------------+
| Tables_in_gundb |
+------------------+
| migrations |
| sessions | <←session テーブルが作成されている>
+------------------+
2 rows in set (0.01 sec)
その後、laravel Sailを再起動すると、無事起動できました。
localhost:8573
以上です。