Laravelの環境を構築するまで頑張る – データベースの接続

PHP

前置き

前回は、Laravelの導入が完了しました。

Laravelの環境を構築するまで頑張る – CentOSに乗り換え(Laravel導入)
前置き 前回の記事で、LinuxのCentOSにApacheとPHPを導入して動作確認を行いました。 今回はLaravelを導入して、Windowsの時みたいにLaravelのHello Worldを表示させるところまで実施しま...

参考書籍のサンプルではLaravelを入れて終わりではなく、MySQLによるデータベースも用意するので、今回はそれを行っていきます。

ちなみに、Windowsで環境構築を続けていたと仮定するとXAMPPのMariaDBをMySQLに切り替えていたのかもしれませんね。

手順

MariaDBの有無確認と削除

まずは、CentOSにおいてMariaDBが入っているかを確認します。そして入っているのであれば、削除する必要があります

どうやらCenstOSにはMariaDBがすでに入っていることが多く、またMySQLと干渉する可能性もあるようですので。

確認

sudo yum list installed | grep mariadb

ようは、YUMリポジトリでインストール済みのリストを表示して、その中からmariadbがあるかを確認するコマンドですね。

存在していると以下のように表示が出ると思います。

削除

sudo systemctl stop mariadb.service

システムが起動しているかもしれないので、システム停止コマンドを入力します。

最初から止まっていても、特に問題ないのでコマンド入力しておくことをおすすめします。

 

sudo yum remove mariadb-*

そして、MariaDBを削除します。

removeの時は-yオプション(確認事項を全てyesで流すもの)は使わないほうがいいです。

削除後は、[確認]の項のコマンドでもう一度インストールリストを検索して何も表示されないことを確認しましょう。

MySQL関連パッケージの削除

MySQLが半端に入っていても邪魔なので、そちらもアンインストールします。

sudo yum remove mysql*

MySQLのインストール

MySQLもPHPのバージョン指定でやったみたいに、YUMリポジトリではない場所からインストールします。

具体的にはMySQLコミュニティからインストールします。

インストール

MySQL8.0のリポジトリをダウンロードします。

sudo rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

念のため、リポジトリのリストを確認します。

yum repolist

MySQL本体のインストール前にGPGキーを更新しておきます。

sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

MySQLをインストールします。クライアント側とサーバ側両方インストールされます。

sudo yum -y install mysql mysql-server

インストールされたかを確認します。

sudo yum list installed | grep mysql

初期設定

MySQLの設定を行っていきます。

まずは自動起動設定

sudo systemctl enable mysqld

そして、手動スタート

sudo systemctl start mysqld

初期パスワードを見に行きます。

sudo grep password /var/log/mysqld.log

試しにログインをして、パスワードに初期パスワードを入力して入れたらOK。

下記コマンドのように入れると、対話式でパスワードを聞かれる。後述のようにコマンドにパスワードを含めてもOK。

mysql -uroot -p

そして、データベースを触るには初期パスワードを変更する必要がある。パスワードは英大文字, 英小文字, 数字, 記号が入ったうえで8文字以上を求められる。

今回はLaravelのテスト用なので「Laravel_0001」とする例を示す。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Laravel_0001';

一度MySQLから出て、再ログインでパスワード変更を確認する。

mysqlから出るには以下。

exit;

設定したパスワードでのログインを試行

mysql -uroot -p"Laravel_0001"

rootユーザでの新しいパスワードでのログインを確認しました。

Laravel接続用ユーザ作成

次に、そのままLaravelの接続用のユーザを作りましょう、

まず、現在のユーザ一覧を確認します。

ユーザ管理テーブルのあるデータベースを選択して、

USE mysql;

SELECT文を実行します。

SELECT user, host, plugin FROM user;

ユーザ作成SQLを実行します。検証用なので、rootユーザと同じパスワードです。

この際、後々LaravelのPDOからの接続で[The server requested authentication method unknown to the client]というエラーを回避するためにパスワードの設定をカスタムしています。

CREATE USER 'laravel'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Laravel_0001';

作成後に後から変更することも可能です。

ALTER user 'laravel'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Laravel_0001';

もう一度確認すると追加されていて、pluginの値も異なることが分かります。

次に、作成したユーザに権限を与えます。

今回は検証用なので全権限を与えますが、実用する場合はちゃんと設定しましょう。

GRANT ALL PRIVILEGES ON * . * TO 'laravel'@'localhost';

権限の更新はリロードが必要です。

FLUSH PRIVILEGES;

後述する接続検証用のデータベースとテーブル作成は、この時点で行っても構いません。

接続

環境変数

Laravelの環境変数にDBの情報を入れてしまって、接続の態勢を整える。

Laravelプロジェクトのルートディレクトリにある[.env]ファイルに環境変数が並んでいて、DBの情報を入力する項目もある。

前項で作成した[laravel]ユーザとパスワードを記述します。また、使うデータベースは後で作る「laravel_db」を指定。

データベース・テスト用テーブル作成

MySQLにrootユーザで入り、以下のSQLでデータベースを作成

CREATE DATABASE laravel_db;

作成されたかどうかは下記SQLで確認可能。

SHOW DATABASES;

作成したデータベースを選択します。

USE laravel_db;

選択状態を確認

SELECT DATABASE();

疎通テスト用のテーブルを作成します。

CREATE TABLE IF NOT EXISTS connection_test (id int AUTO_INCREMENT NOT NULL PRIMARY KEY, name varchar(15), age int);

テーブルにダミーデータをいくつか入れます。

INSERT INTO connection_test (name, age) VALUES ("wasabi", 30), ("mustard", 26), ("ginger", 20), ("red pepper", 5);

試しにSELECT文を入力。

SELECT * FROM connection_test;

良さそうです。

疎通確認

Laravel tinkerというデバッグツールを用いて疎通確認を行います。

mysqlのように対話式でコマンドを打てます。

PHP PDOのインストール

作業の前に、PHP PDOというデータベース間の接続を行ってくれるパッケージをPHPのバージョンに合わせてインストールします。

無い状態でDBに接続するコマンドを入力すると下記画像のように[Class ‘PDO’ not found]エラーが出ます。

sudo yum -y install --enablerepo=remi,remi-php72 php-pdo

PDOを入れたら、MySQLの拡張機能が入っているかチェックします。

php -m | grep pdo

入っていなければ、入れておきます。こいつが無いと[could not find driver]とかいうエラーが出てきます。

sudo yum -y install --enablerepo=remi,remi-php72 php-mysql

Apacheを再起動すると有効になります。

Tinker

下記コマンドでTinker内部に入ります。

php artisan tinker

小手調べにConfig確認

config('database.connections.mysql');

そして、ConnectionのConfigを確認。PDOが入っていないとここで怒られます。

DB::connection()->getConfig();

更に、PDO情報も確認します。PDOのMySQL拡張機能や接続ユーザの設定(plugin方式など)が正しくないと、ここでエラーを貰います。設定したのにうまくいかない場合は、Apacheの再起動を忘れている可能性もあります。

DB::connection()->getPdo();

ついでにそれぞれの情報を見比べておきましょう。

 

最後にSELECT文を送って、作成したテーブルが表示されるかを確認して疎通確認OKとなります。

DB::select('SELECT * FROM connection_test');

最後に

MySQL繋ぐだけなのに、えらいハマりました。

書籍のサンプルアプリを試すには、まだ苦難がありそうです。

タイトルとURLをコピーしました