🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

3回答

3768閲覧

Laravelにてphp artisan migrateコマンドでエラーがでる

k_takahashi

総合スコア6

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/02/28 12:30

編集2021/03/01 02:32

やりたいこと・前提条件

LaradockとDockerを使ってローカル開発をしています。
DBはPHPMyAdmin上からrootユーザで作成しました。
php artisan make:migrationコマンドにて作成したマイグレーションファイルを元に、テーブルを作成したいです。
その際に、新しく作成したMySQLのユーザを使用したいです。

解決したい内容

マイグレーションファイルを作成し、php artisan migrateを実行しようとした際、下記エラーが起きます。

laradock@ba290d4aab8c:/var/www$ php artisan migrate In Connection.php line 664: SQLSTATE[HY000] [1045] Access denied for user 'default'@'172.19.0.4' (using password: YES) (SQL: select * from information_schema.tables where t able_schema = default and table_name = migrations) In Connector.php line 67: SQLSTATE[HY000] [1045] Access denied for user 'default'@'172.19.0.4' (using password: YES)

原因として考えていること

.envファイルで、MySQLのユーザはdefaultユーザではなく、新しく作成したユーザを指定しているはず。
ユーザやDBを設定するファイルおよび箇所の認識が間違っているのではないか。

関連すると考えられるもの

【.envファイル】
  • プロジェクト配下の.env
DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=XXXXdb DB_USERNAME=XXXX DB_PASSWORD=XXXXpassword
  • laradockディレクトリ配下の.env
### MYSQL ################################################# MYSQL_VERSION=latest MYSQL_DATABASE=XXXXdb MYSQL_USER=XXXX MYSQL_PASSWORD=XXXXpassword MYSQL_PORT=3306 MYSQL_ROOT_PASSWORD=root MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d DB_HOST=mysql
【新しく作成したユーザの権限】

bashから確認した権限

mysql> select user, host from mysql.user; +------------------+-----------+ | user | host | +------------------+-----------+ | root | % | | default | localhost | | XXXX | localhost | | mysql.infoschema | localhost | | mysql.session | localhost | | mysql.sys | localhost | | root | localhost | +------------------+-----------+
mysql> show grants for 'xxxx'@'localhost'; +-----------------------------------------------------------+ | Grants for XXXX@localhost | +-----------------------------------------------------------+ | GRANT USAGE ON *.* TO `XXXX`@`localhost` | | GRANT ALL PRIVILEGES ON `XXXXdb`.* TO `XXXX`@`localhost` | +-----------------------------------------------------------+

進展

進展かはわからないのですが、状況に少し変化がありました。
キャッシュのクリアを試しました。

laradock@ba290d4aab8c:/var/www$ php artisan cache:clear Cache cleared successfully. laradock@ba290d4aab8c:/var/www$ php artisan config:cache Configuration cache cleared! Configuration cached successfully!

その後、php artisan migrateを実行すると下記のエラーになりました。

laradock@ba290d4aab8c:/var/www$ php artisan migrate In Connection.php line 664: SQLSTATE[HY000] [1045] Access denied for user 'xxxx'@'172.19.0.4' (using password: YES) (SQL: select * from information_schema.tables where tabl e_schema = xxxxDB and table_name = migrations) In Connector.php line 67: SQLSTATE[HY000] [1045] Access denied for user 'xxxx'@'172.19.0.4' (using password: YES)

キャッシュのクリア前はdefaultユーザとdefaultDBを使っているようなエラーだったものが、
今は、.envファイル内で設定したユーザになっています。
エラーの内容としては変わっていないようですが。

いろいろ調べたり試したりはしたのですが、解決できなかったため
教えていただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

自己解決

解決しました。
原因としては、新しく作成したユーザの権限でした。
hostがlocalhostだったところを、ワイルドカードにして作成しなおしました。

mysql> drop user xxxx@localhost; Query OK, 0 rows affected (0.03 sec) mysql> mysql> CREATE USER 'xxxx'@'%' IDENTIFIED BY 'xxxxpassword'; Query OK, 0 rows affected (0.00 sec) mysql> mysql> GRANT ALL PRIVILEGES ON xxxxDB . * TO 'xxxx'@'%'; Query OK, 0 rows affected (0.00 sec) mysql> mysql> select host,user from mysql.user; +-----------+------------------+ | host | user | +-----------+------------------+ | % | xxxx | | % | root | | localhost | default | | localhost | mysql.infoschema | | localhost | mysql.session | | localhost | mysql.sys | | localhost | root | +-----------+------------------+ 7 rows in set (0.00 sec)

解決できたにはできたのですが、
これだとセキュリティ的な視点で危ないのかなと考えているところもあるため、そこについてはまた調べてみます。
ありがとうございました。

投稿2021/03/07 05:55

k_takahashi

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

解決しました。
原因としては、新しく作成したユーザの権限でした。
hostがlocalhostだったところを、ワイルドカードにして作成しなおしました。

mysql> drop user xxxx@localhost; Query OK, 0 rows affected (0.03 sec) mysql> mysql> CREATE USER 'xxxx'@'%' IDENTIFIED BY 'xxxxpassword'; Query OK, 0 rows affected (0.00 sec) mysql> mysql> GRANT ALL PRIVILEGES ON xxxxDB . * TO 'xxxx'@'%'; Query OK, 0 rows affected (0.00 sec) mysql> mysql> select host,user from mysql.user; +-----------+------------------+ | host | user | +-----------+------------------+ | % | xxxx | | % | root | | localhost | default | | localhost | mysql.infoschema | | localhost | mysql.session | | localhost | mysql.sys | | localhost | root | +-----------+------------------+ 7 rows in set (0.00 sec)

解決できたにはできたのですが、
これだとセキュリティ的な視点で危ないのかなと考えているところもあるため、そこについてはまた調べてみます。
ありがとうございました。

投稿2021/03/01 04:23

k_takahashi

総合スコア6

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

DB_HOST環境変数の値をmysqlにする必要があるのではないでしょうか。

プロジェクト配下の.env

DB_HOST=mysql

参考: Usage

投稿2021/02/28 16:16

Lulucom

総合スコア1899

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

k_takahashi

2021/03/01 02:32 編集

実は最初は`DB_HOST=mysql`にしていたのですが、 エラー内容は質問に記載している、 `DB_HOST=localhost`の時と同じエラーでした。
Lulucom

2021/03/01 05:28 編集

質問への追記を拝見しました。 php artisan config:cache は設定をキャッシュするコマンドですので、設定が固まらない開発中はやらない方が良いと思います。設定をキャッシュした状態で設定ファイルを変更しても反映されません。設定のキャッシュは設定が固まってから本番稼働前に行いましょう。 php artisan config:clear で設定のキャッシュをクリアしておきましょう。キャッシュをクリアしてから、上記のように.envファイルでDB_HOST=mysqlに変更するとどうでしょうか。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問