编译安装MySQL

使用rpm包,或者apt-get、yum等方式安装MySQL已经很方便了,不过我还是更喜欢编译安装。编译安装的好处:平台无关、安装的MySQL目录独立(方便清楚),据说有更好的性能和平台耦合。缺点,编译安装较慢(不过现在8核CPU编译起来也很快了)。

1. MySQL编译参数

常用的参数有:

CFLAGS="-O3" CXX=gcc CXXFLAGS="-O3 -felide-constructors \ -fno-exceptions -fno-rtti" ./configure \ --prefix=/data/mysql --with-extra-charsets=latin1,gbk,utf8 \ --with-plugins=partition,heap,innobase,myisam,myisammrg,csv \ --enable-assembler make make install

“If you are using a version of gcc recent enough to understand the -fno-exceptions option, it is very important that you use this option. Otherwise, you may compile a binary that crashes randomly. Also use -felide-constructors and -fno-rtti along with -fno-exceptions.”

参考:MySQL Installation Using a Source Distribution

2. 多核编译

可以通过 -j 参数指定编译使用的CPU数量,之前一直没有注意使用这个选项,以下是对比测试:

$date && make > make.log 2>&1 && date Fri Apr 16 16:32:00 CST 2010 Fri Apr 16 16:39:37 CST 2010 $date && make -j 8 > make.log 2>&1 && date Fri Apr 16 16:27:10 CST 2010 Fri Apr 16 16:28:30 CST 2010 $date && make -j 15 > make.log 2>&1 && date Fri Apr 16 16:50:23 CST 2010 Fri Apr 16 16:51:41 CST 2010

看到,单核编译花了457秒,八核编译花了80秒,十五核编译花了78秒。

3. 目录结构

最初安装MySQL,不用RPM包的另一个重要原因就是,编译安装我们可以获得相对独立的MySQL目录,包括Server、Client、Data File等都可以比较好的规划在一个目录中。

在编译时,使用–prefix=/data/mysql则可以保证,Server(mysqld_safe)、Client(mysql)等统一在prefix所制定的目录下;在/etc/my.cnf文件中,我们再继续指定Data File目录、sock文件目录、pid文件目录、日志目录、tmp目录,这样基本上就保证了整个MySQL的独立性。

你甚至可以把/etc下的my.cnf文件都转移到prefix指定的目录下,这样你就拥有一个完整而且独立的MySQL目录了。

4. 需要注意的问题

一般编译安装之后,很多生成的脚本中都会写死目录(prefix指定的目录),这样编译好的脚本(二进制、shell、perl)如果转移到别的目录可能会导致无法运行。

例如,编译时指定prefix=/data/mysql,如果最后你把编译好的文件转移到/opt/mysql,很多脚本可能会无法运行,甚至会发生很多怪异的现象:-(

5. 安装实践 step by step

下面是将MySQL安装在/home/mysql目录下的一个实际操作过程,这里的prefix将指定目录/home/mysql/mysql(你可以根据需要修改为自己需要指定的位置)

# # # 新建运行MySQL的用户 groupadd dba useradd -g dba mysql cp mysql-5.0.86.tar.gz /home/mysql/ chown -R mysql:dba /home/mysql/mysql-5.0.86.tar.gz # # # 开始编译、安装 su - mysql tar zxvf /home/mysql/mysql-5.0.86.tar.gz cd mysql-5.0.86 ./configure \ --prefix=/home/mysql/mysql --with-extra-charsets=latin1,gbk,utf8 \ --with-plugins=partition,heap,innobase,myisam,myisammrg,csv make -j 8 && make install #-j 表示希望使用cpu核数 # # # 建立配置文件 cd /home/mysql/mysql su - root cp mysql/share/mysql/my-medium.cnf /etc/my.cnf chown -R mysql:dba /etc/my.cnf # # # 修改配置文件 配置数据文件、日志的路径 su - mysql vi /etc/my.cnf basedir = /home/mysql/mysql datadir = /home/mysql/mysql/data socket = /home/mysql/mysql/run/mysql.sock log-error = /home/mysql/mysql/log/alert.log log_slow_queries = /home/mysql/mysql/log/slow.log mkdir log run data tmp # # # 初始MySQL配置表(用户表 权限表等) ./bin/mysql_install_db --basedir=/home/mysql/mysql --datadir=/home/mysql/mysql/data --user=mysql --force # # # 启动MySQL ./bin/mysqld_safe &

In:

8 responses to “编译安装MySQL”

  1. 弦乐之花

    make -j不错的东东!
    btw,加上一堆的without会更快
    使用without
    $ date && make -j 8 > /dev/null 2>&1 && date
    2010年 06月 11日 星期五 10:16:41 CST
    2010年 06月 11日 星期五 10:17:50 CST

    不使用without
    $ date && make -j 8 > /dev/null 2>&1 && date
    2010年 06月 11日 星期五 10:21:57 CST
    2010年 06月 11日 星期五 10:23:21 CST

    –without-plugin-daemon_example \
    –without-plugin-innobase \ –如果使用innodb plugin的话
    –without-plugin-ftexample \
    –without-plugin-archive \
    –without-plugin-blackhole \
    –without-plugin-example \
    –without-plugin-federated \
    –without-plugin-ibmdb2i \
    –without-plugin-ndbcluster \
    –with-charset=gbk \
    –with-mysqld-user=oracle \
    –without-query-cache \
    –without-docs \
    –without-man \
    –without-embedded-server \

  2. 加上这些without 又快了一倍….

  3. […] 本文参考了师兄苏普的”编译安装MySQL”一文。若有错误,欢迎指正。 标签: linux, mysql, 编译mysql […]

  4. […]  |  00:32分类:MySQL  |  1 views 之前写过一篇Linux下编译安装MySQL,但是在5.5版本之后MySQL自动化建构工具从GUN […]

  5. -j参数的意思job,指的是同时开启多个任务运行,是多进程。多核是CPU概念

  6. […] 之前写过一篇Linux下编译安装MySQL,但是在5.5版本之后MySQL自动化建构工具从GUN Autotools换成了跨平台的Cmake系统,编译和配置和原来有些不同,这里做一个简单的小结。 1. 安装CMake […]

  7. 小强

    初始化数据库不行. 亲测.

  8. admin

    看看初始化的出错信息;然后看看错误日志

Leave a Reply

Your email address will not be published. Required fields are marked *