标题:在linux下从源码包安装libmysqlclient,mysql-server,mysql-devel...各有什么不同呢? 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Wed, 03 Feb 2016 15:29:15 +0000 作者:jackxiang 地址:http://jackxiang.com/post/8482/ 内容: 背景:由于数据库服务器安装在数据库机上,因此,在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 是臆想出来的: cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DWITH_SERVER=0 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=../boost_1_59_0 -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DENABLE_DTRACE=0 -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DWITH_EMBEDDED_SERVER=1 make -j `grep processor /proc/cpuinfo | wc -l` make install 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服务器连接,否则你将需要它。 Generated by Jackxiang's Bo-blog 2.1.1 Release