php artisan migrate時でのエラー対処(ユーザ権限まわり)
migrationファイルをすでに作成済みでphp artisan migrateで実際にmigrationファイルをDBに反映するときに以下のエラーが出た。
[vagrant@dev-wb01 samplesystem]$ php artisan migrate [Illuminate\Database\QueryException] SQLSTATE[HY000] [2002] Connection refused (SQL: select * from information_schema.tables where table_schema = sampleblog and table_name = migrations) [PDOException] SQLSTATE[HY000] [2002] Connection refused
英文エラーが出ると意味をよく理解する前についググってしまうが、大抵英語サイトが引っかかって、結局思ったような解決策ページにたどり着かない時がある。なので、まずはしっかりエラーメッセージを読むとDBに接続ができてないようだ。ということは.envファイルの設定値がおかしいと推測し、.envファイルのDB_HOSTを確認すると、そこが全然違う仮想環境を指定していた。そこを修正で解消。
再度migrateを実行すると今度は以下のエラーが。
[vagrant@dev-wb01 samplesystem]$ php artisan migrate [Illuminate\Database\QueryException] SQLSTATE[HY000] [1130] Host '10.0.0.11' is not allowed to connect to this MariaDB server (SQL: select * from information_schema.tables where table_schema = sampleblog and table_name = migrations) [PDOException] SQLSTATE[HY000] [1130] Host '10.0.0.11' is not allowed to connect to this MariaDB server
いろいろ調べるとhost 10.0.0.11(一応これはVirtual Boxの仮想環境)に権限が設定されていないっぽいので、権限を設定する必要があるようだ。migrateしたいとこのDB(ここではMariaDB)に入って以下のように10.0.0.11から接続するrootに全権限を設定。
MariaDB [(none)]> grant all ON sampleblog.* to root@"10.0.0.11"; Query OK, 0 rows affected (0.00 sec)
仮想環境用のテスト実行なので、rootでかつパスワードなしで設定しているけど、ここは通常は権限をselect, update, createなど細かく設定し、パスワードもしっかり設定するのがよい。
そしてようやくmigrateが正常終了した。
[vagrant@dev-wb01 samplesystem]$ php artisan migrate Migrated: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_100000_create_password_resets_table Migrated: 2017_01_28_050812_create_articles_table
migrateを実行して、既存tableがすでにあるというようなエラーになった場合は、mysqlに接続してdrop tableで消して再度migrateを実行するとうまくいった。そのような対応で良いかはよく分からなくて微妙だけど。
サンプル見ながらmigrateするだけで1日オワタ\(^o^)/w
本当はController、Viewくらいまでは作りたかったのだけど。
まぁ、こんな感じで自分がまたハマるだろうエラーを綴っていこう。それにしてもはてな記法のソースコードのハイライトは便利だね。一応この記事はshとmysqlのタイプを指定している。