とあるサーバーのMySQLのバージョンを確認したら、なんと驚きの MySQL 3.23.58。いくらなんでも古すぎるので、最新のMySQL5.0 をインストールしたら、連鎖的に DBD::mysql , PHP までバージョンアップすることになってしまったという作業ログ。
今回は、すでに MySQL 用のユーザーなどが存在しますが、クリーンインストールの場合は、mysql 用のユーザーを以下のサイトを参考に作成。
まずは、現在稼働している、MySQL 3.23.58 のプロセスを終了。
/etc/rc.d/init.d/mysqld stop
MySQL のソースをダンロード
MySQLAB :: MySQL 5.0 Downloads# wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.45.tar.gz/from/http://ftp.iij.ad.jp/pub/db/mysql/ # tar zxvf mysql-5.0.45.tar.gz # cd mysql-5.0.45 # ./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-extra-charsets=all --with-mysqld-user=mysql # make # make install
MySQLの設定ファイルをコピーして、文字コードの設定を追加。
#cp ./support-files/my-medium.cnf /etc/my.cnf #vi /etc/my.cnf 以下の行を追加、修正 [mysqld] default-character-set=utf8 [mysql] default-character-set=utf8 [mysqldump] default-character-set=utf8
データベースの初期化をおこなうスクリプトを起動
./scripts/mysql_install_db --user=mysql
起動スクリプトをコピーしつつ、MySQLを起動。
# cp ./support-files/mysql.server /etc/rc.d/init.d/mysql # chmod +x /etc/rc.d/init.d/mysql # /etc/rc.d/init.d/mysql start
MySQL の root パスワードを設定する。
# /usr/local/mysql/bin/mysqladmin -u root password パスワード文字列 # /usr/local/mysql/bin/mysql -u root -p テスト用のDBとユーザーを作ってみる mysql > create database mytest; mysql > grant ALL PRIVILEGES on mytest.* to 'testuser'@'localhost' identified by 'パスワード文字列';
次に、DBD::mysql もかなり古いバージョンが入っていたので、最新にアップデート。cpan からだとエラーが出まくって、うまくアップデートできなかったので、こちらもソースから。
Patrick Galbraith / DBD-mysql - search.cpan.org# wget http://search.cpan.org/CPAN/authors/id/C/CA/CAPTTOFU/DBD-mysql-4.005.tar.gz # tar xvfz DBD-mysql-4.005.tar.gz # cd DBD-mysql-4.005
ここで普通にmake, make testを走らせたところ、山のようなエラーがでた。つまずいたところを見ると、こんな感じ。
t/00base.............install_driver(mysql) failed: Can't load '/usr/local/src/DBD-mysql-4.005/blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: libmysqlclient.so.15: cannot open shared object file: No such file or directory at /usr/lib/perl5/5.8.5/i386-linux-thread-multi/DynaLoader.pm line 230.
エラーメッセージのキーワーでググってみる。どうも、古いMySQL の共有ライブラリなどが /usr/lib/mysql/ などに残ってしまっていて、そちらを参照してエラーになっているよう。
MySQL AB :: MySQL 5.1 リファレンスマニュアル :: 2.15.3 Perl DBI/DBD インターフェースを使用した際の問題
なので、ld.so.conf を編集して、新しいパスを指定してあげる必要がある。
# vi /etc/ld.so.conf /usr/lib/mysql/ を削除して、以下を追加 /usr/local/mysql/lib/mysql
保存をしたら、以下で設定を反映。
# /sbin/ldconfig
完了したら、DBD-mysql-4.005のディレクトリーに戻って、make を続ける。その他に、テストに必要な引数も追加。
# cd DBD-mysql-4.005 (実際には改行せずに引数を指定) # perl Makefile.PL --cflags="-I/usr/local/mysql/include/mysql" --libs="-L/usr/local/mysql/lib/mysql -lmysqlclient -lz -lcrypt -lnsl -lm" --testhost="localhost" --testuser="testuser" --testpassword="パスワード文字列" # make # make testエラー無しで通った!ので、
# make install
これで、めでたく DBD::mysql も最新の4.005 にアップグレードされました。 と思ったら、今度は Apache の php モジュールがうまく動かなくなった。多分、これも旧 MySQL 依存だと思われるので、PHPもこの際、最新版にしてしまう。
# wget http://jp.php.net/get/php-5.2.3.tar.gz/from/this/mirror # tar xvfz php-5.2.3.tar.gz # cd php-5.2.3 # ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql # make
とすると、こんなエラー
ext/mysql/.libs/php_mysql.o(.text+0x2219): In function `zif_mysql_create_db': /usr/local/src/php-5.2.3/ext/mysql/php_mysql.c:1198: undefined reference to `mysql_create_db' ext/mysql/.libs/php_mysql.o(.text+0x2434): In function `zif_mysql_drop_db': /usr/local/src/php-5.2.3/ext/mysql/php_mysql.c:1237: undefined reference to `mysql_drop_db' collect2: ld returned 1 exit status make: *** [sapi/cli/php] Error 1
これも、例によって、古いライブラリ依存だと思われるので,以下で新しいライブラリに置き換え。
# cd /usr/include/ # mv mysql/ mysql.backup # ln -s /usr/local/mysql/include /usr/include/mysql
そして再び
# make clean # ./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql=/usr/local/mysql # make # make test でOKが出たので、Apacheを止めて、インストール # apachectl stop # make install # apachectl configtest Syntax OK # apachectl start
ふーー。これで長いバージョンアップの道のりが終了した。

ブックマーク & Twitter & はてなスター
コメント