【Laravel】MySQLの接続方法を徹底解説【コピペでOK】

技術メモ

今回はこれからLaravelを使用する人に向けて、DB(データベース)の接続方法を一から解説していきます。

コードはなるべくコピペできるように、全て掲載するようにします。

 

今回はローカル環境でMySQLを使用したいと思います。

 

それでは始めましょう!

 

開発環境

  • MacBook Pro (macOS Catalina バージョン10.15.2)
  • PHP 7.3.9
  • Laravel Framework 6.13.1
  • MySQL バージョン8.0.19

Composer、Homebrewはすでにインストールしているとします。

 

DB接続の前準備

すでにプロジェクトを作成している場合は省略して次に進んでください。

新規プロジェクト作成

まずは新規プロジェクトを作成します。

ターミナル

composer create-project --prefer-dist laravel/laravel SampleApp

 

 

プロジェクトのカレントディレクトリに移動して、ローカル開発サーバを立ち上げます。

ターミナル

php artisan serve

 

.envのAPP_URLにポート番号を追加しておいてください。

APP_URL=http://localhost:8000

 

http://127.0.0.1:8000にアクセスします。

ページが正常に表示されていればOKです。

 

MySQLをインストール

まずはMySQLをインストールします。

今回はmacOS用パッケージマネージャーであるHomebrewを使用してインストールします。

すでにインストールが完了している人は次に進んでください。

 

ターミナルで以下のコマンドを入力してMySQLをインストールしてください。

brew install mysql

 

インストールが完了したらMySQLを起動します。

mysql.server start --skip-grant-tables

--skip-grant-tables をつけることでパスワードなしでログインが可能になります。

 

起動が完了したらルートユーザーで接続します。

mysql -uroot

 

ログインに成功すると以下のような表示になります。

 

Access denied for user 'root'@'localhost' (using password: NO)でログインできない場合

mysql -uroot を入力すると以下のエラーが出る場合があります。

 

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

 

この場合は一旦MySQLを停止して、再度起動します。

ターミナルで以下のコマンドを入力します。

brew services stop mysql
mysql.server start --skip-grant-tables
mysql -uroot

 

DBを作成する

ログインまで完了したら、Laravelで使用するDBを作成していきます。

 

まずは現在存在するDBを確認してみます。

以下のコマンドを実行します。

 

mysql

show databases;

 

 

ローカル環境に存在するDBの一覧が表示されました(ここで表示されるDBは個人の環境で異なります)。

 

確認できたところでDBを作成します。

以下のコマンドでDBを作成します。

 

create database SampleApp;

※SampleAppの部分は任意のDB名を入れてください

 

show databases; でDB一覧に先ほど作成したDB名があればOKです。

 

そのままrootユーザーのパスワードを変更します。

MySQLに接続した状態で以下のコマンドを入力します。

 

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'secret';

※rootユーザーのパスワードを「secret」に変更しています。

 

 

その後、MySQLの接続を終了してからMySQLを再起動します。

 

MySQL

exit

 

ターミナル

mysql.server restart

 

 

MySQLの認証プラグインを変更する

MySQL8.0以降デフォルトの認証プラグインは mysql_native_password から caching_sha2_password に変更されました。

しかしPHPの方ではまだサポートされていないため、認証プラグインを以前の mysql_native_password に戻します。

 

まずはMySQLに接続します。

 

ターミナル

mysql -uroot -p

 

パスワードを求めらるので「secret」と入力してエンター。

※文字を打っても表示されませんが気にせず入力してください。

 

 

MySQLに接続できたら、以下のコマンドで既存ユーザーの認証プラグインを確認してみます。

 

MySQL

SELECT user, host, plugin FROM mysql.user;

 

 

現在の認証プラグインが caching_sha2_password になっていることがわかります。

これを mysql_native_password に変更します。

以下のコマンドを入力します。

 

MySQL

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secret';

 

rootユーザーの認証プラグインを変更したので確認します。

 

mysql_native_password に変更されました。

 

Laravelの.envファイルを修正する

次にLaravelの.envファイルを修正します。

.envファイルの中にDBの設定を記載することで、正常に接続することが可能になります。

 

DB_DATABASEの値を先ほど作成したDB名に、DB_PASSWORDを先ほど設定した「secret」に変更します。

 

.env

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:/w6PLiX4uYRs4h/ZtQxXpUh28DCjiKyKhX1E+k036iM=
APP_DEBUG=true
APP_URL=http://localhost

LOG_CHANNEL=stack

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
# DB_DATABASE=laravel
DB_DATABASE=SampleApp
DB_USERNAME=root
DB_PASSWORD=secret

BROADCAST_DRIVER=log
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
MAIL_FROM_ADDRESS=null
MAIL_FROM_NAME="${APP_NAME}"

AWS_ACCESS_KEY_ID=
AWS_SECRET_ACCESS_KEY=
AWS_DEFAULT_REGION=us-east-1
AWS_BUCKET=

PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
PUSHER_APP_CLUSTER=mt1

MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"

 

.envファイルを修正した後は、キャッシュをクリアします。

 

ターミナル

php artisan config:cache

 

DB接続が完了!マイグレーションを実行してみる

これでDBとLaravelの設定が完了しました!

マイグレーションを実行してみて、DBにテーブルが作成されるか確認してみます。

 

ターミナル

php artisan migrate

 

 

 

マイグレーションが完了したのでDBを確認します。

まずはMySQLに接続します。

 

ターミナル

mysql -uroot -p

 

パスワードを求めらるので「secret」と入力してエンター。

※文字を打っても表示されませんが気にせず入力してください。

 

 

MySQLに接続できたら、以下のコマンドを入力します。

 

DB一覧を表示

show databases;

 

使用するDBを選択

use SampleApp;

 

テーブル一覧を表示する

show tables;

 

 

マイグレーションによってテーブルが作成されていることが確認できました!

 

【補足】作業中にエラーが発生した場合

基本的には手順通り進めていけば、エラーなくLaravelとDBの接続は完了すると思いますが、DBの設定中につまづきがちなエラーとその解消方をご紹介します。

 

php artisan migrateでSQLSTATE[HY000] [2002] Connection refusedが出る場合

これはDBに接続できていないエラーです。

以下の項目を確認してください。

 

・.envファイルのDB_DATABASE、DB_USERNAME、DB_PASSWORDにMySQLのDBと同じものが設定されているか。

・.envファイルを修正した後にキャッシュをクリアしたか。

・rootユーザーのパスワードを変更した際にMySQLを再起動したか。

 

 

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client が出る場合

これはPHPがMySQL8.0の認証プラグインに対応できていないことが原因です。

MySQLの認証プラグインを変更する の手順にしたがって、MySQLの認証プラグインを「caching_sha2_password」から「mysql_native_password」に変更してください。

 

 

今回はローカル環境で、LaravelとDBを接続する方法を説明しました。

今回の記事で分かりにくいところや、他にも解説して欲しい内容があれば、是非ともコメント欄やお問い合わせからメッセージをください!

 

これから「Laravelを勉強したい!」と考えている人は一冊書籍を持っておくと体系的に勉強できます。

Laravelを使用したアプリ開発を学ぶのであれば「青本」がおすすめです。

私もこの書籍から入りました!

 

 

「Webサービスを作りたい!」という方に向けて記事を書きました。

 

業務未経験からポートフォリオなしでWebエンジニアに転職した際の経験談を語りました。

技術メモ
スポンサーリンク
スポンサーリンク
のすけをフォローする
やばブロ!

コメント