- 更新日: 2015年10月11日
- PHP & CakePHP
CakePHP3のDB接続でMySQLソケットのパスを設定
CakePHP 3 のチュートリアルをやっていたら、データベース(MySQL)に接続できないエラーが発生しました。原因は MySQL のソケットの場所を、config/app.php の Datasources に指定していなかったため。
ブックマークチュートリアル — CakePHP Cookbook 3.x ドキュメント
— 環境 —
CakePHP 3.1.1
PHP 5.5.19
MySQL 5.6.19
Mac OS X Yosemite
マイグレーションでDB接続のエラー発生
CakePHP 3 ではデフォルトでマイグレーションが使えるようになっています。Phinx というマイグレーション用ライブラリがデフォルトでバンドルされていて、Rails と同じような感じで DB のマイグレーションを行える。
Migrations — CakePHP Cookbook 3.x ドキュメント
Phinx
それで、マイグレーションファイルを作成後、マイグレートを実行したところ以下のエラーが発生。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
$ bin/cake migrations migrate Welcome to CakePHP v3.1.0 Console --------------------------------------------------------------- App : src Path: /path/to/CakePHP/tutorials/bookmarker/src/ PHP : 5.5.19 --------------------------------------------------------------- using migration path /path/to/CakePHP/tutorials/bookmarker/config/Migrations [InvalidArgumentException] There was a problem connecting to the database: SQLSTATE[HY000] [2002] No such file or directory migrate [-t|--target TARGET] [-d|--date DATE] [-p|--plugin PLUGIN] [-c|--connection CONNECTION] [-s|--source SOURCE] |
1 2 3 |
There was a problem connecting to the database: SQLSTATE[HY000] [2002] No such file or directory |
とエラーメッセージが出ていたので、MySQL の接続情報でどこか間違いがあるのだろうなと予測しました。まず、MySQL のDB名、ユーザー名、パスワード、ポートなどの設定に間違いがないかを確認しました。CakePHP での DB 接続情報の設定については以下参考。
Database 設定 – ブックマークチュートリアル — CakePHP Cookbook 3.x ドキュメント
config/app.php の Datasources に MySQL ソケットのパスを指定して解決
既存の DB 設定が正しいことを確認後、おそらく MySQL ソケットの読み込みがエラーの原因じゃないかと当たりを付けて、Phinx のドキュメントにあたってみました。上記の CakePHP 公式ページにはソケット指定について記述がなかったですので。
Configuration — Phinx 0.4.6 documentation
Phinx のドキュメントに unix_socket 指定の方法があったので、それを真似て config/app.php に追加して試す。
config/app.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php return [ // ... 'Datasources' => [ 'default' => [ 'className' => 'Cake\Database\Connection', 'driver' => 'Cake\Database\Driver\Mysql', 'persistent' => false, 'host' => 'localhost', //'port' => 'nonstandard_port_number', 'username' => 'username', 'password' => 'password', 'database' => 'cake_bookmarks', 'encoding' => 'utf8', 'timezone' => 'UTC', 'cacheMetadata' => true, 'log' => false, 'quoteIdentifiers' => false, 'unix_socket' => '/path/to/mysql/mysql.sock' ], // ... |
1 |
'unix_socket' => '/path/to/mysql/mysql.sock' |
の行を追加して、MySQL のソケットのパスを指定しました。結論から言うとこれが正解で、上手く MySQL データベースに接続できるようになった。
マイグレーションやり直し
Datasources に MySQL ソケットの場所を指定した後に、もう一度マイグレーションを実行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
$ bin/cake migrations migrate Welcome to CakePHP v3.1.0 Console --------------------------------------------------------------- App : src Path: /path/to/CakePHP/tutorials/bookmarker/src/ PHP : 5.5.19 --------------------------------------------------------------- using migration path /path/to/CakePHP/tutorials/bookmarker/config/Migrations using environment default using adapter mysql using database cake_bookmarks == 20151007022746 CreateUsers: migrating == 20151007022746 CreateUsers: migrated 0.0242s == 20151007023000 CreateBookmarks: migrating == 20151007023000 CreateBookmarks: migrated 0.0219s == 20151007023018 CreateTags: migrating == 20151007023018 CreateTags: migrated 0.0183s == 20151007023029 CreateBookmarksTags: migrating == 20151007023029 CreateBookmarksTags: migrated 0.0198s All Done. Took 0.1168s |
今度は上手く行きました。CakePHP はバージョンが 3 になってかなり使いやすくなっている印象。これまでのところ、ほとんど Rails と同じ感覚で使える感じです。
- – 参考リンク –
- php – SQLSTATE[HY000] [2002] No such file or directory – Stack Overflow
- Starting with Zend Tutorial – Zend_DB_Adapter throws Exception: “SQLSTATE[HY000] [2002] No such file or directory” – Stack Overflow
- PHP & CakePHP の関連記事
- PHP+MySQLでNo such file or directoryエラー
- bin/cakeコマンドでintlエラーが出る場合の対処(CakePHP)
- CakePHPアプリケーションをCapistranoでデプロイ
- Integrity constraint violation:Column ‘created’ in order clause is ambiguousエラー/CakePHP
- CakePHPでDB関連テーブルのレコード・データを取得
- CakePHPでカラム属性に別名/エイリアスを付ける仮想フィールド
- CakePHPで日付選択フォームのカスタマイズ
- CakePHP3で現在のコントローラー名・アクション名を取得
- PHPインストールでconfigure: error: freetype.h not foundエラー
- CakePHPでログイン後に元のページにリダイレクトさせる
- 初回公開日: 2015年10月7日
Leave Your Message!