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

以上です。

Follow me!