1. Qiita
  2. 投稿
  3. MySQL

cpanmでDBD::mysqlを入れる

  • 11
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

plenvやperlbrewでcpanmを入れてそれでモジュールを入れるとDBD::mysqlが入らないケースがあります。手元にMySQL (libmysql) が入っていないからです。

Homebrewを使って手元に手軽にMySQLを入れてしまいましょう。

検証環境:

  • MacBook Air 2013 Late
  • Mavericks

なお、付記として

  • Debian stable / Ubuntu stable

の場合についても言及してあります。

HomebrewでMySQLを入れる

思いつく通りに入れれば大丈夫そうです。

$ brew install mysql

ここでトラブルが起きた場合は brew doctor を参考にするか、brew update を怠っていないかなどをチェックしましょう。HomebrewでMySQL 5.6をインストール。開発用my.cnfもさらす も参考になります。

DBD::mysqlインストール用の環境変数を設定する

DBD::mysql - Environment Variable にしたがって現在のbashに環境変数を設定します。bashでない場合も同様に環境変数を設定すればよいと思います。

export DBD_MYSQL_CFLAGS=-I/usr/local/Cellar/mysql/5.6.16/bin/mysql
export DBD_MYSQL_LIBS="-L/usr/local/Cellar/mysql/5.6.16/bin/mysql -lmysqlclient"
export DBD_MYSQL_EMBEDDED=
export DBD_MYSQL_CONFIG=/usr/local/Cellar/mysql/5.6.16/bin/mysql_config
export DBD_MYSQL_NOCATCHSTDERR=0
export DBD_MYSQL_NOFOUNDROWS=0
export DBD_MYSQL_SSL=
export DBD_MYSQL_TESTDB=test
export DBD_MYSQL_TESTHOST=localhost
export DBD_MYSQL_TESTPASSWORD=
export DBD_MYSQL_TESTPORT=3306
export DBD_MYSQL_TESTUSER=root

上記の設定を一行ずつ打っていくか、それを書いたファイルを source コマンドで現在のシェルに読み込ませればよいでしょう。

初期設定では test というデータベースは存在するし、root のパスワードは空文字なので大丈夫です。

パスについて、その時のHomebrewのMySQLでインストールされるパスが違うかもしれません。brew info mysql を参考するなどしてください。

mysqldは起動している?

brew info mysql の指示に従ってmysqldを起動します。

一番簡単な方法は以下だと思います。

$ mysql.server start

mysql -u root -p して mysql クライアントからデータベースに接続できることを確認します。

cpanm DBD::mysqlする

環境変数が設定されているか env | grep DBD_ などを使って確認したあと、cpanm DBD::mysql します。たぶん今まで失敗していた場合も成功するのではないかと思います。

とりあえずMySQLクライアントインストール目的の場合は、この場で brew uninstall mysql しても大丈夫じゃないかなと思いますが、ちょっとここは自信がないです。mysqldがディスクの肥やしになっていることが気にならないのであれば、セキュリティ的に妥当な設定になっていることを確認して、そのままにしておくで良いかなと思います。

DebianやUbuntuの場合

Debian や、その派生OSであるUbuntuの場合は、 上記のような環境変数の設定はいりません。そのかわり、libmysqlclient15-dev というパッケージが必要になります。

$ sudo apt-get install libmysqlclient15-dev

このパッケージは libmysqld-dev などの依存関係でもインストールされるもののようです。外部のDBを利用するとしても、一時的にでもmysql-serverパッケージを入れて手元にMySQLサーバを立てた上で、cpanm DBD::mysql してみるとうまくいくのではないかと思います。

参考:

Debian/Ubuntuではレアケースかと思いますが、自前でMySQLをビルドして入れているという場合には、また別の設定が必要になってくると思われます。

なお蛇足ですが、plenvやperlbrewによるユーザPerlではなく、システムPerlを使っているという場合であれば、libdbd-mysql-perl というパッケージを入れるだけで済みます。

[番外編] forceモードで入れる

手元がMySQLサーバではないけど、ネットの向こう側のMySQLサーバを使いたいからクライアントを入れるんだという意思がはっきりしている場合には force モードで入れてしまうという手もあります。

$ cpanm --force DBD::mysql

自分がやっていることやリスクが理解できる場合は、行儀は悪いもののこの方法でも良いと思います。

参考文献