LinuxにMySQL4.1, MySQL5.0をインストールする手順 (rpm編)

2005/10/06 変更

Vine3.2の方は、おそらくphpMyAdminもインストールされるでしょうからVine Linux 3.0にphpMyAdminをインストールする手順のほうを参考にしてください。

Vine4.0でMySQL5.0を使う場合、MySQL本家のrpmを使ったほうが便利だと思います。Vine Linux 4でMySQL5.0のほうを参考にしてください。

MySQL本家から配布されているrpmパッケージをVine3.2にインストールしてみましたのでご報告です。

MySQL4.1やMySQL5.0を利用したい場合、この方法となります。


MySQL4.1での注意事項

MySQL4.0までは文字コードをあまり意識する必要はありませんでした。 特別な設定をしなくてもバイナリ・ベースで動いていたので「とりあえず動く」という状態でした。

しかし、MySQL4.1からは文字コード関係が少し難しくなりました。そこでインストールする前に注意点を書いておきます。 これを読んで、それでもMySQL4.1をインストールしたい場合のみ、自己責任でお願いします。

  1. MySQL4.0からバージョンUPする場合、文字コードの関係もあるため、MySQL4.0のmysqldumpでデータをダンプしておき、MySQL4.1でインポートする必要が(たぶん)あります。このほうが無難だと思います。
  2. MySQL4.1を利用する場合、PHPなどのクライアントは必ず再コンパイルが必要です。
    Vineの場合、SRPMをリビルドすればOKです。これについてはこのメモの後半でふれます。
  3. MySQL4.1の本家rpmでは、初期値では日本語が使えるようになっていません。日本語のデータを利用するには以下のいずれかが必要です。
    • PHPなどから接続したときは、「SET NAMES UJIS」というSQLを最初に実行してください(クライアント側の文字コードにあわせるようにします)。
    • 上記を行いたくない場合(現状のプログラムを変更したくない場合)、MySQL4.1自体を再コンパイルします。リビルドした場合、「SET NAMES UJIS」のSQLを実行する必要はなくなります。
  4. phpMyAdminはMySQL4.1の環境でも自動認識してうまく動きますが、設定を変える必要があります。うちではphpMyAdminをMySQL4.1で利用するでうまくいきました。

MySQL5.0での特記事項

そろそろMySQL5.0が出そうな雰囲気なので、テストサーバで少し使ったときに気になったことをメモしておきます。

MySQL5.0では日本語関係がずいぶんスマートになったようです。 基本的にはMySQL4.1と同等の制約がありますが、「eucjpms」っていう文字コードを指定できるようになりました。

クライアントがeucjpmsになっている場合、MS-ShiftJISで表現できる文字を文字化けせずにMySQLで扱えるようです。


MySQL4.1, MySQL5.0の再コンパイル

ここでは、MySQL4.1やMySQL5.0をMySQL本家が配布しているrpmを利用して再コンパイルする方法を書いておきます。 上記「MySQL4.1での注意事項」で「SET NAMES UJIS」を毎回、実行したくない場合は次のようにするとうまくいくようです。

なお、MySQL5.0をインストールする場合でも手法は同じです。バージョン表記を読み替えてインストールすると、Vine3.2でMySQL5.0を利用することも可能です。

  1. VineLinux3.2ではフルインストールしてもmakeできるパッケージが不足していますので、パッケージをインストールします。
    $ su
    # apt-get update
    # apt-get install ncurses-devel zlib-devel
    # exit
  2. MySQL The World's Most Popular Open Source Databaseの「Downloads」の「Source downloads」から「Source RPM」をダウンロードします。
    Vineの場合、一般ユーザーでログインして「/home/USERNAME/rpm/SRPMS」の中にダウンロードしてください。
    ここではMySQL-4.1.14-0.src.rpmをダウンロードしたこととして書きます。
  3. ソース・パッケージをインストールします。一般ユーザーで行います。
    $ cd ~/rpm/SRPMS
    $ rpm -ivh MySQL-4.1.14-0.src.rpm
  4. SPECを変更し、デフォルトのcharsetをujisにします。
    $ cd ~/rpm/SPECS
    $ emacs mysql-4.1.14.spec
    		./configure \
    			$* \
    			--with-charset=ujis \ ← MySQL4.1の場合
    			--with-charset=eucjpms \ ← MySQL5.0の場合
    			--enable-assembler \
    			--enable-local-infile \
    			--with-mysqld-user=%{mysqld_user} \
    			--with-unix-socket-path=/var/lib/mysql/mysql.sock \
    			--prefix=/ \
    			--with-extra-charsets=complex \
    			--exec-prefix=%{_exec_prefix} \
    			--libexecdir=%{_sbindir} \
    			--libdir=%{_libdir} \
    			--sysconfdir=%{_sysconfdir} \
    			--datadir=%{_datadir} \
    			--localstatedir=/var/lib/mysql \
    			--infodir=%{_infodir} \
    			--includedir=%{_includedir} \
    			--mandir=%{_mandir} \
    			--enable-thread-safe-client \
    			--with-readline ;
    さらに、Vine3.xでは以下の変更が必要のようです。
    Requires: coreutils grep procps /usr/sbin/useradd /usr/sbin/groupadd /sbin/chkconfig
        ↓ coreutilsを消します。
    Requires: grep procps /usr/sbin/useradd /usr/sbin/groupadd /sbin/chkconfig
  5. コンパイルします。かなり時間がかかります。
    $ rpm -ba mysql-4.1.14.spec

コンパイルが終了すると /home/USERNAME/rpm/RPMS/i386にrpmが出来上がります。 以下の説明では、MySQL本家からダウンロードするかわりに、こちらをインストールするようにしましょう。


MySQLをインストール

  1. MySQL The World's Most Popular Open Source Databaseの「Downloads」からrpmパッケージをダウンロードします。
    Downloadsの中でMySQLのバージョンを選択して「Linux x86 RPM downloads」という所からダウンロードします。私は次のパッケージをダウンロードしてみました。

    MySQL-Max-4.1.14-0.glibc23.i386.rpm
    MySQL-client-4.1.14-0.glibc23.i386.rpm
    MySQL-devel-4.1.14-0.glibc23.i386.rpm
    MySQL-server-4.1.14-0.glibc23.i386.rpm
    MySQL-shared-4.1.14-0.glibc23.i386.rpm

  2. 後は、すべてのrpmをインストールするだけです。
    $ su とした後、

    # rpm -Uvh MySQL-server-4.1.14-0.glibc23.i386.rpm
    # rpm -Uvh MySQL-Max-4.1.14-0.glibc23.i386.rpm
    # rpm -Uvh MySQL-client-4.1.14-0.glibc23.i386.rpm
    # rpm -Uvh MySQL-shared-4.1.14-0.glibc23.i386.rpm
    # rpm -Uvh MySQL-devel-4.1.14-0.glibc23.i386.rpm

    インストールが終了したらrootから抜けます。
    # exit
  3. インストールが正常に終わっているかを確認します。
    $ mysqlshow
    次のように表示されれば正常にインストールされ、MySQLサービスも開始しています。(MySQLのバージョンによって表示されるデータベースは違います。
    +-----------+
    | Databases |
    +-----------+
    | test       |
    +-----------+
  4. MySQLはLinuxのアカウントとは別に、MySQL用のアカウントがあります。
    初期状態ではMySQLのrootアカウントにパスワードが設定されていませんのでパスワードを設定しておきます。
    次の入力部分で「パスワード」となっているところは、あなたが設定するrootパスワードに読み替えてください。
    $ mysql -u root
    
    mysql> set password=password('パスワード');
    
    mysql> exit
    		
    rootパスワードは絶対に忘れないようにしてください。

これでインストールされ、サービスも自動的に起動されます。 この後、設定を変更します。


設定の変更

my.cnfのヒナ形をコピーします。
$ su
# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
/etc/mycnfをエディタで編集しします。最低限、以下は設定しておきましょう。
[mysqld]
default-character-set=ujis

[mysqldump]
default-character-set=ujis

[mysql]
default-character-set=ujis

この後、MySQLデーモンを再起動します。
# /etc/init.d/mysql restart


PHPのリビルド

MySQL4.1を上記の方法でインストールした場合、PHPをリビルドする必要があります。(MySQL4.0では不要です)

以下にリビルドの方法をメモしておきます。

なお、あくまで自己責任でお願いしますが、うちでリビルドしたバイナリをここに置いておきます。私の倉庫代わりに置いておきました。

  1. リビルドに必要なパッケージをインストールしておきます。

    PHP5の場合
    apt-get install apache-devel gdbm-devel openssl-devel
    apt-get install pam-devel freetype-devel gd-devel
    apt-get install libjpeg-devel libpng-devel zlib-devel
    apt-get install unixODBC-devel libxml2-devel unixODBC
    apt-get install gmp-devel pcre-devel libxslt-devel automake15
    apt-get install curl-devel expat freetype2-devel imap-devel
    apt-get install libsablotron0 libsablotron0-devel sablotron
    apt-get install bzip2-devel db4-devel ncurses-devel
    apt-get install libelf-devel net-snmp net-snmp-devel
    apt-get install postgresql-devel postgresql-libs
    apt-get install cyrus-sasl-devel openldap openldap-devel
    apt-get install expat-devel libmcrypt libmcrypt-devel
    apt-get install apache2 apache2-devel

    PHP4の場合、上記以外に以下も必要のようです。
    PHP4の場合
    apt-get install namazu-devel kakasi-devel rpm-devel

  2. PHPのMySQLクライント・ライブラリをアンインストールしておきます。
    $ su
    # rpm -e php5-mysql ← PHP5の場合
    # rpm -e php-mysql ← PHP4の場合
    # exit
  3. 上記までの説明どおり、先にMySQL4.1をインストールしておきます。先にMySQL4.1をインストールしておかないとリビルドしても新しいライブラリがリンクされませんので、必ず先にMySQL4.1をインストールしておいてください。
  4. Vineのsrc.rpmをインストールします。一般ユーザーで行います。
    $ apt-get source php5 ←PHP5
    $ apt-get source php ←PHP4
  5. リビルドします。かなり時間がかかります。
    $ cd ~/rpm/SPECS
    $ rpm -ba php5.spec ← PHP5の場合
    $ rpm -ba php.spec ← PHP4の場合
  6. リビルドが成功すると /home/USERNAME/rpm/RPMS/i386 の中にいくつかのrpmパッケージができます。
    この中で必要となるのはMySQLのクライアント・モジュールだけです。これをインストールします。
    $ cd ~/rpm/RPMS/i386
    $ su
    # rpm -Uvh php5-mysql-5.0.3-0vl3.i386.rpm ← PHP5の場合
    # rpm -Uvh php-mysql-4.3.10-0vl2.i386.rpm ← PHP4の場合
  7. Apacheを再起動します。
    # /etc/init.d/httpd restart

MySQL4.0からMySQL4.1へのデータ移行

これは未確認ですが、おそらく文字コードの関係からMySQL4.0からMySQL4.1へバージョンUPした場合にはデータベースがうまく引き継がれないと思います。

そこで、私はMySQL4.0からMySQL4.1へのデータ移行はmysqldumpを利用してデータを移転することにしました。

db_conv.tar.gzのシェルスクリプトで全データベースを移転させました。この方法では漢字データベース名・漢字テーブル名などもちゃんと引き継がれます。

ただし、この方法では制約もあります。

  • FOREIGN KEY(外部キー)が定義されているとうまくいきません。
  • MySQL4.0まではCHARやVARCHARの長さ指定がバイト長でした。 しかし、MySQL4.1からは文字長に変わりました。 このスクリプトではそのままの数値を文字長として移行しようとします。
    たとえば、「vharchar(100)」はMySQL4.0では「100バイト」を意味しますが、MySQL4.1では「100文字」という意味になります。
    そのため、キーが大きすぎると Specified key was too long のエラーが出ます。

データベースを移転する場合は事前にテスト・サーバで動作確認するようにしてください。

以下にこのスクリプトの利用法を書いておきます。
このファイルを解凍すると「backup.sh」「table_conv.sh」「data_conv.sh」の3つが出来ます。
それぞれのファイルは次の目的で利用します。

backup.sh MySQL4.0の全データベースをバックアップします。tarでデータベース別に圧縮されます。 カレント・ディレクトリにmysqlというサブ・ディレクトリが生成され、そこに*.tar.gzが作られます。
table_conv.sh backup.shを利用して作成した*.tar.gzを利用して、MySQL4.1にデータベースとテーブルを生成します。 このスクリプトを実行すると、データベース自体を削除してから、再生成し直しますので、そのつもりでお願いします。
data_conv.sh backup.shを利用して作成した*.tar.gzを利用して、MySQL4.1にデータ自体をインポートします。

上記スクリプトでは、MySQL4.0の環境でbackup.shを使ってデータベースをバックアップ後、 MySQL4.1をインストールし、table_conv.shを実行します。これでMySQL4.1上でデータベースやテーブル作られます。 この後、data_conv.shを実行してデータ自体をインポートします。

table_conv.shとdata_conv.shではエラーが出るかもしれませんので、エラーとなったデータは、ご自身で対処する必要があります。

最後に権限テーブルの更新をします。
mysql -f -uroot mysql -p < /usr/share/mysql/mysql_fix_privilege_tables.sql


phpMyAdminをMySQL4.1で利用する

.htaccessか、httpd.confに次の設定をするとMySQL4.1でphpMyAdminがうまく使えました。

# 出力文字コードをUTF-8にする
php_value default_charset "UTF-8"
# 内部文字コードをUTF-8にする
php_value mbstring.internal_encoding UTF-8
# 出力文字コードをUTF-8にする
php_value mbstring.http_output UTF-8

そして、phpMyAdminのスタート・ページで「MySQL 接続照会順序:」を「utf8_bin」に設定するとうまくいくようです。


参考資料

MyNA Web Site

MySQLのページ トップへ

Copyright©2001-2019 釣ったよ! All Right Reserved.    sg@tsuttayo.jpn.org