MySQL 5.1がGAになってからしばらく経ったのに使った事無かったので、今やっている実験プロジェクトで採用してみた。
CentOSの標準パッケージだとmysqlのバージョンは5.0。mysql関連パッケージもmysql-5.0に依存しているので、その辺をクリアする必要がある。
とりあえず手順やエラーメッセージのみを簡潔に説明。
1. 既存のMySQLパッケージを(インストールされていれば)アンインストール
2. MySQL公式サイトからのRPMパッケージをインストール
この辺りからパッケージをダウンロード。使用したのは以下のもの。
- MySQL-client-community-5.1.34-0.rhel5.i386.rpm
- MySQL-server-community-5.1.34-0.rhel5.i386.rpm
- MySQL-shared-community-5.1.34-0.rhel5.i386.rpm
rpm -ivhで普通にインストールすればOK。
ここまでは特に問題ないと思うんだけど、php-mysqlをインストールしようとして問題発生。
3. php-mysqlのインストール
[root@host downloads]# yum install php-mysql (中略) mysql-5.0.45-7.el5.i386 from base has depsolving problems --> mysql conflicts with MySQL-server-community Error: mysql conflicts with MySQL-server-community
php-mysqlはCentOS標準のmysqlパッケージに依存してるんだけど、mysqlは先ほどインストールしたMySQL-server-communityと競合している。
rpmコマンドなら出来るけど、yumコマンドだと依存性を無視したインストールが出来ない。なので、php-mysqlをダウンロードしてrpmコマンドでインストールする必要がある。その為にはyum-utilsパッケージに含まれているyumdownloaderコマンドを使う。
[root@host downloads]# yum install yum-utils
[root@host downloads]# yumdownloader php-mysql
[root@host downloads]# rpm -ivh php-mysql-5.1.6-23.2.el5_3.i386.rpm
エラー: 依存性の欠如:
libmysqlclient.so.15 は php-mysql-5.1.6-23.2.el5_3.i386 に必要とされています
libmysqlclient.so.15(libmysqlclient_15) は php-mysql-5.1.6-23.2.el5_3.i386 に必要とされて います
php-pdo は php-mysql-5.1.6-23.2.el5_3.i386 に必要とされています とりあえずphp-pdoは普通にyumでインストール。
libmysqlclient.soに関してだけど、MySQL 5.1をインストールするとインストールされるのはlibmysqlclient.so.16。php-mysql-5.1が必要としているのはlibmysqlclient.so.15。ここで選択肢は2つかなぁと思う。
- 16から15にシンボリックリンクを貼る
- libmysqlclient.so.15をインストール
前者は簡単なので、今回は後者の方法を試してみた。libmysqlclient.so.15はmysql-5.0.45-7.el5.i386.rpmに含まれている。従って以下のような方法で取り出して、/usr/lib以下にコピー。
[root@host downloads]# yumdownloader mysql [root@host downloads]# rpm2cpio mysql-5.0.45-7.el5.i386.rpm | cpio -id [root@host downloads]# cp -a usr/lib/mysql/libmysqlclient* /usr/lib
これで準備完了。後は依存関係を無視してphp-mysqlをインストールして、apacheを再起動すれば、PHPのMySQL関連関数を使えるようになる。
[root@host downloads]# rpm -ivh --nodeps php-mysql-5.1.6-23.2.el5_3.i386.rpm [root@host downloads]# /etc/init.d/httpd restart
/usr/bin/mysql_install_db
最初からインストールするとき、最後に以上の処理の必要があるみたいです。
コメントありがとうございます。
手元に環境がないので、MySQL-* (MySQL本家からのパッケージ)だとどうだかは確認できないのですが、CentOSのmysql-5.0.x パッケージだと、/etc/init.d/mysqld の中で、dataディレクトリがなければ mysql_install_db を勝手に実行するようになっていますね。
本家のパッケージがどうなってるかはともかく、もし mysql_install_db が実行されていない場合は手動で実行する必要がある、というのは認識しておく必要がありそうですね。