文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>RHEL4.0下编译安装MySQL5.0.33

RHEL4.0下编译安装MySQL5.0.33

时间:2007-01-17  来源:gladness

MySQL社区版二进制包的发布频率降低了,比如现在的5.0.33版就是只提供源码包。怎么办?自己动手,丰衣足食。在开源世界混的人不学会编译咋行呢?
我的编译配置选项:
CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors \
   -fno-exceptions -fno-rtti" ./configure  \
   --prefix=/usr/local/Buddha --enable-assembler \
   --with-server-suffix=Buddha \
   --with-unix-socket-path=/tmp/Buddha_mysql.sock

当然了,主要都是INSTALL-SOURCE里拷出来的。
去掉了静态链接的选项--with-mysqld-ldflags=-all-static,这个选项是我奋斗了两天以后决定去掉的,还没有测试,不一定是正确的选择。
使用这个选项的问题是,编译出的mysqld不会链接nptl的线程库,而链接linuxthreads-0.10。一个明显的特点就是,用ps(不加看线程的参数)能看到很多mysqld的“进程”。
这有一篇相关文章和讨论让我获益非浅:
http://www.xaprb.com/blog/2006/07/16/how-we-enabled-threading-in-mysql/

当使用动态链接时,mysqld会链接/lib/tls的线程库,即nptl(native posix thread libaray)。有说法说nptl比linux下旧的线程库效率高很多。此时编译链接出来的MySQL,安装以后,不论有多少个数据库连接,只能看到一个进程。

这样到底比静态链接的性能是好是坏呢?还没来得及测试,但我看了一下几个用rpm安装的MySQL5.0,也是动态链接的:
[gulei@ARCHITECT mysql-5.0.33]$ ldd /usr/sbin/mysqld
        librt.so.1 => /lib/tls/librt.so.1 (0x00851000)
        libpthread.so.0 => /lib/tls/libpthread.so.0 (0x00c1b000)
        libdl.so.2 => /lib/libdl.so.2 (0x00b3a000)
        libcrypt.so.1 => /lib/libcrypt.so.1 (0x007f2000)
        libnsl.so.1 => /lib/libnsl.so.1 (0x00822000)
        libm.so.6 => /lib/tls/libm.so.6 (0x00b15000)
        libc.so.6 => /lib/tls/libc.so.6 (0x009ea000)
        /lib/ld-linux.so.2 (0x009cd000)

configure有几个选项是我自己加的:
--prefix=/usr/local/Buddha
--with-server-suffix=Buddha
--with-unix-socket-path=/tmp/Buddha_mysql.sock
这是为了增加趣味性。记得在一个电视节目里看到哈佛大学有个实验室被称为zoo。原因是实验室中的每台电脑的都被命名为一种动物。这显得很有生气,并且显示出了一种自由创新和有亲和力的文化,让我羡慕不已。
因此,我把本次编译安装的MySQL起名为Buddha。
--prefix=/usr/local/Buddha是指定安装目录
--with-server-suffix=Buddha是给产品加个后缀名,这个名字在用mysql登录的时候在版本号的后面可以看到
--with-unix-socket-path=/tmp/Buddha_mysql.sock是指定用于本地连接的socket文件名字和位置,当一台机器上有多个MySQL安装时(尽管不一定都同时运行),可以区分出来是哪个MySQL的socket文件。

configure完成之后就是make和make install了,不必多言。
基本的顺序完全参照INSTALL-SOURCE里的内容。
比较特别的是,建一个/usr/local/Buddha/etc目录,之后要编辑一个my.cnf文件,把它放在这个目录下。
运行mysql_install_db时,可能要指定用哪个my.cnf,比如我这样做:
bin/mysql_install_db /usr/local/Buddha/etc/my.cnf --user=mysql
如果不指定的话,/etc/my.cnf也会起作用。如果不指定my.cnf,以上述安装来说,/etc/my.cnf和/usr/local/Buddha/etc/my.cnf会同时起作用,如果两个文件中有重复的参数设置,该参数在后者中的设置会生效。可能会引发一些错误。
接来来是修改目录权限,暂且不表。
最后是启动服务:
/usr/local/Buddha/libexec/mysqld --defaults-file=/usr/local/Buddha/etc/my.cnf --user=mysql &
好了,大功告成,登录一下。

[root@ARCHITECT Buddha]# mysql --socket=/tmp/Buddha_mysql.sock
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 5.0.33Buddha-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

看到5.0.33后面的Buddha了吧。
好了,我的Buddha MySQL就此安装完毕。
相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载