Laravel4のhomesteadでmigrateしようとしたら「SQLSTATE[HY000] [2002] 対象のコンピュータによって拒否されたため、接続できませんでした。」でハマった件
タイトルが長いけどそういうことです。
当方Windows7のLaravel4.2でHomesteadを利用した環境でございます。
Macご利用の方はその辺脳内変換していただければと。。
やろうとしたこと
migrate:makeでマイグレーションを作成し、
$ php artisan migrate:make create_users_table
DBスキーマ等々設定の上、
$ php artisan migrate --env=local
を入力してたらエラーが出ました。
[PDOException] SQLSTATE[HY000] [2002] 対象のコンピュータによって拒否されたため、接続できませんでした。
【参考画像】
これです。
解決方法
上記のmigrateコマンドを見ていただいても分かるかと思いますが、
今回はlocalに対する操作だったのと、
もう1点、Homesteadを利用していたので、
MySQLのポートを参照するためには、33060のポートを参照しないといけませんでした。
■Laravel Homestead
http://laravel.com/docs/homestead#ports
SSH: 2222 -> Forwards To 22
HTTP: 8000 -> Forwards To 80
MySQL: 33060 -> Forwards To 3306
Postgres: 54320 -> Forwards To 5432
という感じで、ローカルからHomesteadに向けて、
ポートフォワードしてくれているわけですな。
ということで、ポートの設定をdatabasae.phpに書くことで解消できました。
対象は、\app\config\local\database.php です。
【変更前】
'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'homestead', 'username' => 'homestead', 'password' => 'secret', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', ),
【変更後】
'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'homestead', 'username' => 'homestead', 'password' => 'secret', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'port' => '33060', ),
'port' => '33060',
こいつを追加です。
という感じで無事にmigrateの処理が通るようになりましたとさ!
余談
実はphp_pdo_mysql.dllも有効になってなくていろいろはまりました。
— ゆーた (@blue_goheimochi) September 15, 2014
別途、
[PDOException] could not find driver
というエラーにもはまったんですが、
php.iniでphp_pdo_mysql.dllが有効になっていませんでした・・・