【Laravel備忘録】Laradockの「php artisan migrate」のエラー解消

「Laradock」でLaravelの環境を構築する際、「php artisan migrate」を実行したらエラーが発生しました。

その解決までの軌跡を記します。

★環境
 ベースOS:Windows10
 プラットフォーム:Docker
 開発環境:Laradock
 PHPフレームワーク:Laravel 5.5

「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系)を使用すると、セキュリティが強化されたたため、エラーになる事が分かりました。

websandbag ブログ
【Docker】MySQL8.0系を使う時に発生する問題について - websandbag ブログ 新しいプロジェクトでは、過去に同じような構成をDockerで作っていればDockerfileを流用しています。 さて、 今回は、最新のMySQLイメージを使う際に発生する問題について...

ただ、私が使用している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のケースもあるようなので、もしアクセスできなければ、この辺の設定を確認します。

http://localhost:8081/

ログインしたら「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
Laravel -  ■開発環境 - lar... を表示しています

phpMyAdminからも、「homestead」にテーブルが追加されている事が確認できます。

よかったらシェアしてね!
目次
閉じる