MySQLをC言語から使う

PerlやPHPからではDBIや内蔵ライブラリ任せで良いのですが、C言語では直接MySQLのライブラリを使用します。

まずは、必要なヘッダやライブラリがどこにあるかを調べる。
# find / -name mysql.h
/usr/local/src/mysql-5.0.18/include/mysql.h
/usr/local/mysql/include/mysql/mysql.h

# find / -name libmysqlclient.so
/usr/local/src/mysql-5.0.18/libmysql/.libs/libmysqlclient.so
/usr/local/mysql/lib/mysql/libmysqlclient.so

# find / -name libmysqlclient.a
/usr/local/src/mysql-5.0.18/libmysql/.libs/libmysqlclient.a
/usr/local/mysql/lib/mysql/libmysqlclient.a

コンパイル・リンク時に-Iや-Lで指定が必要になります。
# gcc -c -I /usr/local/mysql/include/mysql/ myclient.c
# gcc -o myclient -L /usr/local/mysql/lib/mysql/ -l mysqlclient

一気にやるならこっち
# gcc -o myclient
-I /usr/local/mysql/include/mysql/
-L /usr/local/mysql/lib/mysql/
-l mysqlclient
myclient.c

実際のプログラムに関してはメルマガで紹介しますが、Linuxの場合出来上がったプログラムを使用する際に/usr/local/mysql/lib/mysql/をldconfigで登録しないとだめだったので動的リンクだったかも。
FreeBSDにも同じコマンドがあるのでメルマガ発行前にもう一度検証してみます。

MySQLの自動起動

MySQLの自動起動をRedHatLinuxとFreeBSDの場合ではどのようにするのか、MySQLの場合ソースの中の起動スクリプトmysql.serverを使用する。

Red Hat Linuxの場合(version4.0.20の時の記録)
# cd /usr/local/src/mysql-4.0.20/support-files
# cp mysql.server /etc/rc.d/init.d/mysqld
# chmod 755 /etc/rc.d/init.d/mysqld
# chkconfig –add mysqld
# cp my-medium.cnf /etc/my.cnf

FreeBSDの場合
# /usr/local/src/mysql-5.0.18/support-files
# cp mysql.server /usr/local/etc/rc.d/mysqld.sh
# chmod 755 /usr/local/etc/rc.d/mysqld.sh

MySQLの初期化と起動

MySQLを起動するには以下のコマンドを利用します。因みにUNIX系であれば共通内容です。

初期化(ユーザーmysqlで初期化)
# /usr/local/mysql/bin/mysql_install_db –user=mysql

起動(ユーザーmysqlで起動)
# /usr/local/mysql/bin/mysqld_safe –user=mysql &

接続(ユーザーmysqlでtestデータベースに接続)
# /usr/local/mysql/bin/mysql test -u mysql