在linux下从源码包安装libmysqlclient,mysql-server,mysql-devel...各有什么不同呢?

jackxiang 2016-2-3 15:29 | |
背景:由于数据库服务器安装在数据库机上,因此,在linux中只需安装mysql的客户端库就可以了。那么这个PHP下的mysql client要不要安装?再就是如果想在这台机器上连接mysql  server,客户端要不要安一个呢,当然要,且只安mysql的client客户端。
方法一:从编译好的包里释放安装:
一)有rpm包的情况:
MySQL-client-5.0.22-0.i386.rpm //mysql -uroot 这个client的一个包 标准MySQL客户程序。你可能总是需要安装这个包。
MySQL-devel-5.0.22-0.i386.rpm  //要想用c去连接这个mysql的lib库
(安装好以后,在 /usr/include/mysql/ 目录中存放有libmysqlclient的头文件mysql.h,在 /usr/lib/mysql/ 目录中存放有mysql的库文件,但只有.a结尾的(即静态库)库文件(包括libmysqlclient.a),没有.so(共享库)文件。)
键入以下命令安装:

#rpm -ivh MySQL-client-5.0.22-0.i386.rpm
#rpm -ivh MySQL-devel-5.0.22-0.i386.rpm

使用如下命令编译一个简单的测试程序(代码在本文结尾处给出):
#gcc -c -I/usr/include/mysql mysql-test.c
此命令成功生成了目标文件mysql-test.o。
继续键入以下命令。
#gcc -o --static mysql-test mysql-test.o -L/usr/lib/mysql -lmysqlclient

注意参数的顺序,gcc有时会因为某些参数顺序不对而报错,某些相关参数的具体顺序应该如何,还望高人指点。
以上命令确给出了数不清的“引用未定义符号”的错误信息,引用未定义符号的是libmysqlclient.a
带着希望折腾了许久,最后决定从源码包安装mysql客户端程序库。

卸载MySQL-client与MySQL-devel:
#rpm -e MySQL-client
#rpm -e MySQL-devel

二)yum 安装,其实是一样的,只是在网上安装,看来centos7上新的db数据库会向mariadb转的趋势啊:
[root@iZ25z0ugwgtZ logs]# yum search mysql|grep dev
mysql++-devel.x86_64 : MySQL++ developer files (headers, examples, etc.)
mariadb.x86_64 : A community developed branch of MySQL
mariadb-devel.i686 : Files for development of MariaDB/MySQL applications
mariadb-devel.x86_64 : Files for development of MariaDB/MySQL applications


方法二:从源码里通过参数只编译安装客户端:
[root@iZ25dcp92ckZ vhost]# ldconfig -v|grep mysql
/usr/lib64/mysql:  这个路径在哪儿配置的呢?在:vi /etc/ld.so.conf  自己加上想要找的动态链接库:/usr/local/inotify-tools-3.14/lib
        libmysqlclient.so.18 -> libmysqlclient.so.18.0.0
从源码包安装mysql客户端程序库。
#tar -zxvf mysql-5.0.22.tar.gz (mysql-5.0.22.tar.gz位于/root目录)
#cd mysql-5.0.22
进入mysql-5.0.22目录,阅读 INSTALL-SOURCES 文件,并看到几个关键选项:
1、--without-server
只编译安装客户端程序库,不编译mysql服务器程序,这在本机只需要libmysqlclient时很有用。

Mysql高版本用了boost和cmake(MySQL 5.5版本以后,使用CMake编译工具)参数是这样和./configure对应的,参见链接,http://www.linuxeye.com/Linux/MySQL-cmake-options.html,-DWITH_SERVER=0,总之,这个cmake有些参数不支持和configure还不太一样,这个DWITH_SERVER 是臆想出来的:


2、--enable-thread-safe-client
让libmysqlclient中的例程具有线程安全性,要编写多线程的mysql客户端程序时就少不了了,这要求本地拥有多线程库。
3、--prefix 指定安装目录
启动configure脚本:
#mkdir /usr/local/mysql
#./configure --without-server --enable-thread-safe-client --prefix=/usr/local/mysql
大概6分钟后,configure脚本生成好所有的Makefile后退出。
当前目录下执行make进行编译:
#make
这个过程除了时间长一点以外没有别的,大概一个钟头后make完成编译任务。
安装:
#make install
这个过程也比较快,约两三分钟。
安装完成以后,mysql.h文件在 /usr/local/mysql/include/mysql/目录中(这里include目录中还有一个mysql子目录)。
以lib开头的库文件在/usr/local/mysql/lib/mysql/目录中(与mysql.h的情况一样,这里lib目录中还有一个mysql子目录)。
此时再来链接测试程序的目标文件:
#gcc -o mysql-test mysql-test.o -L/usr/lib/mysql -lmysqlclient
OK,一切正常,链接成功。
执行一下:
#./mysql-test
系统这时又发出错误提示:Loading libmysqlclient.so.15 Error; No Such File!
将/usr/local/mysql/lib/mysql/目录中的libmysqlclient.so.15.0.0复制到/usr/lib/目录下:
#cp /usr/local/mysql/lib/mysql/libmysqlclient.so.15.0.0 /usr/lib/libmysqlclient.so.15
#./mysql-test
屏幕打印出:mysql_init() successed.后就不动了.
约莫90秒后打印libmysqlclient的提示信息:Can not connect to mysql server(110)
这时在windows xp的msdos控制台键入:
>netstat -na
看到了系统已经打开了3306端口,即mysql server确实在运行。
最后注意到xp中启用了系统防火墙, 禁用系统防火墙后回到linux的ppty键入:
#./mysql-test
这时,黎明的曙光终于出现了,提示信息告诉我,它已经连接上了XP中的mysql server。

以上主要参考:http://blog.chinaunix.net/uid-26466663-id-3358199.html

mysql中的两个包 libmysqlclient-devel和mysql-devel 有什么区别啊,为什么安装了mysql-devel就不能安装 libmysqlclient-devel了?
MySQL服务器。除非你只是想要与运行在其他机器上MySQL服务器连接,否则你将需要它。

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:https://jackxiang.com/post/8482/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2016-2-5 15:33
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]