RHEL/CentOS 5 以降など、新しめのディストリビューションで MySQL 4.0 を動作させたい時


 「今時 MySQL 4.0 かよ」という話もあるかもしれないが、過去のしがらみで未だに MySQL 4.0 を泣く泣く使用している環境というのはそれなりにあると思う。そういうケースの殆どは、4.1 以降で文字コード周りが大きく変更され、アプリケーションの更新のコストがかかりすぎるといった感じだろう。

 だがしかし、MySQL 4.0 がリリースされてもはや 5 年以上、そろそろ OS 側のサポート期限が切れつつあると考えられる。MySQL 4.0 のころは RHEL/CentOS 4 前後だとは思うが、その RHEL 4 のサポート期限は来年早々の2012年2月29日、CentOS 4 も同等だがプロジェクト内でゴタゴタしていて今後更新されるかもあやしいかと思う。そういった状況で実機のリプレイスを考える場合、MySQL のバージョンはそのままに、でも OS はセキュリティの関係でできるだけ最新にしたいというケースがあるだろう。

 ちょうど仕事でそういうケースに遭遇したので、今回は新しめのディストリビューションで MySQL 4.0 を動かす場合の注意点を考えていきたい。

 注意すべき点は以下の 2 点。

  1. glibc のバージョンが 2.4 以上か?
  2. gcc のバージョンが 4.2 以上か?

 glibc のバージョンが 2.4 以上の場合、スレッドライブラリは LinuxThreads ではなく NPTL のみになる。そのため、パッチを当てた上で configure オプションに --with-named-thread-libs="-lpthread" を渡す必要がある。

 gcc が 4.2 以上の場合、MySQL の include/my_global.h で定義している max/min マクロで gcc 4.2 で廃止された gcc 独自拡張である >?, <? を使っているため、やはりパッチを当てる必要がある。

 ちょっと調べた限り、RHEL/CentOS 5 系では 1. が、RHEL 6 系では 1. に加えて 2. が該当した。Gentoo Linux の場合は、x86/amd64 に限って言えば stable でも双方に該当する。そこで、双方に必要なパッチを以下に置いておく。

  1. change_from_linuxthreads_to_nptl.patch
  2. remove_gcc_max_min_operators.patch

 さらに、これを当ててコンパイルした RHEL5/6 向けの RPM を置いておく。それぞれ CentOS 5.6, Scientific Linux 6.0 で x86_64 向けにビルドしてある。

 x86 用など、別のアーキテクチャが必要な場合は、以下の SRPM からビルドすればいいかと思われる。

 軽く動作確認はしてはいるが完全に検証したわけではないので、クリティカルな箇所で使う場合は十分な検証をお願いしたい。