MySQL導入ガイド

Perl DBI-DBDインターフェイス

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でコンパイルすることにより、ミスマッチを避けることができます。

関連記事