Perlモジュールのインストール
MySQLは、PerlからのアクセスをサポートするDBI/DBDインターフェースを
用意しています。DBIは様々なデータベース向けの汎用インタフェースです。DBDはデータベースの種類ごとに用意されるデータベース・ドライバで、たとえばMySQLの場合はDBD::mysql、Oracleの場合はDBD::Oracleが必要になります。DBI/DBDを利用したデータベースへのアクセスには、Perl バージョン 5.004以降が必要です。
※RPMでMySQLをインストールしている場合は、MySQL-develパッケージがインストールされているか確認してください。
DBD/DBIモジュールは、一般的なLinuxディストリビューションならばすでにインストールされている可能性があります。
# rpm -qa | grep perl
でインストールされているか確認しましょう。
MySQLのPerlモジュールのインストール
DBD::mysqlを含むパッケージとしてMsql-Mysql-modulesモジュールが用意されています。Msql-Mysql-modules を使用するためには、
Data-Dumper、DBI
が必要です。初めてこれらのモジュールをインストールする際には、Data-Dumperを最初にインストールし、次に DBI、最後に Msql-Mysql-modulesをインストールします。
Perl の配布物は tar
でアーカイブされ、圧縮されています。「MODULE-VERSION.tar.gz」
という命名規則で配布されています(MODULE はモジュール名、VERSION はバージョン番号) 。
例ではData-Dumperモジュールを扱っていますが、他のモジュールも同じ手順でできます。
これらモジュールは下記のURLにあります。
直接ダウンロードする場所は以下のとおりです。
1.配布物をカレントディレクトリに展開
それでは、作業ディレクトリでファイルを解凍展開しましょう。
# gunzip < Data-Dumper-VERSION.tar.gz |
tar xvf -
上記のコマンドで 「Data-Dumper-VERSION」 というディレクトリが作成されるので、そのディレクトリ内に移動します。
2.展開したディレクトリに移動
# cd Data-Dumper-VERSION
3.コンパイル、インストール
# perl Makefile.PL
....
# make
....
# make test
....
# make install
新しいMySQLをインストールした場合、常にMsql-Mysql-modulesを再構築、再インストールするようにしましょう。
Perl module を正しくインストールできない場合、以下の文献が役立ちます。
http://www.iserver.com/support/contrib/perl5/modules.html
Msql-Mysqlの注意点
Msql-Mysql-modulesのインストールは、"perl Makefile.PL"の際、コマンドライン上で
下記のような質問が出力されます。
# perl Makefile.PL
Which drivers do you want to install?
1) MySQL only
2) mSQL only (either of mSQL 1 or mSQL 2)
3) MySQL and mSQL (either of mSQL 1 or mSQL 2)
4) mSQL 1 and mSQL 2
5) MySQL, mSQL 1 and mSQL 2
Enter the appropriate number: [3] 1
mSQLは古いMySQLですので、MySQLのみインストールしたい場合は 1
を選択します。
Do you want to install the MysqlPerl
emulation? You might keep your old Mysql module (to be
distinguished from DBD::mysql!) if you are concerned
about compatibility to existing applications! [n]
MysqlPerl
エミュレーション機能のインストールが必要かと聞かれますが、よほど古いMySQLモジュールを使っているのでない限り、そのまま
[Enter] を押します。
次の質問は、ヘッダ・ファイルとライブラリが入るディレクトリです。とりあえず [Enter]
を押しても大丈夫です。
指定する場合は、たとえば mysql.h が/usr/include/mysql/mysql.h
にあるのであれば、/usr/lib/mysql/libmysqlclient.a や /usr/lib/libmysqlclient.so と同様に、ヘッダ・ディレクトリに/usrと入力
します。
Where is your MySQL installed? Please
tell me the directory that
contains the subdir 'include'. [/usr/local]
これでインストール完了です。
もし、下記のようなエラーが表示されたら、1時間ほど悩みましょう。
Cannot find one of include/mysql/mysql.h,
include/mysql.h in
/Msql-Mysql-modules
1時間きっちり悩んだでしょうか?ボクは1時間は上記ではまりました。これは、mysql-devl
がインストールされていないのが原因です。RPM かなにかでインストールしておきましょう。
Perl DBI/DBD 使用時の問題
もし Perl が ../mysql/mysql.so
モジュールが見つからないとメッセージを出した場合、シェアードライブラリ "libmysqlclient.so"
を取り込めなかった可能性があります。この場合は、以下の方法で解決できます。
- perl Makefile.PL --static --config
Msql-Mysql-modulesのコンパイル時に、 perl Makefile.PL
の代わりに perl Makefile.PL --static --config でコンパイルしてください。 - libmysqlclient.soの設置場所を変更
libmysqlclient.soファイルを他のシェアード・ライブラリがある場所( /usr/lib、/lib など)にコピーします。Linuxの場合は、"/etc/ld.so.conf"
ファイルに、"libmysqlclient.so" があるディレクトリを書き加え、ldconfig -v
を実行することもできます。 - make LD_RUN_PATH=/usr/lib
LD_RUN_PATH (LD_LIBRARY_PATH)環境変数に
libmysqlclient.so があるディレクトリを書き加えます。例:
# make LD_RUN_PATH=/usr/lib
DBD-mysqlで以下のエラーが出た場合、 gcc(あるいは、gcc
でコンパイルされた古いバイナリ)を使用している可能性があります。
/usr/bin/perl: can't resolve symbol
'__moddi3'
/usr/bin/perl: can't resolve symbol '__divdi3'
上記のエラーの際は、"mysql.so" を作成する時のリンクコマンドに -L/usr/lib/gcc-lib/...
-lgcc を追加します。 (Perlクライアントを作る際の make の出力をチェックしましょう) -L
オプションに指定するのは、システム内の"libgcc.a"があるディレクトリです。
PerlとMySQLがgccを使用して作られていない場合も原因としてあります。この場合、両方をgccでコンパイルすることにより、ミスマッチを避けることができます。