=encoding euc-jp =head1 名前 INSTALL - DBD::mysqlのインストールと構成設定の方法 =head1 概要 perl Makefile.PL [options] make make test make install =head1 説明 このドキュメントは、MySQLデータベースのためPerl DBIドラバである DBD::mysqlのインストールと構成設定について説明します。 読み進めるまえに必要なものが利用可能になっているかどうかを 確認してください:Perl、MySQLそしてDBI。詳細については別のセクション Lをご覧ください。 あなたのPerlのバージョンによりますが、DBD::mysqlの バイナリ・ディストリビューションを利用することができかもしれません。 もし可能であれば、これをお勧めします。そうでなければソースから インストールする必要があります。そうだとすれば、間違いなく Cコンパイラが必要になります。バイナリとソースからのインストールは どちらもL<バイナリ・インストール>とL<ソース・インストール>の 別のセクションで説明されています。 最後に、何か問題にぶつかったら既知の問題についてのセクション L<既知の問題>を読むのを忘れないでください。それが助けにならなければ、 メーリング・リストBの アーカイブをご覧になってください。アーカイブの位置については http://www.mysql.com をご覧ください。 それも助けにならなければ、このメーリング・リストに質問を投げてください。 =head1 必要条件 =over =item Perl より望ましくはシステムにあらかじめ設定されているバージョンのPerl。 例えば、全てのLinuxとFreeBSDディストリビューションには Perlが入っています。WindowsではActivePerlをお勧めします。 詳細はhttp://www.activestate.com をご覧ください。 =item MySQL 実際のMySQLデータベース・サーバーをインストールする必要はありません。 クライアント・ファイルと開発ファイルで十分です。例えば Red Hat LinuxディストリビューションではRPMファイル BとBがついてきます。 MySQLサーバーが他のマシンにあれば、これらで十分です。 MySQLソース・ディストリビューションからコンパイルし、 以下のコマンドを使うことによりクライアント・ファイルを 作成することもできます。 configure --without-server Windowsを使っていて、ソースからコンパイルする必要があるならば (これはActivePerlを使っていない場合に限ります)、 ヘッダとライブラリ・ファイルがインストールされていることを 確認してください。これはMySQLセットアップ・プログラムを 実行するときに、"Custom installation"を選び、適切なオプションを 選ぶことが必要になるかもしれません。 =item DBI DBD::mysqlはDBIドライバです。そのためDBIが必要となります。 DBD::mysqlディストリビューションを取得するのと同じ場所から利用できます。 =item C コンパイラ ソースからインストールする場合にはCコンパイラだけが必要です。 ほとんどの場合、DBD::mysqlのバイナリ・ディストリビューションが あります。しかし、Cコンパイラが必要であれば、PerlとMySQLをコンパイル するために使われたものと同じCコンパイラであることを確認してください! そうでなければ、ほとんどの場合、間違いなくベースとなる Cランタイム・ライブラリの違いにより障害にぶつかることでしょう。 最悪の場合、あなた自身でPerlとMySQLをコンパイルすることを意味する かもしれません。しかし私を信じてください、経験上、多くの問題が、 このようにして解決できます。 =item Gzip ライブラリ MySQLの最近のバージョンには圧縮のサポートがついています。このため、 libz-devel、libz-develあるいはそれに類似するもののようなRPM パッケージをインストールすることが必要となるB<かもしれません>。 =back =head1 バイナリ・インストール あなたのシステムによりますが、ほとんどの場合、 バイナリ・インストールが可能です。いくつか例を示しましょう: =head2 Windows ActivePerl は DBD::mysqlのPPMアーカイブを提供しています。 あなたに必要なことは以下のように打ち込むだけです ppm install DBI install DBD-mysql HTTP経由でモジュールを取り出し、それらをインストールします。 WWWプロキシー・サーバーを使う必要があれば、環境変数HTTP_proxyを 設定しなければなりません: set HTTP_proxy=http://my.proxy.server:8000/ ppm install DBI install DBD-mysql もちろん、ホスト名Cとポート番号C<8000>を あなたのローカルな値で置き換えなければいけません。 もし上記の手順がうまくいかなければ、ActivePerlを最新バージョンに アップグレードしてください。build623より前のものには問題があることが わかっています。 PPM 3にはDBD::mysqlがリポジトリにないと言われています。そのため PPM2と比べるとPPM 3 はお勧めできません。PPM3を使う必要があれば、 以下のようにしてください。 ppm rep add PPM2 http://ppm.activestate.com/PPMPackages/5.6plus/ rep 2 install DBI install DBD-mysql =head2 Red Hat Linux バージョン7.1ではRed Hat LinuxはMySQLとDBD::mysqlがついてきます。 以下のRPMがインストールされているかを確認する必要があります: mysql perl-DBI perl-DBD-MySQL ソースからインストールするためには、以下のRPMが必要です mysql-devel libz-devel オプションとしては以下のものがあります mysql-server =head2 その他のシステム LinuxやFreeBSDディストリビューションの場合、Red Hat Linuxがそうである ように、あなたが必要としているものが全てディストリビューションに ついてくることがよくあります。私はこれらのシステムを使ってはいないので、 その名前を挙げることができないだけなのです。 私が上記のリストに追加できるように、SuSE Linux、Debian LinuxやFreeBSD ディストリビューションに、それらのファイルを見つけることができたかを 教えてください。 =head1 ソース・ディストリビューション ここではソースからインストール必要があるとします。ついていれば、 PerlモジュールCが、あなたの代わりに全てをやってくれるでしょう。 Andreas Koenigの素晴らしい作品に感謝。そうでなければ、 あなたは手動インストールを行う必要があります。人によっては、 特に複数のサイトのシステム管理者は、自動インストールを選ぶでしょう。 これらのインストールのタイプの全てについて、それぞれセクションが あります。L、L、L。 =head2 CPANインストール DBD::mysqlのインストールは驚くほど簡単です: cpan install DBD::mysql はじめてCPANモジュールを使うのであれば、ほとんどの場合、正しいデフォルトを 受け入れると回答するだけです。古いバージョンのPerlを使っているならば、 代わりに以下のようにする必要があるかもしれません perl -MCPAN -e shell install DBD::mysql CPANモジュールを動かすことが出来なければ、手動マニュアルを試して みてください。あなたが間違ってしまったために、CPANでのインストールが 失敗するのであれば、試しにCというスクリプトを作って みることができます。これについては後のLで説明 されています。 =head2 手動インストール 手動インストールのためにはDBD::mysqlソース・ディストリビューションを 取得する必要があります。最新バージョンは常に以下のサイトから取得する ことが出来ます http://www.cpan.org/modules/by-module/DBD/ 典型的にはその名前は以下のようなものです DBD-mysql-1.2216.tar.gz アーカイブを解凍する必要があります。WindowsではWinZipのような ツールを使えるかもしれません。Unixでは以下のようにタイプしてください gzip -cd DBD-mysql-1.2216.tar.gz | tar xf - これはサブディレクトリDBD-mysql-1.2216を作成します。このサブディレクトリに 入り、以下のようにタイプしてください perl Makefile.PL make make test (Windowsでは"make"を"nmake"あるいは"dmake"で置き換える必要があるかも しれません。)もしテストがうまくいったように見えたならば、以下のように 続けることが出来ます make install テストが失敗したら、いくつか設定する必要があります。 例えば違うデータベースを選ぶかもしれません、Cコンパイラあるいはリンカーが 何かフラグを必要とするかもしれません。L、L. L。 Windows/CygWinについては、以下に特別なセクションがあります。L。 =head2 構成設定 インストール・スクリプト"Makefile.PL"は、数多くのスイッチを通して 設定することができます。全てのスイッチはコマンド行で利用することができます。 例えば、テストデータベースは: perl Makefile.PL --testdb= これらのスイッチをコマンド行で設定したくなければ、代わりに Cというスクリプトを作ることが出来ます。 これは後で説明します。 利用できるスイッチは以下の通りです: =over =item testdb テスト・データベースの名前。デフォルトはB。 =item testuser テスト・ユーザの名前。デフォルトは空です。もし名前が空であれば、 現在、ログインしているユーザ名が使われます。 =item testpassword テストユーザのパスワード。デフォルトは空。 =item testhost ホスト名あるいはテスト・データベースのIP番号;デフォルトはlocalhost。 =item testport テスト・データベースのポート番号 =item cflags Cコンパイラーに与えたいフラグのリスト。 最も重要なフラグはMySQLヘッダ・ファイルの位置です。 例えばRed Hat Linuxではヘッダ・ファイルは/usr/include/mysqlにあり、 以下のように試してみることができます -I/usr/include/mysql WindowsではヘッダファイルはC:\mysql\includeにあるでしょう。そこで 以下のように試してみることができます -IC:\mysql\include デフォルトのフラグは以下のように実行することにより判定されます mysql_config --cflags Cコンパイラ・フラグについてのさらなる詳細は下記のセクション Lにあります。 =item libs これはリンカーあるいはローダーに与えたいフラグのリストです。 最も重要なフラグは追加のライブラリの位置と名前です。 例えばRed Hat Linuxでは、あなたのMySQLクライアント・ライブラリは /usr/lib/mysqlにあり、以下のように試してみることができます -L/usr/lib/mysql -lmysqlclient -lz Windowsでは、ライブラリはC:\mysql\libにあるでしょう、そして -LC:\mysql\lib -lmysqlclient が、良い選択でしょう。デフォルトのフラグは以下のように実行することで 判定されます mysql_config --libs リンカー・フラグについてのさらなる詳細は、別のセクションL<リンカー・フラグ>に あります。 =back スイッチがコマンド行になければ、スクリプトCが 実行されます。このスクリプトはMySQLディストリビューションの一部 として入っています。例えばCコンパイラ・フラグを判定するためには 以下のように実行します mysql_config --cflags mysql_config --libs データベース名、データベース・ユーザなどを独自の設定にしたければ、 同じ名前を持ち、応答するようなスクリプトを作成する必要があります。 =head2 Cコンパイラ・フラグ 典型的にはCコンパイラのための適切なフラグを判定することは難しい ことではありません。次のセクションにあるリンカー・フラグは また別の話になります。 Cコンパイラ・フラグの判定は通常はFという 構成設定スクリプトに任されます。そしてそれは以下のようにして 呼び出されます mysql_config --cflags こうすると、以下のように提案されるCコンパイラ・フラグが入った行を 吐き出します: -L/usr/include/mysql Cコンパイラはいくつかのヘッダ・ファイルを見つけなければなりません。 ヘッダ・ファイルは拡張子C<.h>を持ちます。例えばMySQLヘッダ・ファイルは F と Fです。ほとんどの場合、デフォルトでは ヘッダ・ファイルはインストールされません。例えばWindowsでは MySQLセットアップ・プログラムでのヘッダ・ファイルをインストールするか どうかはインストールのオプションです(Custom Installation)。 Red Hat Linuxでは、RPMアーカイブF あるいは Fを インストールする必要があります。 ヘッダ・ファイルの位置が判れば、オプションをCコンパイラ・フラグに 追加する必要があります -L<ヘッダ・ファイルのディレクトリ> 例えばC<-L/usr/include/mysql>。 =head2 リンカー・フラグ 適切なリンカー・フラグは、DBD::mysqlをインストールするさい、 最もよくある問題です。わたしはラフな概要を与えるだけです。 トラブルシューティング・セクションL<既知の問題点>に、さらなる 詳細があります。 Cコンパイラ・フラグの判定は通常はFと呼ばれる 構成設定スクリプトに任されます、これは以下のように 呼び出されます mysql_config --libs そうすると、例えば以下のように提案されるCコンパイラ・フラグが 入った行を吐き出します: -L'/usr/lib/mysql' -lmysqlclient -lnsl -lm -lz -lcrypt 通常、以下の要素が典型的にはリンカーを構成設定するために 必要とされます: =over =item mysqlclientライブラリ MySQLクライアント・ライブラリはMySQLディストリビューションの 一部となっています。システムによっては、それは以下のような ファイルでしょう F 静的にリンクされるライブラリ、Unix F 動的にリンクされるライブラリ、Unix F 静的にリンクされるライブラリ、Windows F 動的にリンクされるライブラリ、Windows あるいはその類似のもの。 ヘッダ・ファイルの場合と同じように、クライアント・ライブラリは典型的には デフォルトではインストールされません。Windowsでは、MySQLセットアップ・プログラムを 実行している間に、それらを選択する必要があります(Custom Installation)。 Red Hat LinuxではRPMアーカイブFあるいはFが インストールされなければなりません。 リンカーはmysqlclientライブラリの位置と名前を知っていることが必要です。 これは以下のフラグを追加することにより -L<ライブラリ・ディレクトリ> -lmysqlclient あるいは、完全なパス名を与えることによりおこなうことができます。例えば: -L/usr/lib/mysql -lmysqlclient -LC:\mysql\lib -lmysqlclient /usr/lib/mysql/libmysqlclient.a C:\mysql\lib\mysqlclient.lib 後者の例は静的にリンクされるライブラリです。リンクされる 動的なライブラリが実行時に見つからないのであれば、これが いくつかのケースで必要となるでしょう。 =item gzipライブラリ MySQLクライアントはMySQLサーバーと通信するときに圧縮を使うことが出来ます。 遅いネットワークで大きなテキストを送信したり受信するときには 素晴らしい機能です。 Unixでは典型的には適切なファイルを以下のように実行するとわかるでしょう ldconfig -p | grep libz ldconfig -p | grep libgz 名前がわかってしまえば(libz.aあるいはlibgz.aが一番です)、 それをリンカー・フラグのリストに追加するだけです。これが問題を 起こすようであれば、gzipライブラリなしでリンクすることを試してみる こともできます。 =back =head1 特殊なシステム 特定のシステムについての情報を以下に示します: =head2 Windows/CygWin Cygwin(Redhatディストリビューション)をお使いであれば、既にご存知のように うまく走るperl 5.6.1が入っています。追加モジュールのインストールは 通常は以下の標準の手順によりうまくいきます perl makefile.PL make make test make install MySQLのWindowsバイナリ・ディストリビューションはCygwinの下でも スムーズに動きます。全てのWindowsクライアントを使って問題なく、 サーバーを起動/停止することができます。 しかしDBD::mysqlをインストールするためには少し特別なアクションをとらなければ いけません。 MySQL WindowsやLinux/Unixのバイナリ・ディストリビューションに対しては DBD::mysqlを構築しようとはしないでください:どちらも動きません! Cygwinの下でコンパイルされた'libmysqlclient.a'を得るためには、 Cygwinの下でMySQLクライアントを、あなた自身がコンパイルしなければいけません。 本当です!このライブラリとヘッダ・ファイルだけが必要になります。 クライアントの、その他の部分は必要ではありません。 Windowsバイナリを使い続けてください。そして(現時点では)MySQLサーバー部分を 構築しようとはしないでください。MySQL ABは主流となっているオペレーティング・ システムのために最適化されたバイナリを配布するという素晴らしい仕事を おこなっているので、それは必要ありません。そしてCygwinの下で コンパイルされたサーバーは不安定であるといわれています。 (まだ行っていなければ)MySQLのインストール =over =item - MySQL Windowsバイナリを以下のサイトからダウンロードしてください http://www.mysql.com/downloads/index.html =item - どこか一時的な場所にmysql--win.zipをunzipしてください =item - そこでsetup.exeを起動し、指示に従ってください =item - サーバーを起動してください =item - そうでなければ、リモートサーバー上の、何らかのサポートされているOS上で サーバーをダウンロードし、起動して下さい。 =back Cygwinの下でのMySQLクライアントの構築: =over =item - MySQL LINUXソースを以下のサイトからダウンロードしてください http://www.mysql.com/downloads/index.html =item - どこか一時的な場所にmysql-.tar.gzを解凍してください =item - 解凍したディレクトリmysql-にcdしてください ./configure --prefix=/usr/local/mysql --without-server これはインストールされたCygwinの機能にあわせてMakeFileを用意します。 これには少し時間がかかるかもしれませんが、エラーなしに終わるはずです。 'prefix'は与えられているように、全てのCygwin/MySQLのものを、 あなたが既にインストールされているWindowsバイナリを使い続けられる よう、通常通りにではなく、あなたのPATHにインストールします。 --without-serverパラメータはクライアントだけを構築するよう設定 するように伝えます。 =item - make これが全てのMySQLクライアント部分を構築します...我慢してください。 最後にはエラーなく終わるはずです。 =item - make install これはコンパイルされたクライアント・ファイルを/usr/local/mysql/に インストールします。/usr/local/mysql/libの下にあるライブラリと /usr/local/mysql/includeの下のヘッダ以外は何も必要ないということに 注意してください! あなたは基本的に、この部分を終わらせています。そうしたければ、そのために簡単に コンパイルされたバイナリを試してみることもできます: =item - cd /usr/local/mysql/bin ./mysql -h 127.0.0.1 ホスト(-h)パラメータ 127.0.0.1 はローカル・ホストを示していますが、 mysqlクライアントに強制的にTCP/IP接続を使わせます。デフォルトでは、 パイプ/ソケット接続です('-h localhost'としたとしても)、そしてそれは CygwinとWindowsの間では(私が知る限り)うまく動きません。 あなたが他のマシンで走っているMySQLサーバーを持っているとすれば、 '127.0.0.1'を、そのマシンの名前またはIP番号で置き換えてください。 =back 私の環境では'mysql'クライアントは単なるRETURNを受け取らないという ことに注意してください。私はコマンドを送信するためにCTRL-RETURNを 使う必要があります ... 妙ですね。 しかし私はライブラリとヘッダを構築することだけに興味があるので、 これを治そうとはしていません。 'mysql>' プロンプトで簡単にチェックしてください: mysql> use mysql mysql> show tables; mysql> select * from db; mysql> exit これでDBD::mysqlを構築する準備ができました! DBD::mysqlの構築: =over =item - CPANからDBD-mysql-.tar.gzをダウンロードしてください =item - DBD-mysql-.tar.gzを解凍してください =item - 解凍されたディレクトリDBD-mysql-にcdしてください これを読んでいるのであれば、おそらく既にこうしているかもしれません! =item - cp /usr/local/mysql/bin/mysql_config . これはDBD::mysqlドキュメントで触れられている実行可能なスクリプトを、 たった今、構築したCygwin/MySQLクライアント・ディレクトリから コピーします;これはあなたのCygwinインストールについて 特にリンクするのに正しいライブラリについて知っています。 =item - perl Makefile.PL --testhost=127.0.0.1 --testhost=127.0.0.1 パラメータは、'make test'フェーズで、再び パイプ/ソケット接続の代わりにローカルホスト上のMySQLサーバーへの TCP/IP接続を強制します。 =item - make これはエラーなしに走るはずです =item - make test DBD-mysql-2.1022以前では、dbdadmin.t, mysql.t そして mysql2.tで いくつかのエラーを見るかもしれません;後のバージョンでは エラーにならないはずです(おそらくは、あるテーブルを削除できない ことを示すという1つを除いて。私はこの問題の解決策を探っていますが まだ見つかっていません)。 =item - make install Perl階層にDBD::mysqlをインストールします。 =back 注意: これはMySQLバージョン3.23.54aとDBD::mysqlバージョン2.1022でテストしました。 私は上記で示したテスト・スクリプトにパッチをあて、そのパッチをDBD::mysqlの 作者Jochen Wiedmanに送付しました。 Georg Rehfeld 15. Jan. 2003 =head1 既知の問題 =over =item 1.) いくつかのLinuxディストリビューションはデフォルトではgzipライブラリが ついてきます。"make"の実行は以下のようなエラーメッセージで終わります LD_RUN_PATH="/usr/lib/mysql:/lib:/usr/lib" gcc -o blib/arch/auto/DBD/mysql/mysql.so -shared -L/usr/local/lib dbdimp.o mysql.o -L/usr/lib/mysql -lmysqlclient -lm -L/usr/lib/gcc-lib/i386-redhat-linux/2.96 -lgcc -lz /usr/bin/ld: cannot find -lz collect2: ld returned 1 exit status make: *** [blib/arch/auto/DBD/mysql/mysql.so] Error 1 もしこうなるのであれば、libz-devel, libgz-devel, zlib-devel あるいはgzlib-develのようなRPMアーカイブをインストールしてください。 =item 2.) もしPerlがgccやegcsでコンパイルされていて、MySQLが他のコンパイラ あるいは他のシステムでコンパイルされていれば、"Make test"を実行したときの エラー・メッセージは以下のものに非常に良く似ていることでしょう: t/00base............install_driver(mysql) failed: Can't load '../blib/arch/auto/DBD/mysql/mysql.so' for module DBD::mysql: ../blib/arch/auto/DBD/mysql/mysql.so: undefined symbol: _umoddi3 at /usr/local/perl-5.005/lib/5.005/i586-linux-thread/DynaLoader.pm line 168. これは、あなたのリンカーにはlibgcc.aが入っていないことを意味します。 以下の選択が可能です: 解決方法はlibgccを使うようにリンカーに伝えることです。 libgcc.aの正確な場所を判定するために以下のように実行してください gcc --print-libgcc-file あるいはgccの古いバージョンでは、ディレクトリを判定するために gcc -v もしディレクトリを知っていれば、以下のフラグを -L -lgcc Cコンパイラ・フラグに追加して下さい。L. L. =item 3.) Linuxマシンのなかにはlibmysqlclientのシェアード・バージョンでは 問題があることがわかっています。以下のようなエラーメッセージを 受け取ったならば install_driver(mysql) failed: Can't load '/usr/lib/perl5/site_perl/i586-linux/auto/DBD/mysql/mysql.so' for module DBD::mysql: File not found at /usr/lib/perl5/i586-linux/5.00404/DynaLoader.pm line 166 このエラーメッセージは誤解を招くかもしれません:これはmysql.soの ロードが失敗しているのではなく、libmysqlclient.soなのです! 通常、このファイルが以下のようなリンカーが探さないディレクトリに あることが問題になります /usr/lib/mysql もっともよい解決は静的にリンクされたmysqlclientを使うことです。 例えば /usr/lib/mysql/libmysqlclient.a このファイルに対してリンクするよう -L/usr/lib/mysql -lmysqlclient を /usr/lib/mysql/libmysqlclient.a にリンカー・フラグの並びで置き換えることによって強制することができます。 L. L. =back =head1 サポート 最終的に他の全てが失敗したならば、あなた一人ではありません。 まず最初に、即時の回答はメーリングリストB のアーカイブを見ることです。アーカイブの場所はhttp://www.mysql.comを ご覧ください。 メーリングリストに適切な投稿や回答が見つからなければ、 質問を投稿してください。典型的には1あるいは2日で回答が あるでしょう。