Laravelのプロジェクトを使っているときに、データベースとしてMySQLを使いたいことがあります。
ここではMySQLとLaravelを接続する方法を実例で解説してます。
mysqlの存在確認
$ mysql --version
実例
$ mysql --version
bash: mysql: command not found
インストールされていないので情報がない。
mysqlの現在のバージョンを確認
$ brew info mysql
でmysqlの基本情報を確認できる。ローカルにインストールしたものではなく、公式の安定版情報をとってくる。
$ brew info mysql
(スキップしても問題ないが、参考として)
実例
$ brew info mysql
mysql: stable 8.0.23 (bottled)
Open source relational database management system
MySQL :: MySQL 8.0 Reference Manual
Conflicts with:
mariadb (because mysql, mariadb, and percona install the same binaries)
percona-server (because mysql, mariadb, and percona install the same binaries)
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/mysql.rb
License: GPL-2.0-only
==> Dependencies
Build: cmake ✘
Required: openssl@1.1 ✔, protobuf ✘
==> Caveats
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
==> Analytics
install: 79,163 (30 days), 231,779 (90 days), 835,371 (365 days)
install-on-request: 77,990 (30 days), 228,357 (90 days), 813,893 (365 days)
build-error: 0 (30 days)
$ mysql --version
bash: mysql: command not found
上記の場合安定版は8.0.23
とのこと。
MySQLのインストール
$ brew install mysql
実例
$ brew install mysql
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> New Formulae
curlie dasel ht-rust
==> Updated Formulae
Updated 904 formulae.
==> Downloading https://homebrew.bintray.com/bottles/protobuf-3.14.0.catali
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/8d53111626404e2b
==> Downloading https://homebrew.bintray.com/bottles/mysql-8.0.23.catalina.
==> Downloading from https://d29vzk4ow07wi7.cloudfront.net/308601d9802846e2
==> Installing dependencies for mysql: protobuf
==> Installing mysql dependency: protobuf
==> Pouring protobuf-3.14.0.catalina.bottle.1.tar.gz
==> Caveats
Emacs Lisp files have been installed to:
/usr/local/share/emacs/site-lisp/protobuf
==> Summary
🍺 /usr/local/Cellar/protobuf/3.14.0: 211 files, 17.8MB
==> Installing mysql
==> Pouring mysql-8.0.23.catalina.bottle.tar.gz
==> /usr/local/Cellar/mysql/8.0.23/bin/mysqld --initialize-insecure --user=
==> Caveats
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
インストールされたか確認。
$ mysql --version
mysql Ver 8.0.23 for osx10.15 on x86_64 (Homebrew)
以上でインストール完了。
MySQLサーバーの起動
$ mysql.server start
実例
$ mysql.server start
Starting MySQL
.. SUCCESS!
MySQLにログイン(対話モード)
$ mysql -uroot
-uroot
はrootユーザーとしてログインするという意味。
実例
$ mysql -uroot
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.23 Homebrew
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
DBの確認
mysql> show databases;
対話モードのコマンドは末尾に;
が必要。
実例
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
DBの作成
create database DB名
実例
mysql> create database SampleApp;
Query OK, 1 row affected (0.00 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| SampleApp |
| sys |
+--------------------+
5 rows in set (0.00 sec)
パスワードの変更
パスワードの変更
ALTER USER <user> IDENTIFIED BY <auth_string>
- user: ユーザー
- auth_string: 新しいパスワード
- パスワードは
'
で囲む。 - ユーザー名は文字列以外(
@
など)を含む場合は'
で囲む。
実例
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'secret';
Query OK, 0 rows affected (0.00 sec)
MySQLの再起動
exit;
し、mysql.server restart
。
exit;
$ mysql.server restart
実例
mysql> exit;
Bye
$ mysql.server restart
Shutting down MySQL
. SUCCESS!
Starting MySQL
. SUCCESS!
MySQLにログイン
$ mysql -uroot -p
実例
$ mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.23 Homebrew
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
認証プラグインの確認と変更
SELECT user, host, plugin FROM mysql.user;
MySQLのデフォルトの認証プラグインはcaching_sha2_password
。PHPはこれに対応していないため、mysql_native_password
に変更する。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secret';
実例
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)
MySQLのデフォルトの認証プラグインはcaching_sha2_password
。PHPはこれに対応していないため、mysql_native_password
に変更する。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secret';
Query OK, 0 rows affected (0.00 sec)
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 |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
補足
PHP7.1.16, PHP7.2.4以降はcaching_sha2_password
対応との記述があったが、PHP7.3では実行できなかった、、
$ php artisan --version
Laravel Framework 8.23.1
$ php --version
PHP 7.3.11 (cli) (built: Jun 5 2020 23:50:40) ( NTS )
.envファイルの修正
DBの情報に合わせて、Laravelの.envファイルを修正する。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=SampleApp #DB名にする
DB_USERNAME=root
DB_PASSWORD=secret #設定したパスワードにする
キャッシュクリア
envファイルを修正した場合は、キャッシュクリアが必要。
$ php artisan cache:clear
実例
$ php artisan cache:clear
Application cache cleared!
マイグレーションの実行(MySQLにテーブルを作成する)
Laravel経由でMySQLにテーブルを作成する。(マイグレーションする)
$ php artisan migrate
実例
$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table (14.31ms)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table (10.49ms)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated: 2019_08_19_000000_create_failed_jobs_table (11.03ms)
DBにテーブルが作成されているか確認
データベースを選択。
use <データベース名>
テーブルの一覧を表示
show tables;
実例
mysql> use SampleApp
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_sampleapp |
+---------------------+
| failed_jobs |
| migrations |
| password_resets |
| users |
+---------------------+
MySQLの終了
MySQLはバッテリーを消費するので使わない時は終了する。
$ mysql.server stop
実例
$ mysql.server stop
Shutting down MySQL
. SUCCESS!