LoginSignup
1
0

More than 3 years have passed since last update.

Laravelとmysqlが接続できない時に対処したこと(健忘録)

Last updated at Posted at 2020-11-22

このエラーにかなり悩まされたので健忘録として記載します。
初学者の情報です。不備などあればご指摘いただければ幸いです。

環境

・vagrant-docker-laravel
・docker-compose version 1.25.0
・PHP 7.2.34
・Laravel Framework 5.8.38
・mysql Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using EditLine wrapper
・phpmyadminを使用

エラー内容( php artisan migrate 実行時 )

Illuminate\Database\QueryException  : SQLSTATE[HY000] [1045] Access 
denied for user 'root'@'172.23.0.3' (using password: NO) (SQL: select
 * from information_schema.tables where table_schema = laravel and
 *  table_name = migrations and table_type = 'BASE TABLE')

内容的にはアクセス拒否のようなことを言われていると思われます。

今回の主な原因

①Laravelとmysqlのパスワードの不一致

Laravelの.envファイルに記載されているmysqlパスワード と docker-compose.yml内に記載されているmysqlパスワードが不一致でありました。
.envファイルに関してはエディター上で編集すればOKです
.ymlファイルに関してはターミナルから入る。docker-compose.ymlがあるディレクトリまで移動して、

sudo vi docker-compose.yml

を実行してファイル内を編集します。
(※今回は両ファイルのmysqlパスワードを”root”に統一しました。)
ちなみに、パスワードを揃えると書きましたが、正確には「docker-compose.yml内のパスワードに合わせなければならない!!」です。
(その他の項目も全て.ymlが主導権を握っているらしい。。)

②データベースの未作成

今回はphpmyadminを用いています。
そもそも、migrationをする前にテーブルが入るための箱(データベース)をphpmyadminに作っておかなければならなかったです。(ブラウザ上で操作)
ちなみにここで作るデータベース名は .envファイルのDB_DATABASE=●●●で指定されている●●●と言う名前のデータベースを作っておくこと。

③構文のミス

migrationファイル内の構文が間違っていました。
今回はtimestamps()とtimestamp()で引数の取り方が変わるため、構文エラーとなっていました。
構文エラーは多数あるため、その都度確認する必要があります。

上記3点を改善した後

dbコンテナに入る

docker-compose exec db bash

Mysqlに接続

mysql -u root -p

●●●dbの存在を確認

show databases;

dbを選択

use ●●●;

dbコンテナを抜ける 

exit

Mysqlを再起動

service mysql restart

コンテナを立ち上げ直して接続

docker-compose up -d

そして最後に

php artisan migrate

→→→成功!!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0