数据库

单机MySQL数据库优化推荐的编译安装参数

Jager · 10月14日 · 2014年 2906次已读

MySQL 编译参数多而复杂,让新手感到很头大,如果是正式生成环境安装 MySQL,没有充足的时间去研究每一个参数代表的意义,个人建议使用余洪春前辈整理的编译参数,便捷高效!

MySQL 的线上安装建议采取编译安装的方法,这样性能上有较大提升,,源码包的编译参数会默认以 Debgu 模式生成二进制代码,而 Debug 模式给 MySQL 带来的性能损失是比较大的,所以当我们编译准备安装的产品代码时,一定不要忘记使用“—without-debug”参数禁用 Debug 模式。

而如果把—with-mysqld-ldflags 和—with-client-ldflags 二个编译参数设置为—all-static 的话,可以告诉编译器以静态方式编译和编译结果代码得到最高的性能。

使用静态编译和使用动态编译的代码相比,性能差距可能会达到 5%至 10%之多。

编译参数如下所示(适合 5.4 及之前的版本):

./configure --prefix=/usr/local/mysql \
--without-debug \
--without-bench \
--enable-thread-safe-client \
--enable-assembler \
--enable-profiling \
--enable-community-features \
--with-mysqld-ldflags=-all-static \
--with-client-ldflags=-all-static \
--with-charset=utf8 \ #具体看网站环境决定默认编码
--with-extra-charset=all \
--with-innodb \       #个人博客可以不开启 innodb
--with-csv-storage-engine \
--with-federated-storage-engine \
--with-mysqld-user=mysql \
--without-embedded-server \
--with-server-suffix=-community \
--with-unix-socket-path=/usr/local/mysql/sock/mysql.sock
9 条回应
  1. 广州除甲醛 2014-10-14 · 17:17

    来学习学习。。。。

  2. PHP二次开发 2014-10-14 · 22:50

    上次安装,还真是多亏了你的知道呀

    • avatar
      Jager 2014-10-14 · 22:52

      关于运维的问题,尽管抛给我,必会尽力解决。 :mrgreen:

  3. 淡忘~浅思 2014-10-15 · 9:56

    不错 谢谢分享

  4. 飞哥博客 2014-10-15 · 10:02

    我在阿里云用的他们的安装包,直接默认的。。。

    • avatar
      Jager 2014-10-15 · 16:28

      或许他们已经做过优化了。

  5. 夏日博客 2014-10-15 · 14:05

    一直在使用MYSQL,但还真不知道怎么进行优化。

  6. puffbaby 2015-6-6 · 8:54

    5.4 之后的版本呢?
    另外 mariadb 是不是也同样的?

    • avatar
      Jager 2015-6-6 · 10:10

      mariadb没怎么研究过,下面的是5.6的编译参数(由我DBA同事提供),供参考。

      cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ \
      -DMYSQL_UNIX_ADDR=/var/run/mysql.sock \
      -DDEFAULT_CHARSET=utf8 \
      -DDEFAULT_COLLATION=utf8_general_ci \
      -DWITH_EXTRA_CHARSETS=all \
      -DWITH_MYISAM_STORAGE_ENGINE=1 \
      -DWITH_INNOBASE_STORAGE_ENGINE=1 \
      -DWITH_MEMORY_STORAGE_ENGINE=1 \
      -DWITH_READLINE=1 \
      -DWITH_INNODB_MEMCACHED=1 \
      -DWITH_DEBUG=OFF \
      -DWITH_ZLIB=bundled \
      -DENABLED_LOCAL_INFILE=1 \
      -DENABLED_PROFILING=ON \
      -DMYSQL_MAINTAINER_MODE=OFF \
      -DMYSQL_DATADIR=/data/mysq/