【fuelphp】MySQL接続エラー[HY000/2002]と[Call to undefined function Fuel\\Core\\mysqli_init]
はじめに
今更感のある内容ですがけっこうハマったのでメモしておきます。
環境としてはAwsのEC2をWebサーバーにRdsをDBサーバーとする構成で
Webサーバーにはmysql-serverをインストールしていない状況です。
mysql-clientはWebサーバーにインストール済みでmysqlコマンドでの接続は確認できていて、
phpからの接続ができない状態でした。
Call to undefined function Fuel\\Core\\mysqli_init
まず出たエラー内容は以下
Call to undefined function Fuel\\Core\\mysqli_init
Awsにphp5.6が入っていてfuelphpからmysqlに接続できずに出たエラー
yumのログを見るとmysql周りのモジュールがインストールされた記録がないのでおそらくまとめてインストールしたときに見逃したのかもしれない、、、
// yumのログを確認するがログがない grep -i "mysql" /var/log/yum.log* // mysqlndをインストール yum install -y php56-mysqlnd
とりあえずこれでエラーは解消されましたが次のエラーが出ました。
HY000/2002エラー
Uncaught exception Fuel\Core\Database_Exception: mysqli::real_connect(): (HY000/2002): そのようなファイルやディレクトリはありません
よく出るエラーのようです
php.iniの以下を
mysql.default_socket= mysqli.default_socket= pdo_mysql.default_socket=
my.confの以下と合わせないとダメとの記事を見かけたので試してみるも上手くいかず、、、
[mysqld] socket=/var/lib/mysql/mysql.sock
原因(オチ)
mysqliとpdoでconfig/db.phpの記述形式が違うことを知りませんでした
config/db.php
修正前(エラー)
return array( 'default' => array( 'type' => 'mysqli', 'connection' => array( 'dsn' => 'mysql:host=localhost;dbname=fuel_dev' 'username' => 'username', 'password' => 'password', ), ), );
※type = pdoの場合はこの書き方でOK
修正後
return array( 'default' => array( 'type' => 'mysqli', 'connection' => array( 'hostname' => 'hostname', 'username' => 'username', 'password' => 'password', ), ), );
別のプロジェクトでpdoを使っていて、今回はmysqliを使おうとしたのですが書き方が違うんですね、、、
勉強になりました
以上です