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
自分がやっていることやリスクが理解できる場合は、行儀は悪いもののこの方法でも良いと思います。
##参考文献