このような問題を解決できる記事になっています。
こんにちは、セイタです。
先日、Laravelで投稿機能を実装しようと思ってサイトを参考にしつつ制作をしていたのですが、php artisan migrateを実行しようとしたところ、ホストに接続できずに実行できない状態でした。
原因としては、MySQLのデータベースの作業用ユーザーを設定し忘れと.envとdatabase.phpの情報とデータベース接続の情報の不一致が原因となっていました。
Laravelの実行環境をXAMPPで構築している人が多く、情報が少なかったので苦労したのですが、なんとか解決することができました。
同じくエラーを吐き出し、先に進めない人向けの記事となっていますので、同じ環境で開発している方のお手伝いができれば幸いに思います。
- 仮想マシン:Virtual Box
- 仮想環境:Vagrant
- OS:CentOS7
- DB:MySQL
php artisan migrateでエラーが発生する時の解決方法【Laravel + MySQL + Vagrant】
通常Laravelで開発を行う時は、SQLiteを使用することが多いと思いますが、今回は開発サイトのオーナーの希望によりMySQLで作成することになりました。
久しぶりにMySQLを扱ったので、色々と抜けている部分があって少し戸惑いましたが、なんとか問題解決。
先ほどツイートした内容のエラーは解消しました。
1,データベースの作成
2,作業用ユーザーの作成
3,マイグレーションファイルの作成
4, ,env .database.phpの情報を合わせる
5, php artisan migrate で完了箇条書きにすると簡単なのですが、解決までに三時間を要しましたorz
明日ブログにします!
— セイタ@理系の文系ブロガー (@seita_blog) October 8, 2019
先ほどツイートした内容のエラーは解消しました。
1,データベースの作成
2,作業用ユーザーの作成
3,マイグレーションファイルの作成
4, ,env .database.phpの情報を合わせる
5, php artisan migrate で完了
箇条書きにすると簡単なのですが、解決までに三時間を要しましたorz
明日ブログにします!
なんとか、モデルの作成手順に進むことができるようになりました。
LaravelでMySQLに接続する時に起きたエラー
[vagrant@localhost example]$ php artisan migrate IlluminateDatabaseQueryException : SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES) (SQL: select * from information_schema.tables where table_schema = ewignews and table_name = migrations and table_type = 'BASE TABLE') at /home/vagrant/example/example/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: 1 PDOException::("SQLSTATE[HY000] [1045] Access denied for user 'root'@'localhost' (using password: YES)") /home/vagrant/example/example/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 2 PDO::__construct("mysql:host=127.0.0.1;port=3306;dbname=example", "example", "example", []) /home/vagrant/example/example/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:70 Please use the argument -v to see more details.
ところどころパスの部分をexampleに書き換えていますが、重要な部分ではないのでご安心を。
Laravelのphp artisan migrateでエラーが起きる原因
解決の糸口になったのは、MySQLにルートユーザーで入ろうとしていることで跳ね返されるということが分かったので、作業用ユーザーを設定し、その後php artisan migrate を実行したところ成功しました。
ちなみに、実は作業用ユーザーを作成して、php artisan migrate を実行した時に最初失敗しました。
この部分の原因は掴めていないのですが、MySQLにTerminalでアクセスして一度データベースを削除後、同じ名称で作成したところ成功したという結果になったので、もし同じ状況になっていれば試してみたら成功するかと思います。
⑴ データベースの作業ユーザーを作成していない
MySQLで最初にデータベースを作成した時に、ルートユーザーで作成し作業用ユーザーを設定していませんでした。
DB_CONNECTION=mysql DB_HOST=localhost DB_DATABASE=laravel_bbs DB_USERNAME=root DB_PASSWORD=root DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
DB_USERNAMEとDB_PASSWORDがrootと記述されているのですが、この状況をそのまま実行すると恐らくうまくいかないかと思うので、しっかりと作業用ユーザーを作成して、しっかりとこの部分を間違い内容に記述するようにしましょう。
ちなみに、Vagrant + MySQL + CentOS7で環境を構築している場合は、DB_HOSTの部分はlocalhostで大丈夫なので、迷子になった方はそのように記述してもらえたらと思います。
⑵ .envとdatabase.phpの内容が間違っている
今回の原因の一つとなっている作業用ユーザーの情報が間違っているため、php artisan migrate が実行できなかったというものですが、作業用ユーザーがrootではないので、当然といえば当然。
作業用ユーザーで作成したユーザー名とパスワードの記述が間違っていると、php artisan migrateの実行がうまくいかなくなるので、必ず作業用ユーザーを作成するようにしてください。
また、単純に記述ミス(スペル間違い)などがあってもうまくいかない状態になってしまうので、記述ミスにも十分注意しましょう。
⑶ マイグレーションファイルを作成してからデータベースを作成する
今回成功したきっかけが、マイグレーションファイルを作成した後にデータベースを作成した、ということだったので、マイグレーションファイルを作成してからデータベースを作成して、php artisan migrate を試してみるとうまくいくかもしれません。
ちなみに、通常であれば先にデータベースを作成して、作業ユーザーを作成してから.envとdatabase.phpに必要情報を記述して完了。
という流れになるはずなので、データベース→.env & darabase.phpに記述→php artisan migrateでOKになるのが普通のはず。
php artisan migrateでエラーが出た時は、各設定ファイルを要確認!
LaravelでもMySQLでのコマンドなんかもそうですが、基本的にエラーの大きな部分は書き間違いや作成のし忘れなどが多いように感じます。
特にプログラミング初心者にとっては、ある程度慣れている人よりも頻度が多い傾向にあると思うので、自分が書いたコードをしっかりと確認後、間違いがなければどの部分に問題があるのかを確認してトライアンドエラーを繰り返すと解決の糸口を見つけられるはずです。
オススメ記事【Udemy】Webデザインを独学するなら、おすすめは1つだけ【転職済】
オススメ記事プログラミングの本は学習に必要だけど、本だけではキツいというお話【体験談】