Laravel(6.x)でMySQL接続設定をする
NoSQLなどが利用されるようになり、RDB(OracleやMySQLなど)の
出番は以前に比べて減少したと思いますが
RDB,NoSQLのそれぞれにメリット・デメリットがあるので
プロダクトにあわせて柔軟な選択が必要とされます
(両方使うケースも多いです)
そこで今回はLaravelでMySQLの接続設定を紹介したいと思います
.envを確認
Laravelをインストールすると、作成したプロジェクトフォルダの
直下に .env ファイルが作成されています
そのファイルの中に、DBについての定義があるので確認してみましょう
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=
デフォルトで上記のようにMySQLを利用する記載となっており
ローカル環境のMySQLの laravel
というデータベース名に接続する
記載となっています
Databaseを作成する
ローカル環境のMySQLにプロジェクト用のデータベースを
用意しましょう
まずはコマンドでmysqlに接続します
※ローカル環境に直接mysqlをインストールしていることを想定しています
Docker上に設置している場合はlocalhost=Docker上になるので
localhostの箇所を適宜、ホストOSのIPアドレスに変更してください
mysql -u root -p -h127.0.0.1
データベースを作成します(今回は hello という名前で作ります)
create database hello;
mysql> create database hello;
Query OK, 1 row affected (0.10 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| hello | ← 作成されたデータベース
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.02 sec)
ユーザを作成する
他のデータベースなどを誤って操作するなどして障害が発生する可能性があるため、
通常はrootユーザーを使ってデータベースにアクセスすることはありません
プロジェクト専用のユーザを作成、権限を付与し
それを使ってアクセスすることになります
ここでMySQLのユーザの作成と権限付与についても実施してみたいと思います
create user 'hello_user'@'localhost' identified by 'user_password';
ユーザー名:hello_user
パスワード:user_password
ホスト名(このユーザを使ってアクセスしてくるところ):localhost
で作成しました
作成されているか確認します
mysql> select Host, User from mysql.user;
+-----------+---------------+
| Host | User |
+-----------+---------------+
| % | root |
| localhost | hello_user | ←作成されたユーザ
| localhost | mysql.session |
| localhost | mysql.sys |
| localhost | root |
+-----------+---------------+
5 rows in set (0.00 sec)
次に権限を設定します
権限を細かく設定できますが、今回は先程のデータベースに対しての
all権限を付与したいと思います
grant all on hello.* to 'hello_user'@'localhost';
権限を確認します
mysql> show grants for 'hello_user'@'localhost';
+---------------------------------------------------------------+
| Grants for hello_user@localhost |
+---------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'hello_user'@'localhost' |
| GRANT ALL PRIVILEGES ON `hello`.* TO 'hello_user'@'localhost' | ←設定した権限
+---------------------------------------------------------------+
問題なく設定されていることが確認できました
これでhello_userはlocalhostからアクセスするときに限って
helloデータベースに対して操作することができるようになりました
ちなみに GRANT USAGE ON *.* TO 'hello_user'@'localhost'
の権限は
ユーザーを作成したときに付与されるものですが
権限が何もない ことを表していて、ユーザーを作成しただけでは何もできない
ことがわかります
Laravelの設定をする
.envを修正
作成したデータベース、ユーザーを設定ファイルに記述します
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=hello
DB_USERNAME=hello_user
DB_PASSWORD=user_password
config/database.phpを修正
.envがあれば設定されますが、ない場合はconfig/database.php
のデフォルト値
を利用するようになるため合わせて修正しておくとよいでしょう
(該当箇所のみ抜粋)
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'hello'),
'username' => env('DB_USERNAME', 'hello_user'),
'password' => env('DB_PASSWORD', 'user_password'),
まとめ
MySQLのデータベース設定から、Laravelの設定までを紹介しました
LaravelはインストールするとデフォルトでMySQLが利用されるように
なっているため接続までのハードルは非常に低いです
他にも、.envをみてみるとREDIS(キャッシュサーバ)、AWS(クラウド) などの接続設定も追加されており、世の中の状況にあわせた対応もされています
こういった事からも人気が出ているのかもしれません