Linux下对Nginx编译安装的时候,如果去掉debug选项,生成的目标文件将会小很多,运行效率将会高很多。MySQL像Nginx及很多Linux软件一样,有这样的选项可以去掉或者优化,可以使编译的目标文件很小,提高运行效率和减少资源占用。以下对这些选项做个介绍,不足之处请大家多多补充,共同完善:
static参数,静态链接
参数使用方法:
1 | --with-client-ldflags=-all- static |
2 | --with-mysqld-ldflags=-all- static |
静态链接提高13%性能
pgcc参数,Intel处理器优化标记
使用方法: 命令行设置环境变量
1 | CFLAGS= "-O3 -mnocona -mstack-align-double" |
3 | CXXFLAGS= "-O3 -mnocona -mstack-align-double -felide-constructors -fno-exceptions -fno-rtti" |
如果是Intel处理器,使用pgcc提高1%性能
64位平台的编译环境变量:
1 | CFLAGS= "-O3 -fPIC -mnocona -mstack-align-double" |
3 | CXXFLAGS= "-O3 -mnocona -mstack-align-double -felide-constructors -fno-exceptions -fno-rtti" |
7 | CXXFLAGS= "-O3 -felide-constructors -fno-exceptions -fno-rtti -fomit-frame-pointer -ffixed-ebp" |
CFLAGS设置参见http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options
Unix Socket,Unix套接字
参数设置
1 | --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock |
使用Unix套接字链接提高7.5%性能,所以在Windows下Mysql性能肯定不如Unix下面。PHP-CGI在使用时也是一样的,使用端口监听模式不如使用Unix套接字模式效率高。
–enable-assembler参数,汇编x86的普通操作符
–enable-assembler参数允许编译x86(和sparc)版本普通操作符, 对多个方面的性能产生直接影响.
with-big-tables参数,大记录数表支持
不使用该参数时,MyISAM表的最大记录数被限制到42亿(2^32次方)条。编译时增加–with-big-tables参数,可以将最大记录数增加到((2^32次方)^2次方)条。
其他几条参数
- –with-ssl
- –with-extra-charsets=complex字符支持
- –enable-thread-safe-client #Compile the client with threads. 让客户端支持线程的意思
- –with-embedded-server #编译成embedded MySQL library (libmysqld.a),
- –enable-local-infile #让mysql支持从本地文件导入数据库
如果不使用该参数,在导入本地文件时,将会出错:
1 | load data local infile '/usr/test' into table test fields terminated by ' ' ; |
2 | ERROR 1148 (42000): The used command is not allowed with this MySQL version) |
- –with-plugins=innobase存储引擎
Mysql5.1开始,编译添加innodb插件就从 –with-innodb 改成了 –with-plugins=innobase
- –with-plugins=PLUGIN[[[,PLUGIN..]]]参数,插件编译参数
该参数将需要编译到MySQl的插件包含了,不使用该参数时,不编译任何插件。
如果多个插件,可以写成:–with-plugins=partition,blackhole,heap,innobase,myisam,ndbcluster 用逗号分开
编译安装示例:
01 | ./configure --prefix=/web/mysql #指定安装目录 |
02 | --without-debug #去除debug模式 |
03 | --enable-local-infile #让mysql支持从本地文件导入数据库 |
04 | --with-big-tables #打开超大数据表支持 |
05 | --with-charset=utf8 #默认utf8字符集 |
06 | --with-extra-charsets=gb2312 #添加gb2312中文字符支持 |
07 | --with-collation=utf8_general_ci --with-extra-charsets=all |
08 | --with-mysqld-user=mysql |
09 | --with-plugins=partition,myisammrg #同时编译partition myisammrg插件 |
10 | --with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock #设置unix socket路径 |
11 | --without-ndb-debug #去掉集群debug模式 |
12 | --enable-assembler #使用一些字符函数的汇编版本 |
13 | --without-isam #去掉isam表类型支持 现在很少用了 isam表是一种依赖平台的表 |
14 | --without-innodb #去掉innodb表支持 innodb是一种支持事务处理的表,适合企业级应用,对于普通应用来说过于消耗资源,(本人注:不过这一点我本人持保留意见) |
15 | --with-pthread #强制使用pthread库(posix线程库) |
16 | --enable-thread-safe-client #以线程方式编译客户端 |
17 | --with-client-ldflags=-all- static |
18 | --with-mysqld-ldflags=-all- static #以纯静态方式编译服务端和客户端 |
21 | scripts/mysql_install_db #生成mysql用户数据库和表文件 |
23 | cp support-files/mysql.server /etc/init.d/mysqld # copy 启动的mysqld文件 |
24 | chmod 700 /etc/init.d/mysqld |
28 | chown mysql mysql/ var -R |
33 | chkconfig --level 345 mysqld on |
35 | ln -s /web/mysql/bin/mysql /sbin/mysql |
36 | ln -s /web/mysql/bin/mysqladmin /sbin/mysqladmin |