Goal
* PHPを再インストールせずに、PDOのmySQLドライバを組み込む
* 拡張モジュールをソースからインストールする
Preparation
##
## 実行環境情報
##
$> uname -a
Linux *** 2.6.32-431.5.1.el6.x86_64 #1 SMP Wed Feb 12 00:41:43 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$> cat /etc/issue
CentOS release 6.5 (Final)
Kernel \r on an \m
$> whoami
root
## mySQL installディレクトリ(64bit targz install)
$> ls /usr/local/mysql
## PHP installディレクトリ(source install)
$> ls /usr/local/php
## php.ini (/usr/local/php/bin/php -i | grep php.iniで確認可)
$> ls /usr/local/php/lib/php.ini
##
## PHP version
##
$> /usr/local/php/bin/php -v
# PHP 5.3.28 (cli) (built: Feb 22 2014 20:40:54)
# Copyright (c) 1997-2013 The PHP Group
# Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies
Manual
Milestone
* pecl downloadコマンドでダウンロード
* mySQLをtarballからインストール、phpをソースからインストールしているので、そのパスを指定してビルドする
* php.iniにpdo_mysql.soを指定してapacheを再起動
* libmysqlclient.so.XXが見つからないエラーが出た場合は、共有ライブラリパスを登録して再実行
Download
cd /usr/local/src
# /usr/local/src以下で作業する
/usr/local/php/bin/pecl download pdo_mysql
tar zxvf PDO_MYSQL-1.0.2.tgz
cd PDO_MYSQL-1.0.2
Build / Install
/usr/local/php/bin/phpize
./configure --with-pdo-mysql=/usr/local/mysql --with-php-config=/usr/local/php/bin/php-config
# たぶんphpのパスが通ってないからか、php-configの場所を指定するよう警告が出るので、--with-php-configオプションをつける
make
make test
make install
# Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
Include
vi /usr/local/php/lib/php.ini
# Dynamic Extensionsブロックに以下のようにインストールしたpdo_mysql.soを追加
# soのpathは、php -i | grep extension_dirを確認すると、
# /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626以下を見てくれることを確認できる
# 別のパスを指定したい場合はextension=のうしろをフルパスで指定することもできるっぽい
;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;
extension=pdo_mysql.so
Reload
##
## gracefulで反映(gracefulでも反映された)
##
/usr/local/apache/bin/apachectrl graceful
##
## 反映を確認
##
/usr/local/php/bin/php -i | grep pdo_mysql
ldconfig (以下のようなエラーでpdo_mysql読み込みが失敗する場合のみ実施)
エラー
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/pdo_mysql.so' - libmysqlclient.so.18: cannot open shared object file: No such file or directory in Unknown on line 0
ldconfig -p | grep mysql
# libmysqlclient.so.18のパスが通ってないことを確認
# libmysqlclient_r.so.16 (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient_r.so.16
# libmysqlclient.so.16 (libc6,x86-64) => /usr/lib64/mysql/libmysqlclient.so.16
ls /etc/ld.so.conf.d/mysql-x86_64.conf
vi /etc/ld.so.conf.d/mysql-x86_64.conf
# /usr/local/mysql/lib
ldconfig
# キャッシュをクリアして更新
ldconfig -p | grep mysql
# libmysqlclient.so.18のパスが通ったことを確認
# libtcmalloc_minimal.so.0 (libc6,x86-64) => /usr/local/mysql/lib/libtcmalloc_minimal.so.0
# libmysqlclient.so.18 (libc6,x86-64) => /usr/local/mysql/lib/libmysqlclient.so.18
# libmysqlclient.so (libc6,x86-64) => /usr/local/mysql/lib/libmysqlclient.so