MySQLデータベースを使ってLaravel構築 in Mac
Mac環境へMySQLとLaravelのインストールを行い、MySQLとLaravelとの接続完了後にSequel ProをインストールしてGUIでMySQLデータベースの中身を確認します。この文書を一通り読み終えるとMySQL+Laravel環境の構築手順を理解することができます。
動作確認を行ったバージョンは下記の通りです。
- macOS : Mojave 10.14.5
- PHP : 7.1.23
- MySQL : 8.0.16 or 5.7.25
- Laravel : 5.8
- Sequel Pro : 1.1.2
※執筆時、Sequel ProからMySQL 8への接続には、Sequel Proのnightly buildが必要となるので、Sequel Proとの接続時にはMySQL 5.7を利用しています。 Sequel ProはMySQL8の接続をサポートしていないようなので後継のSequel AceまたはTable Plusを利用することでMySQL8を管理することができます。
MySQLのインストールと設定
Mac購入直後、インストール直後のmacOSにはMySQLがインストールされていないため、インストールを行う必要があります。MySQLのインストールには、Homebrewを利用して行います。
HomebrewもMacにはインストールされていないため、まずHomebrewのインストールから行う必要があります。
Homebrewのインストール
HomebrewはMac上で動作するパッケージマネージャー(ソフトウェアを管理するツール)です。インストール、アンインストールを含めたパッケージ管理をコマンドラインで行うことができます。
本文書では簡単にHomebrewのインストール手順を紹介しています。より詳細なHomebrewのインストール方法や使用方法下記の文書を参考にしてください。
Homebrewのサイトにアクセスし、トップ画面に表示されているスクリプトをコピーしてターミナルにペーストするとインストールが開始します。
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
==> Installation successful!
==> Homebrew has enabled anonymous aggregate formulae and cask analytics.
Read the analytics documentation (and how to opt-out) here:
https://docs.brew.sh/Analytics
==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
https://github.com/Homebrew/brew#donations
==> Next steps:
- Run `brew help` to get started
- Further documentation:
https://docs.brew.sh
インストールが成功し、メッセージに”Run brew help”が表示されるので実行します。
brew helpで下記の画面が表示されれば、Homebrewのインストールは完了です。
$ brew help
Example usage:
brew search [TEXT|/REGEX/]
brew info [FORMULA...]
MySQLのインストール
Homebrewのインストールが完了したので、Homebrewを利用してMySQLのインストールを行います。
brew install mysqlでインストールが開始されますが、MySQLをインストールするだけではなくHomebrewの更新やFormulaeの更新、MySQLと依存関係にあるopensslもインストールされます。Homebrewを暫く利用していない場合などは時間がかかるかもしれません。
$ brew install mysql
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> Updated Formulae
arangodb gpsbabel sslsplit
fuseki hyperfine youtube-dl
geoipupdate mariadb-connector-c
gitlab-runner prototool
==> Installing dependencies for mysql: openssl
==> Installing mysql dependency: openssl
インストールログがターミナルに表示されますが、インストールの最後にmysqlの使用方法について説明が記述されているので確認しておきましょう。
==> mysql
We've installed your MySQL database without a root password. To secure it run:
mysql_secure_installation
MySQL is configured to only allow connections from localhost by default
To connect run:
mysql -uroot
To have launchd start mysql now and restart at login:
brew services start mysql
Or, if you don't want/need a background service you can just run:
mysql.server start
日本語訳は下記のようになります
- rootのパスワードを設定なしでインストールを行ったので、セキュリテイを高めるためには、mysql_secure_installationを実行してください。
- MySQLはデフォルトでlocalhostからの接続だけ許可するように設定されています。接続するためには、mysql -urootを実行してください。
- mysqlを起動時に自動起動するためには、brew services start mysqlをバックグランドサービスとしてではなくただ起動したい場合は、mysql.server startを実行します。
本文書ではmysql_secure_installationを実行しませんが、実際に運用する場合はmysql_secure_installationを実行してください。
MySQLの起動・停止・ステータス確認
MySQLのインストールが完了したので、起動、停止、ステータスの確認方法を確認しておきます。
MySQLの起動は、mysql.server start、停止する場合はmysql.server stopを実行します。
// 起動する場合
$ mysql.server start
Starting MySQL
... SUCCESS!
// 停止する場合
~ $ mysql.server stop
Shutting down MySQL
.. SUCCESS!
起動・停止のステータス確認には、mysql.server statusを実行します。
// 停止している場合
$ mysql.server status
ERROR! MySQL is not running
// 起動している場合
$ mysql.server status
SUCCESS! MySQL running (13066)
MySQLのバージョンの確認
インストールされているMySQLのバージョンはmysqld –versionで確認することができます。下記はver 8.0.16がインストールされていることになります。
~ $ mysqld --version
/usr/local/Cellar/mysql/8.0.16/bin/mysqld Ver 8.0.16 for osx10.14 on x86_64 (Homebrew)
MySQLへの接続
Homebrewでインストールした場合、MySQLのrootユーザのパスワードは設定されていないため、mysql -u rootコマンドで行います。
~ $ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.16 Homebrew
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysqlのrootのパスワードを設定している場合は、mysql -u root -pのあとにパスワードを入力する必要があります。
データベースの作成
MySQLへ接続できることが確認できたので、Larvelで使用するデーベースの作成を行います。データベース名はlaravel58としています。任意の名前を設定してください。
データベースの作成はMySQLへの接続を行ったあとに実行してください。
mysql> create database laravel58;
Query OK, 1 row affected (0.08 sec)
show databasesコマンドで作成したデータベースを確認することができます。
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| laravel58 |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
MySQLのポートの確認
Laravelでデータベースを設定する際にMySQLで使用するポートの設定も行います。ポート設定の確認方法は以下となります。デフォルトではポート番号3306を使用します。
Laravelの初期設定でもポートは3306に設定されているのでポートの確認だけでこの確認でなにか設定を変更することはありません。
mysql> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
1 row in set (0.01 sec)
Laravelのインストール
Laravelで使用するデータベースの作成が完了したので、Laravelのインストールを行います。インストールはcomposerを利用して行います。
$ composer create-project --prefer-dist laravel/laravel laravel58
MacでのLaravelインストールまでに行う詳細な設定手順は下記を参考にしてください。
php artisan serveコマンドを実行して、http://127.0.0.1:8000にアクセスを行い下記の画面が表示されることを確認してください。
MySQLへのアクセス
Laravelをインストールしただけでは事前に作成したMySQLへ接続を行うことはできません。データベースの接続情報はLaravelインストールディレクトリ下にある.envファイルに記述されているため、環境に合わせた設定に変更を行う必要があります。
.envファイルに記述されている中でデータベースに関する設定は以下となります。DB_DABASEは作成したデータベースの名前、DB_USERNAMEとDB_PASSWORDはMySQLのユーザの名前とパスワードを設定する必要があります。本環境ではユーザ名はroot、パスワードはありません。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret
変更後のファイルは以下のようになります。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel58
DB_USERNAME=root
DB_PASSWORD=
MySQLユーザの作成
root以外のユーザで作成したデータベースに接続したい場合はMySQLユーザの作成と作成したユーザへのデータベースへのアクセス権限を与えます。
CREATE USER laravel58 IDENTIFIED BY 'password'
GRANT ALL PRIVILEGES ON `laravel58`.* TO 'laravel7'@'localhost';
新しいユーザを作成したコマンドラインでMySQLのデータベースに接続できることを確認して.envファイルのデータベースの接続に関する環境変数を作成したユーザ情報に変更します。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel58
DB_USERNAME=laravel58
DB_PASSWORD=password
テーブルの作成
Laravelではインストール直後でもphp artisan migrateコマンドを実行するとデータベースにusers, password_resetsテーブルを作成することができます。
users, password_resetsは事前に備わっているユーザ認証機能に使用するテーブルです。
laravel58 $ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table
しかし実行時に以下のエラーメッセージが発生した場合は、php artisan migrateコマンドでテーブルを作成することができません。
$ php artisan migrate
Illuminate\Database\QueryException : SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client (SQL: select * from information_schema.tables where table_schema = laravel58 and table_name = migrations and table_type = 'BASE TABLE')
・
・
1 PDOException::("PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]")
原因は、MySQL8のパスワード検証プラグインがcaching_sha2_passwordに設定されており、PHPのデータベース接続用のPDOドライバが未対応のためです。パスワード検証プラグインを以前の方式に変更することでこの問題を回避することができます。
パスワードプラグインの変更方法
※php artisan migrateが正常に動作した場合はスキップしてください。
パスワードプラグインを変更する前に現在の認証方式には何が設定されているのか確認を行っておきます。mysql.userテーブルからpluginをselectすると確認できます。データベースでアクセスするuser, host, pluginを確認してください。本環境ではrootユーザのpluginがcaching_sha2_passwordになっていることを確認します。
mysql> select user, host, plugin from mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
以下のalter userコマンドを実行するとパスワードプラグインを変更することができます。
alter user ユーザ名 identified by mysql_native_password by パスワード;
本環境ではパスワードを使用しないため、”(ブランク)にしています。
mysql> alter user root@localhost identified with mysql_native_password by '';
Query OK, 0 rows affected (0.05 sec)
変更が反映されているか確認を行います。rootユーザのpluginがmysql_native_passwordに変更されていれば、変更は完了しています。
mysql> select user, host, plugin from mysql.user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
| root | localhost | mysql_native_password |
+------------------+-----------+-----------------------+
作成したテーブルの確認
php artisan migrateコマンドで作成されたuserテーブルが作成されているのか確認します。
$ mysql -u root
ログイン後、データベースを選択して、show tablesコマンドを実行します。migratonsテーブルはphp artisan migrateを使用して作成してテーブルの情報が登録されるテーブルです。migrations以外にusersとpassword_resetsが表示されることを確認してください。
mysql> use laravel58
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+---------------------+
| Tables_in_laravel58 |
+---------------------+
| migrations |
| password_resets |
| users |
+---------------------+
Sequel Proのインストール
Sequel Proの後継のSequel Aceのインストール方法について次の章で説明を行っています。
ここまではコマンドを利用してデータベースの情報を取得してきました。コマンドを実行することですべての情報を取得することができますが、効率的ではありません。そのため、データベース管理ソフトであるSequel Proのインストールを行いGUIでデータベースの管理を行います。
Sequel ProでMySQL8に接続するには、nightly buildを使用する必要があります。Sequel Pro以外にもTablePlusといったツールが存在します。こちらも使い易いGUIツールです。
特に開発時にはアプリケーションから正常にデータが挿入されているかの確認やダミーのデータ挿入/削除を簡単に行うことができるので重宝します。
Homebrewを利用してSequel Proのインストールを行います。
$ brew cask install sequel-pro
==> Satisfying dependencies
==> Downloading https://github.com/sequelpro/sequelpro/releases/download/release
Already downloaded: /Users/reffect/Library/Caches/Homebrew/downloads/8b2af6c2be31a86ac4b9efca5d7ea014fd3fcab9f05e589d0041097cd916f0d3--sequel-pro-1.1.2.dmg
==> Verifying SHA-256 checksum for Cask 'sequel-pro'.
==> Installing Cask sequel-pro
==> Moving App 'Sequel Pro.app' to '/Applications/Sequel Pro.app'.
🍺 sequel-pro was successfully installed!
データベースへの接続
インストール完了後、アプリケーションからSequel Proを起動します。初回起動時には下記のメッセージが表示されるので、開くボタンをクリックしてください。
データベースへの接続画面は以下のとおりです。
Laravelのenvファイルで記述した内容を入力してください。接続情報を保存するために”お気に入りに追加”ボタンを押してください。
左側のFAVORITESの下に登録した情報が表示されます。接続ボタンをクリックするとデータベースへ接続を行うことができます。
接続したデータベースLaravel58には3つのテーブルがあることを確認できます。
テーブルの中身の確認
laravel58データベースには、3つのテーブルがあることが確認できましたが、migrations以外のテーブルには何もデータがありません。
下記のように左のテーブルからmigrationsを選択して、赤で囲んだ内容を選択してください。migrationsテーブルの中のデータを確認することができます。
usersテーブルへのデータ挿入
Sequel Proではデータの挿入も簡単に行うことができます。usersテーブルを開いて行をダブルクリックすると入力モードになり行を追加することができます。
Sequel Aceのインストール
Sequel Proの開発が行われていないためMySQL8への接続ができないのでその後継であるSeqeul Aceのインストールを行います。Sequel Proと同様にHomebrewを利用してSequel Aceのインストールを行います。
% brew install --cask sequel-ace
データベースへの接続
インストール完了後、アプリケーションからSequel Aceを起動します。下記の画面が表示されるので”開く”をクリックしてください。
Sequel Aceが起動するとデータベースへの接続の入力画面が表示されます。
Hostに127.0.0.1とUsernameにrootを入力して”Connect”ボタンを押してください。
データベースへの接続が完了すると下記の画面が表示されます。上部にあるChoose Databaseを選択することでデータベースを選択することができます。