[Laravel] インストールとMySQLの接続

PHPのフレームワーク「Laravel」のインストールとセッティングについてです。データベースはMySQL8を利用します。
composerを使ってLaravelをインストール、その後DBの設定を記載し、開発用サーバーを起動します。
幾つかエラーが出やすい点があったので、エラー回避方法をメモしておきます。
[環境]
PHP 2.4.x
CentOS 7.x
MySQL 8.x
Laravel 5.5
Contents
Composerのインストール
Composerは、PHPパッケージの管理システムで、インストールするパッケージに必要なファイルを自動にダウンロード(インストール)してくれます。
1 2 3 4 5 6 7 8 9 10 11 12 |
$ yum install composer $ mv composer.phar /usr/local/bin/composer $ composer / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/ Composer version 1.10.1 2020-03-13 20:34:27 |
Composerをインストールし、
「$ mv composer.phar /usr/local/bin/composer」
でパスを設定(ファイルを移動してパスを有効化)
$composerで大きな文字とバージョンが表示されたらインストール成功です。
なおcomposerのバージョンを最新にするには以下のコマンドを使います。
1 |
# composer self-update |
Laravelのインストール
1 2 3 |
$ composer global require "laravel/installer" $ yum -y install --enablerepo=remi-php73 php-xml $ composer create-project --prefer-dist laravel/laravel [任意のプロジェクト名] "5.7.*" |
※最後にバージョンを付けないと最新バージョンのものがインストールされます。 2020年4月では version7.5.2でした。
Laravelのバージョン確認は「$ php artisan -V」です。これはプロジェクトをインストールしたディレクトリで行わないと表示されません。
インストール時のエラー対処
create-projectで下記のようなエラーが表示されました(背景は赤色)
これはインストール時にメモリーが足りないというエラーのようです。
Project directory “/var/www/html/example.net/sample” is not empty.
php.iniでmemory_limitを増やすか、スワップ関係を調整するかの対処になるようですが、VPSサーバーを利用しており、メモリーを1GBに増やしてもダメ、スワップは変更できないようになっていて困りました。
できる限りメモリーを開放する作戦で、httpdとmysqlをストップして再度実行したところうまくインストールされました。
1 2 |
$ systemctl stop httpd $ systemctl stop mysqld |
サーバーの立ち上げ
1 |
$ php artisan serve --host xxx.xxx.xxx.xxx |
警告
pdo_sqliteが使えないというwarningが出ていました。
sqliteを使わない場合は問題ないようです。
MySQLの設定
1 2 3 4 5 6 7 8 9 10 |
$ cd /var/www/html/example.com/プロジェクト名 $ vi .env DB_CONNECTION=mysql DATABASE_URL=mysql: DB_HOST=xxx.xxx.xxx.xxx DB_PORT=3306 DB_DATABASE=MySQLデータベース名 DB_USERNAME=MySQLユーザー名 DB_PASSWORD=MySQLユーザーパスワード |
Laravelの日本語化
1 2 3 4 5 |
$ cd /var/www/html/example.com/プロジェクト名 $ vi config/app.php 'timezone' => 'Asia/Tokyo', 'locale' => 'ja', |
マイグレーションの実行
MySQLの設定が終わったら、マイグレーションを実行します。
1 |
$ php artisan migrate |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Illuminate\Database\QueryException : SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client (SQL: select * from information_schema.tables where table_schema = sample and table_name = migrations) at /var/www/html/example.net/sample/vendor/laravel/framework/src/Illuminate/Database/Connection.php:664 660| // If an exception occurs when attempting to run a query, we'll format the error 661| // message to include the bindings with SQL, which will make this exception a 662| // lot more helpful to the developer instead of just the database's errors. 663| catch (Exception $e) { > 664| throw new QueryException( 665| $query, $this->prepareBindings($bindings), $e 666| ); 667| } 668| Exception trace: |
これはMySQL8.0.4からログイン認証方式が変更された影響でエラーがでています。
LaravelとMySQLの接続は新方式に対応していないので、旧タイプの認証方式に戻します。
新認証方式 : caching_sha2_password
旧認証方式 : mysql_native_password
変更の仕方はここの記事が参考になります。
MySQL8.0 認証方式を変更する(Laravel5)
今後新規のユーザーは旧認証方式にする場合
/etc/my.confに以下を記述します。
1 2 |
[mysqld] default_authentication_plugin=mysql_native_password |
これらのエラー対処を行い、もう一度サーバーを起動します
1 |
$ php artisan serve --host xxx.xxx.xxx.xxx |
http://XXX.XXX.XXX.XXX:8000 というURLがターミナルに表示されるので、それをブラウザで開くと表示されます。関連記事
- [Laravel] 7.x 認証の導入とデータベースへの接続
- [Laravel] 利用頻度が高いコマンド一覧(artisan)
- [Laravel] MySQLのテーブル作成とテストデーター自動生成
- [Laravel] 公式デバッグアシスタント telescope の使い方
- [MySQL]8.x phpMyAdminでGrant文が使えない