schedule2019-09-25

【Laravel】CentOSのLAMP環境でcould not find driver

LAMP環境でLaravelを動かしてcould not find driverが出た時に、解決した方法についてです。

LaravelからMySQLに接続したときに、ドライバーがないためエラーになっています。

環境

  • CentOS 7.6
  • Apache 2.4
  • MySQL 5.7.27
  • PHP 7.3.10

ドライバーを確認する

phpのモジュールにMySQLのドライバーが入っているか確認します。 PDOがSQLのドライバーにあたります。

$ php -m | grep pdo
pdo_sqlite

SQLite向けのドライバーしかありませんでした。 モジュールをまとめてインストールした際に、入れ忘れてたようです。

ドライバーをインストールする

MySQLのドライバーはphp-mysqlndですので、これをインストールしていきます。

PHP7.3はremiリポジトリを使っていたため以下のコマンドでphp-mysqlndをインストールします。

$ sudo yum -y install --enablerepo=remi,remi-php73 php-mysqlnd

remiリポジトリを使っていない場合(PHP 5.x)以下のコマンドでインストールできると思います。

# バージョンを確認
$ sudo yum info php-mysqlnd

# インストール
$ sudo yum install php-mysqlnd

インストールしてpdo_mysqlが追加されています。

$ php -m | grep pdo
pdo_mysql
pdo_sqlite

この後、Apacheを再起動するとエラーが解消されていました。

おまけ:試行錯誤したときのログ

ドライバーがないことを知らず、パスが通ってないと考えていました。 php.iniに拡張モジュールを指定できる設定があり、これを変更したときのWarning。

php.iniextension=php_pdo_mysql.soを加えました。

$ php -m | grep pdo
PHP Warning:  PHP Startup: Unable to load dynamic library 'php_pdo_mysql.so' (tried: /usr/lib64/php/modules/php_pdo_mysql.so (/usr/lib64/php/modules/php_pdo_mysql.so: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/php_pdo_mysql.so.so (/usr/lib64/php/modules/php_pdo_mysql.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
pdo_mysql

存在しないモジュールを指定すると、こういった警告が出るようです。 php-mysqlndをインストールした後は、extensionをコメントアウトに戻しておきました。

PHPモジュールは/usr/lib64/php/modules/にまとまっています。