名前¶
INSTALL - DBD::mysqlのインストールと構成設定の方法
概要¶
perl Makefile.PL [options]
make
make test
make install
説明¶
このドキュメントは、MySQLデータベースのためPerl DBIドラバである DBD::mysqlのインストールと構成設定について説明します。 読み進めるまえに必要なものが利用可能になっているかどうかを 確認してください:Perl、MySQLそしてDBI。詳細については別のセクション "必要条件"をご覧ください。
あなたのPerlのバージョンによりますが、DBD::mysqlの バイナリ・ディストリビューションを利用することができかもしれません。 もし可能であれば、これをお勧めします。そうでなければソースから インストールする必要があります。そうだとすれば、間違いなく Cコンパイラが必要になります。バイナリとソースからのインストールは どちらもバイナリ・インストールとソース・インストールの 別のセクションで説明されています。
最後に、何か問題にぶつかったら既知の問題についてのセクション 既知の問題を読むのを忘れないでください。それが助けにならなければ、 メーリング・リストmsql-mysql-modules@lists.mysql.comの アーカイブをご覧になってください。アーカイブの位置については http://www.mysql.com をご覧ください。 それも助けにならなければ、このメーリング・リストに質問を投げてください。
必要条件¶
- Perl
-
より望ましくはシステムにあらかじめ設定されているバージョンのPerl。 例えば、全てのLinuxとFreeBSDディストリビューションには Perlが入っています。WindowsではActivePerlをお勧めします。 詳細はhttp://www.activestate.com をご覧ください。
- MySQL
-
実際のMySQLデータベース・サーバーをインストールする必要はありません。 クライアント・ファイルと開発ファイルで十分です。例えば Red Hat LinuxディストリビューションではRPMファイル mysql-clientとmysql-develがついてきます。 MySQLサーバーが他のマシンにあれば、これらで十分です。 MySQLソース・ディストリビューションからコンパイルし、 以下のコマンドを使うことによりクライアント・ファイルを 作成することもできます。
configure --without-server
Windowsを使っていて、ソースからコンパイルする必要があるならば (これはActivePerlを使っていない場合に限ります)、 ヘッダとライブラリ・ファイルがインストールされていることを 確認してください。これはMySQLセットアップ・プログラムを 実行するときに、"Custom installation"を選び、適切なオプションを 選ぶことが必要になるかもしれません。
- DBI
-
DBD::mysqlはDBIドライバです。そのためDBIが必要となります。 DBD::mysqlディストリビューションを取得するのと同じ場所から利用できます。
- C コンパイラ
-
ソースからインストールする場合にはCコンパイラだけが必要です。 ほとんどの場合、DBD::mysqlのバイナリ・ディストリビューションが あります。しかし、Cコンパイラが必要であれば、PerlとMySQLをコンパイル するために使われたものと同じCコンパイラであることを確認してください! そうでなければ、ほとんどの場合、間違いなくベースとなる Cランタイム・ライブラリの違いにより障害にぶつかることでしょう。
最悪の場合、あなた自身でPerlとMySQLをコンパイルすることを意味する かもしれません。しかし私を信じてください、経験上、多くの問題が、 このようにして解決できます。
- Gzip ライブラリ
-
MySQLの最近のバージョンには圧縮のサポートがついています。このため、 libz-devel、libz-develあるいはそれに類似するもののようなRPM パッケージをインストールすることが必要となるかもしれません。
バイナリ・インストール¶
あなたのシステムによりますが、ほとんどの場合、 バイナリ・インストールが可能です。いくつか例を示しましょう:
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
もちろん、ホスト名my.proxy.server
とポート番号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
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
その他のシステム¶
LinuxやFreeBSDディストリビューションの場合、Red Hat Linuxがそうである ように、あなたが必要としているものが全てディストリビューションに ついてくることがよくあります。私はこれらのシステムを使ってはいないので、 その名前を挙げることができないだけなのです。
私が上記のリストに追加できるように、SuSE Linux、Debian LinuxやFreeBSD ディストリビューションに、それらのファイルを見つけることができたかを 教えてください。
ソース・ディストリビューション¶
ここではソースからインストール必要があるとします。ついていれば、 PerlモジュールCPAN
が、あなたの代わりに全てをやってくれるでしょう。 Andreas Koenigの素晴らしい作品に感謝。そうでなければ、 あなたは手動インストールを行う必要があります。人によっては、 特に複数のサイトのシステム管理者は、自動インストールを選ぶでしょう。 これらのインストールのタイプの全てについて、それぞれセクションが あります。"CPANインストール"、"手動インストール"、"構成設定"。
CPANインストール¶
DBD::mysqlのインストールは驚くほど簡単です:
cpan
install DBD::mysql
はじめてCPANモジュールを使うのであれば、ほとんどの場合、正しいデフォルトを 受け入れると回答するだけです。古いバージョンのPerlを使っているならば、 代わりに以下のようにする必要があるかもしれません
perl -MCPAN -e shell
install DBD::mysql
CPANモジュールを動かすことが出来なければ、手動マニュアルを試して みてください。あなたが間違ってしまったために、CPANでのインストールが 失敗するのであれば、試しにmysql_config
というスクリプトを作って みることができます。これについては後の"Configuration"で説明 されています。
手動インストール¶
手動インストールのためには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コンパイラあるいはリンカーが 何かフラグを必要とするかもしれません。"構成設定"、"Cコンパイラー・フラグ". "リンカー・フラグ"。
Windows/CygWinについては、以下に特別なセクションがあります。"CygWin" in Windows。
構成設定¶
インストール・スクリプト"Makefile.PL"は、数多くのスイッチを通して 設定することができます。全てのスイッチはコマンド行で利用することができます。 例えば、テストデータベースは:
perl Makefile.PL --testdb=<db>
これらのスイッチをコマンド行で設定したくなければ、代わりに mysql_config
というスクリプトを作ることが出来ます。 これは後で説明します。
利用できるスイッチは以下の通りです:
- testdb
-
テスト・データベースの名前。デフォルトはtest。
- testuser
-
テスト・ユーザの名前。デフォルトは空です。もし名前が空であれば、 現在、ログインしているユーザ名が使われます。
- testpassword
-
テストユーザのパスワード。デフォルトは空。
- testhost
-
ホスト名あるいはテスト・データベースのIP番号;デフォルトはlocalhost。
- testport
-
テスト・データベースのポート番号
- cflags
-
Cコンパイラーに与えたいフラグのリスト。 最も重要なフラグはMySQLヘッダ・ファイルの位置です。 例えばRed Hat Linuxではヘッダ・ファイルは/usr/include/mysqlにあり、 以下のように試してみることができます
-I/usr/include/mysql
WindowsではヘッダファイルはC:\mysql\includeにあるでしょう。そこで 以下のように試してみることができます
-IC:\mysql\include
デフォルトのフラグは以下のように実行することにより判定されます
mysql_config --cflags
Cコンパイラ・フラグについてのさらなる詳細は下記のセクション "Cコンパイラー・フラグ"にあります。
- 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
リンカー・フラグについてのさらなる詳細は、別のセクションリンカー・フラグに あります。
スイッチがコマンド行になければ、スクリプトmysql_config
が 実行されます。このスクリプトはMySQLディストリビューションの一部 として入っています。例えばCコンパイラ・フラグを判定するためには 以下のように実行します
mysql_config --cflags
mysql_config --libs
データベース名、データベース・ユーザなどを独自の設定にしたければ、 同じ名前を持ち、応答するようなスクリプトを作成する必要があります。
Cコンパイラ・フラグ¶
典型的にはCコンパイラのための適切なフラグを判定することは難しい ことではありません。次のセクションにあるリンカー・フラグは また別の話になります。
Cコンパイラ・フラグの判定は通常はmysql_configという 構成設定スクリプトに任されます。そしてそれは以下のようにして 呼び出されます
mysql_config --cflags
こうすると、以下のように提案されるCコンパイラ・フラグが入った行を 吐き出します:
-L/usr/include/mysql
Cコンパイラはいくつかのヘッダ・ファイルを見つけなければなりません。 ヘッダ・ファイルは拡張子.h
を持ちます。例えばMySQLヘッダ・ファイルは mysql.h と mysql_version.hです。ほとんどの場合、デフォルトでは ヘッダ・ファイルはインストールされません。例えばWindowsでは MySQLセットアップ・プログラムでのヘッダ・ファイルをインストールするか どうかはインストールのオプションです(Custom Installation)。 Red Hat Linuxでは、RPMアーカイブmysql-devel あるいは MySQL-develを インストールする必要があります。
ヘッダ・ファイルの位置が判れば、オプションをCコンパイラ・フラグに 追加する必要があります
-L<ヘッダ・ファイルのディレクトリ>
例えば-L/usr/include/mysql
。
リンカー・フラグ¶
適切なリンカー・フラグは、DBD::mysqlをインストールするさい、 最もよくある問題です。わたしはラフな概要を与えるだけです。 トラブルシューティング・セクション既知の問題点に、さらなる 詳細があります。
Cコンパイラ・フラグの判定は通常はmysql_configと呼ばれる 構成設定スクリプトに任されます、これは以下のように 呼び出されます
mysql_config --libs
そうすると、例えば以下のように提案されるCコンパイラ・フラグが 入った行を吐き出します:
-L'/usr/lib/mysql' -lmysqlclient -lnsl -lm -lz -lcrypt
通常、以下の要素が典型的にはリンカーを構成設定するために 必要とされます:
- mysqlclientライブラリ
-
MySQLクライアント・ライブラリはMySQLディストリビューションの 一部となっています。システムによっては、それは以下のような ファイルでしょう
F<libmysqlclient.a> 静的にリンクされるライブラリ、Unix F<libmysqlclient.so> 動的にリンクされるライブラリ、Unix F<mysqlclient.lib> 静的にリンクされるライブラリ、Windows F<mysqlclient.dll> 動的にリンクされるライブラリ、Windows
あるいはその類似のもの。
ヘッダ・ファイルの場合と同じように、クライアント・ライブラリは典型的には デフォルトではインストールされません。Windowsでは、MySQLセットアップ・プログラムを 実行している間に、それらを選択する必要があります(Custom Installation)。 Red Hat LinuxではRPMアーカイブmysql-develあるいはMySQL-develが インストールされなければなりません。
リンカーはmysqlclientライブラリの位置と名前を知っていることが必要です。 これは以下のフラグを追加することにより
-L<ライブラリ・ディレクトリ> -lmysqlclient
あるいは、完全なパス名を与えることによりおこなうことができます。例えば:
-L/usr/lib/mysql -lmysqlclient -LC:\mysql\lib -lmysqlclient /usr/lib/mysql/libmysqlclient.a C:\mysql\lib\mysqlclient.lib
後者の例は静的にリンクされるライブラリです。リンクされる 動的なライブラリが実行時に見つからないのであれば、これが いくつかのケースで必要となるでしょう。
- gzipライブラリ
-
MySQLクライアントはMySQLサーバーと通信するときに圧縮を使うことが出来ます。 遅いネットワークで大きなテキストを送信したり受信するときには 素晴らしい機能です。
Unixでは典型的には適切なファイルを以下のように実行するとわかるでしょう
ldconfig -p | grep libz ldconfig -p | grep libgz
名前がわかってしまえば(libz.aあるいはlibgz.aが一番です)、 それをリンカー・フラグのリストに追加するだけです。これが問題を 起こすようであれば、gzipライブラリなしでリンクすることを試してみる こともできます。
特殊なシステム¶
特定のシステムについての情報を以下に示します:
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のインストール
- -
-
MySQL Windowsバイナリを以下のサイトからダウンロードしてください http://www.mysql.com/downloads/index.html
- -
-
どこか一時的な場所にmysql-<version>-win.zipをunzipしてください
- -
-
そこでsetup.exeを起動し、指示に従ってください
- -
-
サーバーを起動してください
- -
-
そうでなければ、リモートサーバー上の、何らかのサポートされているOS上で サーバーをダウンロードし、起動して下さい。
Cygwinの下でのMySQLクライアントの構築:
- -
-
MySQL LINUXソースを以下のサイトからダウンロードしてください http://www.mysql.com/downloads/index.html
- -
-
どこか一時的な場所にmysql-<version>.tar.gzを解凍してください
- -
-
解凍したディレクトリmysql-<version>にcdしてください
./configure --prefix=/usr/local/mysql --without-server
これはインストールされたCygwinの機能にあわせてMakeFileを用意します。 これには少し時間がかかるかもしれませんが、エラーなしに終わるはずです。 'prefix'は与えられているように、全てのCygwin/MySQLのものを、 あなたが既にインストールされているWindowsバイナリを使い続けられる よう、通常通りにではなく、あなたのPATHにインストールします。 --without-serverパラメータはクライアントだけを構築するよう設定 するように伝えます。
- -
-
make
これが全てのMySQLクライアント部分を構築します...我慢してください。 最後にはエラーなく終わるはずです。
- -
-
make install
これはコンパイルされたクライアント・ファイルを/usr/local/mysql/に インストールします。/usr/local/mysql/libの下にあるライブラリと /usr/local/mysql/includeの下のヘッダ以外は何も必要ないということに 注意してください!
あなたは基本的に、この部分を終わらせています。そうしたければ、そのために簡単に コンパイルされたバイナリを試してみることもできます:
- -
-
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番号で置き換えてください。
私の環境では'mysql'クライアントは単なるRETURNを受け取らないという ことに注意してください。私はコマンドを送信するためにCTRL-RETURNを 使う必要があります ... 妙ですね。 しかし私はライブラリとヘッダを構築することだけに興味があるので、 これを治そうとはしていません。
'mysql>' プロンプトで簡単にチェックしてください:
mysql> use mysql
mysql> show tables;
mysql> select * from db;
mysql> exit
これでDBD::mysqlを構築する準備ができました!
DBD::mysqlの構築:
- -
-
CPANからDBD-mysql-<version>.tar.gzをダウンロードしてください
- -
-
DBD-mysql-<version>.tar.gzを解凍してください
- -
-
解凍されたディレクトリDBD-mysql-<version>にcdしてください これを読んでいるのであれば、おそらく既にこうしているかもしれません!
- -
-
cp /usr/local/mysql/bin/mysql_config .
これはDBD::mysqlドキュメントで触れられている実行可能なスクリプトを、 たった今、構築したCygwin/MySQLクライアント・ディレクトリから コピーします;これはあなたのCygwinインストールについて 特にリンクするのに正しいライブラリについて知っています。
- -
-
perl Makefile.PL --testhost=127.0.0.1 --testhost=127.0.0.1 パラメータは、'make test'フェーズで、再び パイプ/ソケット接続の代わりにローカルホスト上のMySQLサーバーへの TCP/IP接続を強制します。
- -
-
make
これはエラーなしに走るはずです
- -
-
make test
DBD-mysql-2.1022以前では、dbdadmin.t, mysql.t そして mysql2.tで いくつかのエラーを見るかもしれません;後のバージョンでは エラーにならないはずです(おそらくは、あるテーブルを削除できない ことを示すという1つを除いて。私はこの問題の解決策を探っていますが まだ見つかっていません)。
- -
-
make install
Perl階層にDBD::mysqlをインストールします。
注意:
これはMySQLバージョン3.23.54aとDBD::mysqlバージョン2.1022でテストしました。 私は上記で示したテスト・スクリプトにパッチをあて、そのパッチをDBD::mysqlの 作者Jochen Wiedmanに送付しました。
Georg Rehfeld 15. Jan. 2003
既知の問題¶
- 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アーカイブをインストールしてください。
- 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<directory> -lgcc
Cコンパイラ・フラグに追加して下さい。"構成設定". "リンカー・フラグ".
- 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
にリンカー・フラグの並びで置き換えることによって強制することができます。 "構成設定". "リンカー・フラグ".
サポート¶
最終的に他の全てが失敗したならば、あなた一人ではありません。 まず最初に、即時の回答はメーリングリストmsql-mysql-modules@lists.mysql.com のアーカイブを見ることです。アーカイブの場所はhttp://www.mysql.comを ご覧ください。
メーリングリストに適切な投稿や回答が見つからなければ、 質問を投稿してください。典型的には1あるいは2日で回答が あるでしょう。