「Laradock」でLaravelの環境を構築する際、「php artisan migrate」を実行したらエラーが発生しました。
その解決までの軌跡を記します。
「php artisan migrate」の「artisan」はアルチザンと読むそうです
エラー発生状況:「php artisan migrate」を実施
Laravel標準の「2014_10_12_000000_create_users_table.php」「2014_10_12_100000_create_password_resets_table.php」を「php artisan migrate」でそのまま実行しました。
すると次のエラーが出て、migrateに失敗しました。
laradock@af59025e7096:/var/www$ php artisan migrate
In Connection.php line 664:
SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_s
chema.tables where table_schema = homestead and table_name = migrations)
In Connector.php line 67:
SQLSTATE[HY000] [2002] Connection refused
MySQLのバージョンを変更する
MySQLの最新バージョン(現在の8系)を使用すると、セキュリティが強化されたたため、エラーになる事が分かりました。
ただ、私が使用しているLaravelはバージョンが5.5なので、もしかしたら現在の最新バージョン8なら問題ないかもしれません。
今回は、Laravelの学習をメインにしているため、教本などとバージョンが異なると余計な支障をきたす可能性があるので、MySQLのバージョンをダウングレードさせる事にしました。
まずはMySQLを停止させます。
docker-compose stop mysql
次に「Laradock」の「.env」ファイルにある「MYSQL_VERSION」の項目を変更します。
### MYSQL #################################################
#MYSQL_VERSION=latest
MYSQL_VERSION=5.7
ダウングレードにあたり、残っているデータを消去し、mysqlを再度ビルドし直します。
先程の「Laradock」の「.env」に「DATA_PATH_HOST」という設定があります。
# Choose storage path on your machine. For all storage systems
DATA_PATH_HOST=~/.laradock/data
ここにあるmysqlのデータを削除し、dockerのイメージも削除します。
rm -rf ~/.laradock/data/mysql
docker rmi laradock_mysql -f
docker rmi mysql -f
そして最後にMySQLをビルドし直します。
docker-compose build --no-cache mysql
MySQLを起動して、バージョン変更したか確認します。
docker-compose up -d mysql
winpty docker-compose exec mysql mysql --version
mysql Ver 14.14 Distrib 5.7.34, for Linux (x86_64) using EditLine wrapper
※「winpty」はWindows用です
「Laradock」と「Laravel」の「.env」を変更する
せっかくMySQLをダウングレードしましたが、エラーは解消されませんでした。
次に行ったのは、「Laradock」と「Laravel」アプリの、それぞれの「.env」ファイルについてです。
エラーメッセージからも分かるように、ログイン関連でつまづいているようです。
まず、MySQLのパスワードが、「Laradock」ではrootになっていたため、「Laravel」のsecretに合わせました。
#MYSQL_ROOT_PASSWORD=root
MYSQL_ROOT_PASSWORD=secret
今度は「Laravel」の「DB_USERNAME」をhomesteadからrootに変更しました。
#DB_USERNAME=homestead
DB_USERNAME=root
本当は、rootは好ましく有りませんが、学習用の開発環境なのでrootにしてしまいました。
「Laravel」の「DB_HOST」も変更しておきます。
#DB_HOST=127.0.0.1
DB_HOST=mysql
今度はmysqlにログインして、実際のrootのパスワードを変更します。
winpty docker-compose exec mysql bash
※「winpty」はWindows用です
mysql -u root -p
use mysql
UPDATE user SET authentication_string=password('secret') WHERE user='root';
mysql -u root -p
use mysql
UPDATE user SET authentication_string=password('secret') WHERE user='root';
mysql -u root -p
※パスワード「root」でログイン
以下コマンドにてrootのパスワードを変更します。
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
mysql> UPDATE user SET authentication_string=password('secret') WHERE user='root';
Query OK, 0 rows affected, 1 warning (0.01 sec)
Rows matched: 2 Changed: 0 Warnings: 1
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
Bye
データベースを用意しよう!
「php artisan migrate」を実行したらまたエラーになりました。
laradock@af59025e7096:/var/www$ php artisan migrate
In Connection.php line 664:
SQLSTATE[HY000] [1049] Unknown database 'homestead' (SQL: select * from inf
ormation_schema.tables where table_schema = homestead and table_name = migr
ations)
In Connector.php line 67:
SQLSTATE[HY000] [1049] Unknown database 'homestead'
今度はデータベース「homestead」が存在しないと出てます。
とりあえず、コネクションは解決したようです。
もう一度mysqlにログインして「homestead」データベースを作っても良かったのですが、「phpMyAdmin」をインストールしてあったので、そちらを試しに使ってみる事にしました。
「Laradock」の「.env」ファイルで「PMA_PORT=8081」にphpMyAdminのポート番号が記載されています。
8080のケースもあるようなので、もしアクセスできなければ、この辺の設定を確認します。
ログインしたら「homestead」データベースを作成します。
再び「php artisan migrate」を実行したら、マイグレーションできました!
laradock@af59025e7096:/var/www$ php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table
phpMyAdminからも、「homestead」にテーブルが追加されている事が確認できます。