Linux 发行版本:RHEL 6.1
Linux 内核版本: 2.6.32-131.0.15.el6.i686
gcc 版本: 4.4.4 20100726
MySQL版本:mysql-5.1.52-1.el6_0.1.i686,mysql-devel-5.1.52-1.el6_0.1.i686,mysql-server-5.1.52-1.el6_0.1.i686
全部是RHEL 6.1自带的rpm包,由于红帽的升级服务需要额外费用,所以一般人都将镜像当成更新源。另一方面,红帽发行的企业版是很稳定的,当然稳定的前提是使用配套的rpm包。
1.建立MySQL服务器
#yum install mysql
#yum install mysql-devel
#yum install mysql-server
2.创建数据库
#/etc/init.d/mysqld start //启动MySQL服务器
#mysqladmin –u root password YOUR.PASSWORD //添加MySQL的root账号
#mysql –u root –p //以root身份登录数据库
mysql>create database iSql; //创建一个数据库,名叫“iSql”
mysql>grant all privileges on iSql.* to jiutian@localhost identified by 'PASSWORD';
//为iSql创建一个数据库账户,名叫“jiutian”,最后的密码要用单引号括起来
mysql>use iSql; //切换到iSql数据库
Database changed
mysql>CREATE TABLE votelanguage(
->id INT NOT NULL AUTO_INCREMENT,
->choice TINYINT NOT NULL,
->ts TIMESTAMP,
->PRIMARY KEY(id); //创建新表votelanguage(摘自MySQL 5 权威指南 第三版)
Query OK, 0 rows affected(0.75 sec) //创建成功
mysql>describe votelanguage //显示votelanguage表的结构
3.客户端编写程序
C 程序源代码如下:
#include <stdio.h>
#include <mysql.h>
int main(int argc, char *argv[]){
int i;
MYSQL *conn; //connection
MYSQL_RES *result; //result of SELECT query
MYSQL_ROW row; //a record of the SELECT query
//create connection to MySQL
conn = mysql_init(NULL);
if (mysql_real_connect(conn, "localhost", "jiutian", "DATABASE.PASSWD", "iSql", 0, NULL, 0) == NULL){
fprintf(stderr, "Sorry, no database connection ...\n");
return 1;
}
//only if Unicode output(utf8) is desired
mysql_query(conn, "SET NAMES 'utf8'");
//create list of all
const char *sql = "SELECT ts as 'time'\
FROM votelanguage\
WHERE choice = 1;";
if (mysql_query(conn, sql)){
fprintf(stderr, "%s\n\n", mysql_error(conn));
fprintf(stderr, "%s\n", sql);
return 1;
}
//process result
result = mysql_store_result(conn);
if (result == NULL){
if (mysql_error(conn))
fprintf(stderr, "%s\n", mysql_error(conn));
else
fprintf(stderr, "%s\n", "unknown error\n");
return 1;
}
printf("%i records found \n", (int)mysql_num_rows(result));
//loop over all records
while ((row = mysql_fetch_row(result)) != NULL){
for (i = 0; i < mysql_num_fields(result); i++){
if (row[i] == NULL)
printf ("[NULL]\t");
else
printf ("%s\n", row[i]);
}
}
//release memory, server connection
mysql_free_result(result);
mysql_close(conn);
return 0;
}
4.gcc编译
gcc -o link -I/usr/include/mysql -L/usr/lib/mysql -lmysqlclient
//由于mysql的lib文件不在默认的库文件目录下,所以编译的时候要把-L加进去,include文件也是同理
//不然的话,就会提示各种找不到的抓狂错误..
//比如 /usr/bin/ld: cannot find -lmysqlclient 其实就是找不到mysql的某个库文件
至于如果不加参数编译不通过的造成的原因,个人认为是mysql的rpm包默认配置路径的问题,在/usr/lib/mysql下有几个连接文件和连接的源文件在同一个目录下。所以如果不想每次编译的时候都将路径输入,就在gcc默认的lib位置加个连接就好了。
5.makefile文件
CC = gcc
INCLUDES = -I/usr/include/mysql
#link libmysqlclient functions dynamically
LIBS = -L/usr/lib/mysql -lmysqlclient
all:link
link_MySql.o: link_MySql.c
$(CC) -c $(INCLUDES) link_MySql.c
link: link_MySql.o
$(CC) -o link $(LIBS) link_MySql.o
clean:
rm -f link *.o
makefile文件中的每条命令前面用tab作为开始标记,不然是会报错的..
6.关于客户端Linux无法连接服务器MySQL的原因
由于装的是RHEL6.1,所以很犀利的防火墙..只能在setup里添加MySQL的端口3306,protocol是tcp(会提示小写的)~
PS:本文很多是手工输入,如果错误请提示,谢谢~