MySQLとLaravelを接続する方法を実例で解説|データベース(DB)にテーブルを作成する手順(パスワードの変更・ログイン・再起動)

laravel-prograshi(プロぐらし) Laravel
記事内に広告が含まれていることがあります。

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! 
タイトルとURLをコピーしました