MAMP環境でのLaravelとMySQLの接続エラー


今まではSQLiteを使用していましたが、今回はMySQLを使用することにしました。
しかし、開始早々接続エラーで苦戦したので、こちらに解決方法を記載しておきます。

環境

MAMP
OS:macOS
Laravel:8.51.0
PHP:7.4.12
MySQL:5.7.32

エラー画面

phpmyadminでDBを作り、いざ接続しようとしたらこのエラーが出ました。
「Connection refused」ということで、うまく接続できていないようです。

どうやら.envファイルとdatabase.phpファイルの記述が間違えているようでした。

MAMPの情報を確認する

MAMPを起動した際に、こちらのページが表示されます。

こちらのページの下の方に「MySQL」という項目があるのでクリックします。

するとこちらの情報が出てきます。
このportUsernamePasswordSocketがこのあと必要になるので、メモ等に控えておきます。

.envファイルの修正

修正前の記述がこちらです。

.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=

この中のDB_PORT、DB_USERNAME、DB_PASSWORDを先ほどメモしたものに変更します。
そして新たにDB_SOCKETの記述を追加します。
DB_DATABASEは自分で作成したデータベース名を入れます。

修正したものがこちらです。

.env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=8889
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
DB_DATABASE=データベース名
DB_USERNAME=root
DB_PASSWORD=root

database.phpの修正

次にdatabase.phpを修正します。
database.phpはconfigファイル内にあります。
その中でmysqlの記載部分を探します。

修正前がこちら。

.database.php
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),

第2引数部分を、メモした通りに変更します。
databaseは先ほど同様、自分で作成したデータベース名を入れます。

.database.php
'port' => env('DB_PORT', '8889'),
'database' => env('DB_DATABASE', 'データベース名'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', 'root'),

以上を変更して、再起動をしてから再接続したところ、無事DB接続することができました。

ちなみにポート番号を変更するには?

今回DBの接続するにあたり、ポートが初期値のままだったことに気づきました。
MAMPのデフォルトのポートはApacheが8888、MySQLが8889です。

変更するにはMAMPのPreferencesのこちらの画面で変更することができます。

一般的なポートの設定をするにはSetWeb&MySQL Ports toの「80 & 3306」を押します。
するとApacheが80、MySQLが3306に変わります。
そうすることで、ローカル環境で接続する際に、URLが「http://localhost:8888/」から「http://localhost/」に変わります。

ちなみにデフォルトの番号に戻したいときは「MAMP default」で元に戻ります。

ポート番号を変更した際は、上記の.envdatabase.phpの記載の修正を忘れずに。