今まで v3.23.x を使っていたんだが、v4.1 にアップグレードしてみた。
というのも、裏で Nucleus の各種バージョンをテスト用にインストールしてあるんだが、何かの拍子におかしくなって、公開してるところ(ここ)まで変な表示なるときがある。まぁバージョンアップで直るかどうかは?なんだが、でもいいかげん v3.23 はないだろ?ってことでバージョンアップしてみた。v4.0 以降からはクエリキャッシュも効くそうで、多少レスポンス良くなるかも。って今でもマシンスペックを考えると充分速いとは思うけど...
ということでまずは
最新の MySQL v4.1.11をダウンロード。
MySQL のサイト見ると、バイナリ版を使った方がいいよ、とはあるんだが、うちの OS のバイナリは
無いんじゃ!ということで、ダウンロードページに一番下の方にある、Source downloads の Tarball を貰ってくることに。
それと、いきなり上書きするのは不安だったので、configure するときに --prefix=/usr/local/mysql4.1 と指定して、既存のものとは別のところにいれることにした。
make を実行して待つこと1時間近く。その間に Nucleus のドキュメントアップデートして、cvs にコミットしてっと ^^;
無事ビルドが終わったら make install して /usr/local/mysql4.1 以下にコピーされたことを確認。
その後データベースを作成。今までのは /home/mysqldata にあるので、新しいやつは /home/mysqldata4.1 とした。
scripts/mysql_install_db --datadir=/home/mysqldata4.1
さらに、mysql というユーザーで使用するので、chown で持ち主を変更しておく。
準備ができたので v4.1 を起動。このとき port を 3307(デフォルトは 3306 で v3.23 がすでに使用中)、socket を /tmp/mysql4.1.sock に指定。で、とある事情により、--old-passwords をいうオプションも付けて起動。
これは何かというと、v4.1 からは、パスワードハッシュアルゴリズムに基づく認証プロトコルが使用されるが、古いクライアントとは互換性がない。つまり古い mysql コマンドからはログインできない。なのでサーバーを起動するとき、古いパスワードハッシュアルゴリズムを使用するように指定する(下記は当然全部1行)。
/usr/local/mysql4.1/bin/mysqld_safe --user=mysql
--datadir=/home/mysqldata4.1 --old-passwords
--port=3307 --socket=/tmp/mysql4.1.sock &
無事起動ができたら、いつものように root のパスワードを作成して、匿名アカウントを削除して。さらに nucleus のデータベースとアカウントを作成。
Nucleus の管理画面にいってデータベースのバックアップ。このファイルを新しい方に食わせてやる。この時点で古い方の mysql サーバーは止めてしまってかまわない。
mysql --socket=/tmp/mysql4.1.sock --port=3307 -u root nucleus
< /tmp/nucleus_db_backup_20050408.sql
上の nucleus ってのが nucleus 用に作ったデータベースの名前。後ろの /tmp/... 以下が先程バックアップしたファイル。
無事取り込みができたら、一旦 mysql サーバーを終了。古い方がまだ動いてたらそれも終了。今度は新しいサーバーをデフォルト port で起動。
/usr/local/mysql4.1/bin/mysqld_safe --user=mysql
--datadir=/home/mysqldata4.1 --old-passwords &
再度 mysql クライアントで今度は念のため nucleus 用のアカウントでログインしてみる。
mysql -p -u nucleus
うまく繋がるようなら、web からアクセス。いぇ~!無事表示されたぞっと。
すべて滞りなく済んだら、/etc/rc.local の mysql の起動部分を新しいものに修正。
念のためリブートしとくといいんだが、やらんかった ^^;
ところで、v4.1 のクライアントは /usr/local/mysql4.1/bin/mysql にあるんだが、起動すると
/usr/libexec/ld.so: mysql: ../libmysql/.libs/libmysqlclient.so.14.0:
No such file or directory
ってエラーが出る。
ldd すると
../libmysql/.libs/libmysqlclient.so.14.0 (0x0)
って出てるし、なんで相対パス?インストール途中に libtool がどうのこうのって出てたし、そのあたりも新しくしてビルドし直さないと駄目ってことか? まぁとりあえず古いクライアントからも繋がるしほっとこうっと。
【追記】
phpMyAdmin 2.6.1 がセットアップ済みだったので、それ経由でアクセスしてみた。エラーが出た。ドキュメント見ると MySQL 4.1.2 以降使う場合は phpMyAdmin 用のテーブルを拡張しなきゃいけないらしい。ということでやってみたが、尚まだエラー...
ってかエラーの内容は pma_reloadnavigation() が見つからないという、あまり関係なさそうな内容のような気がするんだが、アップグレード前はちゃんと使えてたしなぁ。
ちなみに 2.6.2-rc1 というのもあったのでそれインストールして試してみたら繋がった。日本語表示もちゃんとされてるんだが、肝心のテーブルの中身を表示すると文字化けしてるし。ぉぃぉぃ...
当然 2.6.1 で使えてたときは文字化けなんてしてなかったし、コマンドラインから mysql クライアントでアクセスして表示させるとちゃんと UTF-8 で格納されてるのが確認できるし。
【追記2】
高速化のためにも configure するとき --disable-shared しとくといいようだ。他にも gcc の最適化を有効にしてビルドするといい、ということで最終的には以下のような設定でビルドしなおしてみた。
CFLAGS="-O3 -mpentiumpro" CXX=gcc
CXXFLAGS="-O3 -mpentiumpro -felide-constructors -fno-exceptions -fno-rtti"
./configure --prefix=/usr/local/mysql4.1 --disable-shared
当然 mysql クライアントのサイズはでかくなってるが、libmysqlclient.so.14.0 が見つからないとかわけわからんことは言われなくなる。ちとこの設定で様子みてみるかなぁ。
【追記3】
phpMyAdmin での文字化けの件は、どうやら MySQL4.1 以降を使うとなるようだ。これに関してはまた別エントリーにて。
poker, backgammon, tramadol, casino, insurance, loans