読者です 読者をやめる 読者になる 読者になる

終電23時15分って早くね?

都内のIT企業で働くカラオケ大好きエンジニアの雑記

Laravel4のhomesteadでmigrateしようとしたら「SQLSTATE[HY000] [2002] 対象のコンピュータによって拒否されたため、接続できませんでした。」でハマった件

Laravel PHP Homestead

タイトルが長いけどそういうことです。

当方Windows7のLaravel4.2でHomesteadを利用した環境でございます。
Macご利用の方はその辺脳内変換していただければと。。

やろうとしたこと

migrate:makeでマイグレーションを作成し、

$ php artisan migrate:make create_users_table

DBスキーマ等々設定の上、

$ php artisan migrate --env=local

を入力してたらエラーが出ました。

[PDOException]
SQLSTATE[HY000] [2002] 対象のコンピュータによって拒否されたため、接続できませんでした。

【参考画像】

f:id:blue_goheimochi:20140915231233p:plain

これです。

解決方法

上記の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の処理が通るようになりましたとさ!

余談

別途、

[PDOException]
could not find driver

というエラーにもはまったんですが、
php.iniでphp_pdo_mysql.dllが有効になっていませんでした・・・