MySQL服务器性能优化

原文:http://yujianglei.blog.51cto.com/7215578/1727647

一:配置文件读取位置,不同系统my.cnf配置文件位置不同.

1
2
3
例如debian位置:/etc/mysql/my.cnf
找到mysqld二进制文件: find   /  -name  mysqld

/usr/bin/mysqld   --verbose  --help  | grep  -A 1  "Default options"

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


二:全局缓存

1
2
3
4
5
(key_buffer_size(默认值:384M)
innodb_buffer_pool_size
innodb_additional_mem_pool_size
innodb_log_buffer_size(默认值:8M)
query_cache_size(默认值:32M)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1.innodb_buffer_pool_size(默认值:128M)

1
innodb_buffer_pool_size=24G

优点:缓存索引,缓存行数据,自适应哈希索引,插入缓存,锁,内部数据结构

缺点:Innodb缓存过大,预热和关闭会花费大量时间.该时间由脏页数量决定的.因为在关闭之前会把脏页的写回数据文件.强制关闭后,恢复时间会很长.

解决缺点:  若要关闭mysql数据库,可以事先讲脏页的数量(innodb_max_dirty_pages_pct)调的小一点,值改小后,等待新的线程清理缓冲池,然后在脏页数量小得时候,再关闭数据库.

但是innodb_max_dirty_pages_pct越小,并不能保证脏页的数量会很小.

配置:内存的80%(前提是该服务器只跑了mysql一个消耗内存型,IO型的数据库)

监控:show  status   或者innotop工具


2.innodb_additional_mem_pool_size(默认值:8M)

1
innodb_additional_mem_pool_size=16M

存放数据字典信息以及一些内部数据结构的内存空间大小,当mysql实例数据库对象很多时,调大该值.判断是否足够,查看mysql的error日志中,看是否有warnning信息.


3.innodb_log_buffer_size(默认8M)

1
2
innodb_log_buffer_size=8M
innodb_flush_log_trx_commit=2

临时存放事务日志.InnoDB在写事务日志的时候,为了提高性能,先讲事务日志写到innodb_log_buffer中,当满足innodb_flush_log_trx_commit参数所设置的相应条件(或者日志缓冲区写满)之后,才会将日志写到文件 (或者同步到磁盘)中.

理想值为 1M 至 8M,一般不要超过32M.

注:innodb_flush_log_trx_commit参数对InnoDB Log的写入性能有非常关键的影响,默认值为1。该参数可以设置为0,1,2.


4.innodb_flush_log_trx_commit(默认值为1)

1
innodb_flush_log_trx_commit=2


该值对数据库的写入性能影响非常大.MySQL官方建议将插入操作合并成一个事务,这样可以大幅提高速度

实际测试发现,设置为2时插入10000条记录只需要2秒

            设置为0时插入10000条记录只需要1秒,

            设置为1时插入10000条记录需要229秒。在存在丢失最近部分事务的危险的前提下,可以把该值设为0。


事务刷新.可配置为0,1,2

0:表示log buffer中的数据会以每秒一次刷新的频率刷新到log file中.同时也会触发文件系统到磁盘的同步操作.

1:表示每次有新事务提交都会将log buffer中的数据刷新到log file中.同时也会触发文件系统到磁盘的同步操作.

2:表示每次有新事务提交都会将log buffer中的数据刷新到log file中,但是文件系统会以每秒一次的刷新频率到磁盘上.


5.query_cache_size(默认为32M)

1
2
query_cache_size=256M
query_cache_type=ON


缓存select语句的执行结果.单不是全部缓存,条件是查询到的结果集大小必须小于等于query_cache_size的大小.

注意:

该值得使用或者不用,取决于查询表中的数据是否经常变化,例如我公司的订单表.该表的数据时时刻刻都在变化,因此不能应用此选项.这是一个致命的配置.因为表中的数据一旦变化,那么存在查询缓存中的结果都会失效.

多个参数配合使用该选项.

query_cache_size  缓存结果集大小

query_cache_type ={0|1|2}

0:表示不用查询缓存

1:表示不使用缓存.1(ON)或者2(DEMOND),分别表示完全不使用query cache,除显式要求不使用query cache(使用sql_no_cache)之外的所有的select都使用query cache,

配置:256M足够

Query Cache的命中率(Qcache_hits/(Qcache_hits+Qcache_inserts)*100))来进行调整


6.key_buffer_size

1
key_buffer_size=128M

优点:缓存索引数据,并只缓存索引数据

缺点:mysql5.0上限4G

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


三:局部缓存(read_buffer_size,sort_buffer_size,read_rnd_buffer_size,tmp_table_size )

这些局部内存在需要的时候才会分配,然后等操作完成之后就回立即释放占用的内存.

1.read_buffer_size(默认值:2M)

1
read_buffer_size=4M

顺序读缓存区,对表进行顺序扫描所分配的一块缓冲区.

如果程序定时去扫描数据表,应该增大该值来提高性能.


2.read_rnd_buffer_size(默认值:8M)

1
read_rnd_buffer_size=8M

随机读缓冲区,对表随机读取数据时分配的一块缓冲区.


3.sort_buffer_size(默认值: 2M)

1
sort_buffer_size=4M

用于oder by语句存放排序查询


4.tmp_table_size(默认值:16M)

1
tmp_table_size=16M

联合查询缓存大小



5.表缓存

table_open_cache

1
table_open_cache=4096

解释:存储对象是数据表.

监控:如果Opend_tables状态变量很大或者在增长,可能是表缓存不够大,应该增大.

缺点:当数据库中的表MyISAM表很多时,可能会导致关机时间很长.因为关机前索引块必须完成刷新.表都被标记为不再打开.

监控:如果发现open_tables等于table_open_cache,并且opened_tables在不断增长,那么你就需要增加table_open_cache的值了.

该值计算:max_connections*n

n表示查询语句中最大的表.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


四:线程缓存(thread_cache_size)

1
thread_cache_size=64

解释:为新建mysql的连接而准备的线程.thread_cache_size保证缓存中的线程数.一般无需配置此值,除非数据库有大量的连接请求.当一个连接创建时,如果缓存中有线程存在,MYSQL从缓存

删除一个线程,并且把它分配给这个新的连接,当连接关闭时,若缓存中还有空间,MYSQL又会把这个连接放到缓存中.若没有空间,MYSQL会销毁这个线程.

监控:检查线程缓存是否够用,查看Threads_connectd状态变量.

例子:

Threads_connected在100-200之间,则thread_cache_size=20,足够.

Threads_connected在500-700之间,则thread_cache_size=200,足够.

通过连接线程池的命中率来判断设置值是否合适?命中率超过90%以上,设定合理。

 (Connections -  Threads_created) / Connections * 100 %


 thread_concurrency

 解释:该值应该为CPU核数的2倍.

 例子:2个物理cpu,每个CPU8核心,那么

 thread_concurrency=2*8*2=32



5.InnoDB并发限制

innodb_thread_concurrency=24

解释:它会限制一次性可以有多少个线程进入内核.0表示不限制.在任何架构和业务压力下,设置好这个值很重要.

innodb_thread_concurrency=CPU数量*磁盘数量*2

例子:2个物理cpu,每个CPU8核心,那么

thread_concurrency=2*6*2=32


6.数据库文件描述符(open_files_limit)

1
open_files_limit=65535


7.请求队列(back_log)

1
back_log=500

mysql新建请求队列,只定max_connections达到最大时,还可以接受多少的请求,先放到队列中.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


五:其他


1.

innodb_data_file_path = ibdata1:1G:autoextend 

innodb_log_file_size = 512M


注意:以上参数在启动数据库前必须配置好,否则报错如下:

1
2
3
4
5
6
2015-12-23 17:03:06 16182 [ERROR] InnoDB: auto-extending data file ./ibdata1 is of a different size 768 pages (rounded down to MB) than specified in the .cnf file: initial 65536 pages, max 0 (relevant if non-zero) pages!
2015-12-23 17:03:06 16182 [ERROR] InnoDB: Could not open or create the system tablespace. If you tried to add new data files to the system tablespace, and it failed here, you should now edit innodb_data_file_path in my.cnf back to what it was, and remove the new ibdata files InnoDB created in this failed attempt. InnoDB only wrote those files full of zeros, but did not yet use them in any way. But be careful: do not remove old data files which contain your precious data!
2015-12-23 17:03:06 16182 [ERROR] Plugin 'InnoDB' init function returned error.
2015-12-23 17:03:06 16182 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2015-12-23 17:03:06 16182 [ERROR] Unknown/unsupported storage engine: INNODB

2015-12-23 17:03:06 16182 [ERROR] Aborting


2.innodb_log_files_in_group = 2



#################################################

关于MySQL高可用

MySQL高可用架构方案以及性能优化收集整理!_MySQL高可用以及性能优化收集整理!

MySQL数据库的高可用架构方案

原文:http://yuhongchun.blog.51cto.com/1604432/510652

一、MySQL Cluster
优势:可用性非常高,性能非常好。每份数据至少可在不同主机存一份拷贝,且冗余数据拷贝实时同步。但它的维护非常复杂,存在部分Bug,目前还不适合比较核心的线上系统,所以这个我不推荐。
二、DRBD磁盘网络镜像方案
优势:软件功能强大,数据可在底层快设备级别跨物理主机镜像,且可根据性能和可靠性要求配置不同级别的同步。IO操作保持顺序,可满足数据库对数据一致性的苛刻要求。但非分布式文件系统环境无法支持镜像数据同时可见,性能和可靠性两者相互矛盾,无法适用于性能和可靠性要求都比较苛刻的环境,维护成本高于MySQL Replication。另外,DRBD也是官方推荐的可用于MySQL高可用方案之一,所以这个大家可根据实际环境来考虑是否部署。
三、MySQL Replication
在实际应用场景中,MySQL Replication是使用最为广泛的一种提高系统扩展性的设计手段。众多的MySQL使用者通过Replication功能提升系统的扩展性后,通过简单的增加价格低廉的硬件设备成倍 甚至成数量级地提高了原有系统的性能,是广大MySQL中低端使用者非常喜欢的功能之一,也是许多MySQL使用者选择MySQL最为重要的原因。

比较常规的MySQL Replication架构也有好几种,这里分别简单说明下
MySQL Replication架构一:常规复制架构--Master-slaves,是由一个Master复制到一个或多个Salve的架构模式,主要用于读压力大的应用数据库端廉价扩展解决方案,读写分离,Master主要负责写方面的压力。
MySQL Replication架构二:级联复制架构,即Master-Slaves-Slaves,这个也是为了防止Slaves的读压力过大,而配置一层二级 Slaves,很容易解决Master端因为附属slave太多而成为瓶劲的风险。
MySQL Replication架构三:Dual Master与级联复制结合架构,即Master-Master-Slaves,最大的好处是既可以避免主Master的写操作受到Slave集群的复制带来的影响,而且保证了主Master的单点故障。
以上就是比较常见的MySQL replication架构方案,大家可根据自己公司的具体环境来设计 ,Mysql 负载均衡可考虑用LVS或Haproxy来做,高可用HA软件我推荐Heartbeat。
MySQL Replication的不足:如果Master主机硬件故障无法恢复,则可能造成部分未传送到slave端的数据丢失。所以大家应该根据自己目前的网络规划,选择自己合理的Mysql架构方案,跟自己的MySQL DBA和程序员多沟涌,多备份(备份我至少会做到本地和异地双备份),多测试,数据的事是最大的事,出不得半点差错,切记切记。
因本人自身能力有限,以上认识可能存在错误和疏漏,大家有什么想法和意见都可以通过我的博客与我交流,我会在第一时间更正此文章。

###################################################


MYSQL企业常用架构与调优经验分享

关于Mysql数据库的高可用以及mysqlproxy中间件的选型一直是个很活跃的技术话题。以高可用为例,解决方案有mysql ndb集群,mmm , mha, drbd等多种选择。Mysql proxy中间件则有mysql-proxy, atlas , cobar, mycat, tddl等,可谓五花八门。

可参考:http://ylw6006.blog.51cto.com/470441/1568853/


原文:http://ixdba.blog.51cto.com/2895551/1751377

一、选择Percona Server、MariaDB还是MYSQL


1、Mysql三种存储引擎


MySQL提供了两种存储引擎:MyISAM和 InnoDB,MySQL4和5使用默认的MyISAM存储引擎。从MYSQL5.5开始,MySQL已将默认存储引擎从MyISAM更改为InnoDB。

MyISAM没有提供事务支持,而InnoDB提供了事务支持。


XtraDB是InnoDB存储引擎的增强版本,被设计用来更好的使用更新计算机硬件系统的性能,同时还包含有一些在高性能环境下的新特性。

2、Percona  Server分支


Percona Server由领先的MySQL咨询公司Percona发布。

Percona Server是一款独立的数据库产品,其可以完全与MySQL兼容,可以在不更改代码的情况了下将存储引擎更换成XtraDB。是最接近官方MySQL Enterprise发行版的版本。

Percona提供了高性能XtraDB引擎,还提供PXC高可用解决方案,并且附带了percona-toolkit等DBA管理工具箱,

3、MariaDB

MariaDB由MySQL的创始人开发,MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

MariaDB提供了MySQL提供的标准存储引擎,即MyISAM和InnoDB,10.0.9版起使用XtraDB(名称代号为Aria)来代替MySQL的InnoDB。


4、如何选择


综合多年使用经验和性能对比,首选Percona分支,其次是MariaDB,如果你不想冒一点风险,那就选择MYSQL官方版本。

二、常用的MYSQL调优策略


1、硬件层相关优化

修改服务器BIOS设置

选择Performance Per Watt Optimized(DAPC)模式,发挥CPU最大性能。

Memory Frequency(内存频率)选择Maximum Performance(最佳性能)

内存设置菜单中,启用Node Interleaving,避免NUMA问题

2、磁盘I/O相关

使用SSD硬盘

如果是磁盘阵列存储,建议阵列卡同时配备CACHE及BBU模块,可明显提升IOPS。

raid级别尽量选择raid10,而不是raid5.

3、文件系统层优化

使用deadline/noop这两种I/O调度器,千万别用cfq

使用xfs文件系统,千万别用ext3;ext4勉强可用,但业务量很大的话,则一定要用xfs;

文件系统mount参数中增加:noatime, nodiratime, nobarrier几个选项(nobarrier是xfs文件系统特有的);


4、内核参数优化

修改vm.swappiness参数,降低swap使用率。RHEL7/centos7以上则慎重设置为0,可能发生OOM

调整vm.dirty_background_ratio、vm.dirty_ratio内核参数,以确保能持续将脏数据刷新到磁盘,避免瞬间I/O写。产生等待。

调整net.ipv4.tcp_tw_recycle、net.ipv4.tcp_tw_reuse都设置为1,减少TIME_WAIT,提高TCP效率。

5、Mysql参数优化建议

建议设置default-storage-engine=InnoDB,强烈建议不要再使用MyISAM引擎。

调整innodb_buffer_pool_size的大小,如果是单实例且绝大多数是InnoDB引擎表的话,可考虑设置为物理内存的50% -70%左右。

设置innodb_file_per_table = 1,使用独立表空间。

调整innodb_data_file_path = ibdata1:1G:autoextend,不要用默认的10M,在高并发场景下,性能会有很大提升。

设置innodb_log_file_size=256M,设置innodb_log_files_in_group=2,基本可以满足大多数应用场景。

调整max_connection(最大连接数)、max_connection_error(最大错误数)设置,根据业务量大小进行设置。

另外,open_files_limit、innodb_open_files、table_open_cache、table_definition_cache可以设置大约为max_connection的10倍左右大小。

key_buffer_size建议调小,32M左右即可,另外建议关闭query cache。

mp_table_size和max_heap_table_size设置不要过大,另外sort_buffer_size、join_buffer_size、read_buffer_size、read_rnd_buffer_size等设置也不要过大。

三、   MYSQL常见的应用架构分享

1、主从复制解决方案

这是MySQL自身提供的一种高可用解决方案,数据同步方法采用的是MySQL replication技术。MySQL replication就是从服务器到主服务器拉取二进制日志文件,然后再将日志文件解析成相应的SQL在从服务器上重新执行一遍主服务器的操作,通过这种方式保证数据的一致性。

为了达到更高的可用性,在实际的应用环境中,一般都是采用MySQL replication技术配合高可用集群软件keepalived来实现自动failover,这种方式可以实现95.000%SLA

MySQL高可用架构方案以及性能优化收集整理!_MySQL高可用以及性能优化收集整理!_02

2MMM/MHA高可用解决方案

MMM提供了MySQL主主复制配置的监控、故障转移和管理的一套可伸缩的脚本套件。在MMM高可用方案中,典型的应用是双主多从架构,通过MySQL replication技术可以实现两个服务器互为主从,且在任何时候只有一个节点可以被写入,避免了多点写入的数据冲突。同时,当可写的主节点故障时,MMM套件可以立刻监控到,然后将服务自动切换到另一个主节点,继续提供服务,从而实现MySQL的高可用。

MySQL高可用架构方案以及性能优化收集整理!_MySQL高可用以及性能优化收集整理!_03

3Heartbeat/SAN高可用解决方案

在这个方案中,处理failover的方式是高可用集群软件Heartbeat,它监控和管理各个节点间连接的网络,并监控集群服务,当节点出现故障或者服务不可用时,自动在其他节点启动集群服务。在数据共享方面,通过SANStorage Area Network)存储来共享数据,这种方案可以实现99.990%SLA

MySQL高可用架构方案以及性能优化收集整理!_MySQL高可用以及性能优化收集整理!_04

4Heartbeat/DRBD高可用解决方案

此方案处理failover的方式上依旧采用Heartbeat,不同的是,在数据共享方面,采用了基于块级别的数据同步软件DRBD来实现。

DRBD是一个用软件实现的、无共享的、服务器之间镜像块设备内容的存储复制解决方案。和SAN网络不同,它并不共享存储,而是通过服务器之间的网络复制数据。

 

MySQL高可用架构方案以及性能优化收集整理!_MySQL高可用以及性能优化收集整理!_05

其中:

         Dbm157mysql主,dbm158mysql主的备机,dbs159/160/161mysql从。

MySQL写操作一般采用基于heartbeat+DRBD+MySQL搭建高可用集群的方案。通过heartbeat实现对mysql主进行状态监测,而DRBD实现dbm157数据同步到dbm158

读操作普遍采用基于LVS+Keepalived搭建高可用高扩展集群的方案。前端AS应用通过提高的读VIP连接LVSLVSkeepliaved做成高可用模式,实现互备。

         最后,mysql主的从节点dbs159/160/161通过mysql主从复制功能同步mysql主的数据,通过lvs功能提供给前端AS应用进行读操作,并实现负载均衡。


MySQL 5.5 服务器变量详解

原文详解1:http://mageedu.blog.51cto.com/4265610/1058357

原文详解2:http://mageedu.blog.51cto.com/4265610/1062628

autocommit={0|1}

设定MySQL事务是否自动提交,1表示立即提交,0表示需要显式提交。作用范围为全局或会话,可用于配置文件中(但在5.5.8之前的版本中不可用于配置文件),属于动态变量。

 

automatic_sp_privileges={0|1}

设定MySQL服务器是否为存储例程的创建赋予其创建存储例程上的EXECUTE和ALTER ROUTINE权限,默认为1(赋予此两个权限给其创建者)。作用范围为全局。

 

back_log=#

当MySQL的主线程在短时间内收到大量连接请求时,其会花些时间检测已经有线程并为新请求启动新线程,back_log参数的值即为短时间内到达的请求中有多少可以被接受并等待主MySQL线程进行后续处理。作用范围为全局,可以用配置文件,非动态变量。

 

basedir=PATH, -b PATH

用于指定MySQL的安装目录,所有其它的常用相对路径都相对于此处的路径而言。作用范围为全局,可用于配置文件中,但属于非动态变量。

 

bind-address=ADDR

指定mysqld服务监听的IP地址,默认为0.0.0.0,表示本机已配置的所有IP地址。作用范围为全局,可用于配置文件中,但属于非动态变量。

 

binlog-format={ROW|STATEMENT|MIXED}

指定二进制日志的类型,默认为STATEMENT。如果设定了二进制日志的格式,却没有启用二进制日志,则MySQL启动时会产生警告日志信息并记录于错误日志中。作用范围为全局或会话,可用于配置文件,且属于动态变量。

 

buld_insert_buffer_size

MyISAM引擎使用一个特殊的树状结构的缓存来加速批量插入操作,如INSERT...SELECT, INSERT...VALUES(...),(...),...和LOAD DATA INFILE命令完成的插入操作。对于每个线程来说,此buffer的大小是独立的,其配置的数值单位为字节,有效取值范围为0至“2^CPU字长”次方,默认大小为8MB。作用范围为全局或会话,可用于配置文件,属动态变量。

 

chroot=PATH, -r PATH

设定MySQL基于chroot模式工作时的工作目录,在安全问题尤为重要的环境中,这是推荐使用的机制。但此时,LOAD DATA INFILE等命令的工作可能会受到影响。可用于配置文件。

 

console

仅用于Windows平台的选项,用于实现将错误日志信息发送至标准输入和错误输出,即使配置了--log-error选项,此功能也一样有效。

 

concurrent_insert={NEVER|AUTO|ALWAYS} 或分别使用{0|1|2}

设定是否允许在MyISAM表上并行执行INSERT和SELECT语句。作用范围为全局,可用于配置文件,属动态变量。

 

connect_timeout=#

mysqld服务器端在响应“失败的握手操作”信息给客户端之前所等待的秒数,默认为10秒。作用范围为全局,可用于配置文件,属动态变量。

 

core-file

当MySQL进程宕掉时将信息保存为一个core文件,在Linux平台上,core文件通常被保存至当前进程的工作目录中,并命名为core.pid,其文件名后缀pid为当前进程的进程号;对MySQL而言,保存目录为数据文件目录。

 

datadir=PATH, -h PATH

指定MySQL服务的数据目录。作用范围为全局,可用于配置文件中,但属于非动态变量。

 

default_storage_engine={Engine_Name}

设定MySQL服务器的默认存储引擎。MySQL 5.5.5版本之前默认为MyISAM,之后的版本默认为InnoDB。作用范围为全局,可用于配置文件,属动态变量。

 

delay-key-write={ON|OFF|ALL}

仅用于MyISAM表,且要求在创建表时使用了DELAY_KEY_WRITE选项。在启用时,key buffer不会在每一次索引更新时都予以清空,而是在表关闭时才执行key buffer清空操作。OFF表示忽略DELAY_KEY_WRITE,ON表示MySQL接受CREATE TABLE时使用的任何DELAY_KEY_WRITE选项,ALL表示所有新打开的表遵循此特性。

 

error-count

上一条SQL语句导致的错误信息的数目,此为只读变量。

 

event-scheduler={ON|OFF|DISABLED}

设定MySQL服务器是否启用以及否启动Event Scheduler。OFF表示停止,此为默认值;ON表示启动,其处于运行状态并执行所有的调度事务;DISABLED表示禁用Event Scheduler,即其不能切换为启动状态。作用范围为全局,可用于配置文件,属动态变量。

 

expire_logs_days={0..99}

设定二进制日志的过期天数,超出此天数的二进制日志文件将被自动删除。默认为0,表示不启用过期自动删除功能。如果启用此功能,自动删除工作通常发生在MySQL启动时或FLUSH日志时。作用范围为全局,可用于配置文件,属动态变量。

 

external_user=name

在MySQL服务器上基于认证插件进行用户认证时,此插件会把发起连接请求用户当作另一个用户以达到权限检查的目的,这样可以使得外部用户作第二用户的代理用户,并拥有第二用户的所有权限。当使用MySQL的内部认证机制或没有插件为其设定值时,此变量的值为NULL。作用范围为会话级别,不可用于配置文件,属非动态变量。

 

flush={ON|OFF}

设定MySQL服务器是否单独为每个SQL语句执行数据同步(将数据写入磁盘)。正常情况下,MySQL为每个语句执行数据同步工作,并将后续的同步过程交由操作系统完成。默认为OFF。作用范围为全局,可用于配置文件,属动态变量。

 

flush-time={0..}

为非0值时,MySQL服务器会将所有打开的表每隔flush_time指定的时长进行关闭,使用其释放所有资源并将数据同步至磁盘中。只有在系统资源极其稀缺的情况下才需要启用此功能。默认值是0,即为禁用此功能。作用范围为全局,可用于配置文件,属动态变量。

 

foreign-key-checks={0|1}

设定是否为InnoDB表查检外键约束,默认为1,即检查。在不确保按原有顺序重新装载所有InnoDB表时,禁用此功能会避免外键约束的副作用。

 

general_log={ON|OFF}

设定是否启用查询日志,默认值为取决于在启动mysqld时是否使用了--general_log选项。如若启用此项,其输出位置则由--log_output选项进行定义,如果log_output的值设定为NONE,即使用启用查询日志,其也不会记录任何日志信息。作用范围为全局,可用于配置文件,属动态变量。

 

general_log_file=FILE_NAME

查询日志的日志文件名称,默认为“hostname.log"。作用范围为全局,可用于配置文件,属动态变量。

 

group_concat_max_len={4..}

设定GROUP_CONCAT()函数返回值的最大长度,默认为1024。有效取值范围为4至“2^CPU字长”次方。作用范围为全局或会话级别,用于配置文件,属动态变量。

 

have-compress={YES|NO}

zlib压缩库是否能为MySQL服务器所用。当其值为NO时,COMPRESS()和UNCOMPRESS()函数均不可用。

 

have_crypt={YES|NO}

crypt()系统调用是否可为MySQL服务器所用。当其值为NO时,ENCRYPT()函数则不可用。

 

have_csv={YES|NO}

mysqld支持CSV引擎时为YES,否则为NO。

 

have_dynamic_loading={YES|NO}

mysqld支持动态加载插件时为YES,否则为NO。

 

have_geometry={YES|NO}

mysqld支持空间数据类型时为YES,否则为NO。

 

have_innodb={YES|NO}

mysqld支持InnoDB存储引擎时为YES,否则为NO。

 

have_openssl={YES|NO}

此为have_ssl选项的别名;

 

have_ssl={YES|NO}

mysqld支持SSL连接时为YES,否则为NO。DISABLED表示mysqld编译时启用了对SSL的支持,但在启动mysqld时没能使用正确的ssl-xxx类(如ssl_cert)的选项。

 

have_partitioning={YES|NO}

mysqld是否支持partitioning,此选项已经基本废弃,且在MySQL-5.6中已经移除,使用SHOW ENGINES可获取此相关信息。

 

have_profiling={YES|NO}

mysqld支持语句性能分析时则为YES,否则为NO。如果支持profiling功能,则--profiling变量则用于控制是否启动此功能。

 

have_query_cache={YES|NO}

mysqld支持查询缓存则为YES,否则为NO。

 

have_rtree_keys={YES|NO}

mysqld支持RTREE索引则为YES,否则为NO。RTREE索引用于MyISAM表的空间索引。

 

have_symlink={YES|NO}

mysqld支持符号链接则为YES,否则为NO。在Unix主机上,此功能对数据目录和索引目录有用。

 

hostname=STRING

mysqld服务器启动时将主机名称赋值给此变量。作用范围为全局,属非动态变量。

 

identity

last_insert_id变量的同义词,其存在的主要目的是为了兼容其它数据库系统。会话级别的变量。

 

init_connect=STRING

设定在每个客户端与mysqld建立连接时事先执行的一个或多个(彼此间用分号隔开)SQL语句,但对于具有SUPER权限的用户来说,此功能无效。例如,在5.5.8之前的MySQL中尚未出现autocommit变量,此时若要为每位用户默认禁用autocommit功能,就可以在mysqld的配置文件中使用init_connect='SET autocommit=0'来实现,当然也可以使用SET GLOBAL init_connect='SET autocommit=0';命令完成。作用范围为全局级别,可用于配置文件,属动态变量。

 

init-file=/PATH/TO/SOMEFILE

定义在mysqld启动时使用的初始化文件,此文件每行包含一个单独的SQL语句(不能有注释,不需要且不能使用语句结束符),并会在mysqld启动时逐个执行。

 

insert_id

为某表中设定了AUTO_INCREMENT的字段执行INSERT或ALTER_TABLE语句时将使用此变量的值。主要为二进制日志所用。

 

interactive_timeout=#

mysqld进程等待一个已经建立连接的交互式客户端的后续命令之前所经过的秒数,默认为28800。作用范围为全局或会话级别,用于配置文件,属动态变量。

 

join_buffer_size=#

mysqld用于平面索引扫描(plain index scans)、范围索引扫描或不使用索引的全表扫描时所能够使用的最小缓冲。正常情况下,添加索引是加快连接执行速度的有效手段,而无法添加索引时,增大join_buffer_size的值可以加快完全连接的执行速度。两表之间的每个完全连接会使用一个单独的join buffer,多表之间的非基于索引的复杂完全连接则有可能使用多个join buffer。将此变量值设定的大过每个匹配的行的大小等并不能带来太多的益处,因此,不应该在全局范围内将此值设定的过大。建议使用较小的全局设定,只为需要的会话中使用较大连接时设定较大值。其最大值取决平台,如32bit平台上的最大值为4G。

 

keep_files_on_create={ON|OFF}

此项默认值为OFF。创建MyISAM类型的表时,mysqld会在数据目录中为其创建一个.MYD文件和一个.MYI文件,如果数据目录中已经存在一个同名的文件,默认设定为覆盖操作,当设定此变量为OFF时,则会返回一个错误信息。作用范围为全局或会话级别,可用于配置文件,属动态变量。

 

key_buffer_size=#

所有线程共享的、用于MyISAM表的索引缓冲空间大小,其也通常被称作key cache。在32位平台上其最大值为4G,64位平台上允许使用更大的值,但较为有效的值取决于可用物理RAM资源的大小和每进程可用RAM大小的限制。mysqld启动时会尽可能分配接近于指定大小的RAM空间给key_buffer_size,而非一定是指定大小。增大此值可以加速读写操作时对索引的处理速度,因此,在一个以MyISAM为主要表类型的应用场景中可以将此值设定到物理内存空间的25%,然而,比此者再大的值则反而可能引起系统性能下降了,比如设定到物理内容间的50%时则可能带来严重的性能问题。更何况,还需要考虑其它类型存储引擎对内存的需要。

当向表中同时插入多行数据时,使用LOCK TABLES会加速其执行过程。当然,也可以观察SHOW STATUS命令输出中的Key_read_requests, Key_reads, Key_write_requests和Key_writes值也判定mysqld的性能表现。正常情况下,Key_reads/Key_read_requests的比值应该小于0.01,而Key_writes/Key_write_requests的比值通常会接近于1,不过在启用了DELAY_KEY_WRITE选项的场景中,这个比值可能会更小。

 

key_cache_block_size=#

MyISAM存储引擎的索引存放于“.MYI”文件中,每个“.MYI”文件由文件头和实际的索引数据共同组成。在“.MYI”的相关概念中,其逻辑上表现为多个Index Block,但并非物理结构。在物理上,索引是以文件块(File Block)的形式来存放在磁盘上面的。在Key Cache中缓存的索引信息是以缓存块(Cache Block)的形式组织存放的,缓存块是一组相同大小的存储空间,和“.MYI”文件物理存储的Block(File Block)类似。

在一条查询语句通过索引检索表数据的时候,首先会检查索引缓存(key_buffer_cache)中是否已经存储了需要的索引信息,如果没有,则会读取“.MYI”文件,将相应的索引数据读入Key Cache中的内存空间中,并存储为缓存块格式。此时,如果整个Key Cache中已经没有空闲的缓存块空间可以使用的话,mysqld将会通过LRU算法将某些缓存块予以清除。

key_cache_block_size参数则用于设定cache block的大小,默认为1024。作用范围为全局级别,可用于配置文件,属动态变量。

 

key_cache_division_limit=#

实际上,在MySQL的Key Cache中所使用的LRU算法并不像传统的算法一样仅仅只是通过访问频率以及最后访问时间来通过一个唯一的链表实现,而是将其分成了两部分。一部分用来存放使 用比较频繁的Hot Cache Lock(Hot Chain),被称作Hot Area,另外一部分则用来存放使用不太频繁的Warm Cache Block(Warm Chain),也被称作Warm Area。这样做的目的主要是为了保护使用比较频繁的Cache Block更不容易被换出。而key_cache_division_limit参数则正是用于告诉MySQL该如何划分整个Cache Chain划分为Hot Chain和Warm Chain两部分,参数值为Warm Chain占整个Chain 的百分比值。设置范围1~100,系统默认为100,也就是只有Warm Chain。

 

key_cache_age_threshold=#

控制Hot Area中的Cache Block何时该被降级到Warm Area中。系统默认值为300,最小可以设置为100。值越小,被降级的可能性越大。

 

large_files_support={YES|NO}

mysqld是否在编译时的编译选项中指定了支持大文件。其作用域为全局,为非动态变量。

 

large_pages={YES|NO}

Linux平台上专用的参数,用于设定mysqld是否支持使用大内存页。使用大内存而可以提高TLB的命中率,进行提高系统性能。其作用域为全局,可以用于配置文件中,为非动态变量。

 

large_page_size=#

Linux平台上专用的参数,用于设定mysqld使用的大内存页的大小,一般为4MB,在其它平台上此参数的值为0,即为禁用。其作用域为全局,为非动态变量。

 

last_insert_id

此参数的值由LAST_INSERT_ID()函数返回,在更新表的语句中使用LAST_INSERT_ID()时其对应的确切值会存储于二进制日志中。

 

lc_messages=STRING

错误信息的区域设定(即语言区域),mysqld将此值转换为语言名称,并结合lc_messages_dir参数指定的路径中的区域相关的语言文件来返回错误信息。作用范围为全局或会话级别,可用于配置文件,属动态变量。

 

lc_messages_dir=/PATH/TO/SOME_DIR

错误信息的存储目录,通过与lc_messages参数设定的语言区域来返回错误信息。作用范围为全局或会话级别,可用于配置文件,属动态变量。

 

lc_time_names=STRING

设定基于语言区域来显示日、月及其简写方式等日期信息的语言区域,其值如en_US等,但与系统的locale无关。此设定将影响DATE_FORMAT(), DAYNAME()和MONTHNAME()函数的输出结果。作用范围为全局或会话级别,属动态变量。

 

local_infile={YES|NO}

设定mysqld是否支持使用LOAD DATA INFILE语句。默认为ON。作用范围为全局级别,属动态变量。

 

local_wait_timeout=#

以秒为单位设定所有SQL语句等待获取元数据锁(metadata lock)的超时时长,默认为31536000(1年),有效取值范围为0-31536000。其影响的SQL语句包括用于表、视图、存储过程和存储函数的DML和DDL语句,以及LOCK TABLES、FLUSH TABLES WITH READ LOCK和HANDLER语句等。但其作用的所有对象不包括mysql数据库中的系统表及用于记录日志的表上的GRANT或REVOKE语句,但包括SELECT或UPDATE语句。

另外,此超时时长分别应用于每个元数据锁,因此,一个语句可能会持有多个元数据锁,那么其最后的生效超时时长有可能会长时这个设定值。作用范围为全局或会话级别,可用于配置文件,属动态变量。

 

locked_in_memory={YES|NO}

mysqld是否使用--memlock选项锁定在了内存中。作用范围为全局级别,属非动态变量。

 

log={YES|NO}

是否启用记录所有语句的日志信息于一般查询日志(general query log)中,默认通常为OFF。MySQL 5.6已经弃用此选项。

 

log-bin={YES|NO}

是否启用二进制日志,如果为mysqld设定了--log-bin选项,则其值为ON,否则则为OFF。其仅用于显示是否启用了二进制日志,并不反应log-bin的设定值。作用范围为全局级别,属非动态变量。

 

log_bin_trust_function_creators={TRUE|FALSE}

此参数仅在启用二进制日志时有效,用于控制创建存储函数时如果会导致不安全的事件记录二进制日志条件下是否禁止创建存储函数。默认值为0,表示除非用户除了CREATE ROUTING或ALTER ROUTINE权限外还有SUPER权限,否则将禁止创建或修改存储函数,同时,还要求在创建函数时必需为之使用DETERMINISTIC属性,再不然就是附带READS SQL DATA或NO SQL属性。设置其值为1时则不启用这些限制。作用范围为全局级别,可用于配置文件,属动态变量。

 

log_error=/PATH/TO/ERROR_LOG_FILENAME

定义错误日志文件。作用范围为全局或会话级别,可用于配置文件,属非动态变量。

 

log_output={TABLE|FILE|NONE}

定义一般查询日志和慢查询日志的保存方式,可以是TABLE、FILE、NONE,也可以是TABLE及FILE的组合(用逗号隔开),默认为TABLE。如果组合中出现了NONE,那么其它设定都将失效,同时,无论是否启用日志功能,也不会记录任何相关的日志信息。作用范围为全局级别,可用于配置文件,属动态变量。

 

log_query_not_using_indexes={ON|OFF}

设定是否将没有使用索引的查询操作记录到慢查询日志。作用范围为全局级别,可用于配置文件,属动态变量。

 

log_slave_updates

用于设定复制场景中的从服务器是否将从主服务器收到的更新操作记录进本机的二进制日志中。本参数设定的生效需要在从服务器上启用二进制日志功能。

 

log_slow_queries={YES|NO}

是否记录慢查询日志。慢查询是指查询的执行时间超出long_query_time参数所设定时长的事件。MySQL 5.6将此参数修改为了slow_query_log。作用范围为全局级别,可用于配置文件,属动态变量。

 

log_warnings=#

设定是否将警告信息记录进错误日志。默认设定为1,表示启用;可以将其设置为0以禁用;而其值为大于1的数值时表示将新发起连接时产生的“失败的连接”和“拒绝访问”类的错误信息也记录进错误日志。

 

long_query_time=#

设定区别慢查询与一般查询的语句执行时间长度。这里的语句执行时长为实际的执行时间,而非在CPU上的执行时长,因此,负载较重的服务器上更容易产生慢查询。其最小值为0,默认值为10,单位是秒钟。它也支持毫秒级的解析度。作用范围为全局或会话级别,可用于配置文件,属动态变量。

 

low_priority_updates={TRUE|FALSE}

设定是否降低更新操作的优先级,仅对只支持表级别锁的存储引擎有效,如MyISAM、MEMORY或MERGE。其值为1则表示所有的INSERT、UPDATE、DELETE或LOCK TABLE WRITE语句只能在没有等待执行的SELECT或LOCK TABLE READ语句时才能执行。作用范围为全局或会话级别,可用于配置文件,属动态变量。

 

lower_case_file_system={ON|OFF}

用于描述数据目录所在的文件系统是否区分文件名称字符大小写,OFF表示区分大小写,ON表示不区分大小写。此变量是只读的,其是否区分大小写取决于文件系统。

 

lower_case_table_name={0|1|2}

设定是否区分表、表别名或者数据库名称中的字符大小写。0表示区分大小写,1表示不区分大小写且一律存储为小写字符,2表示按给定的大小写进行存储但不区分大小写。对于本身不支持区分文件名称大小写功能的文件系统来讲,不应该设定为0值;而在设定为0值的系统上,对于MyISAM存储引擎来说,使用大小写不对应的名称进行访问可能会导致索引文件崩溃。Windows系统上,其默认值为1,Mac OS X上其默认值为2。

对于InnoDB存储引擎来说,应该将其设定为1,无论基于什么平台。同时,也不应该为主从复制集群中的主机使用不同的设定,不然,其可能导致复制失败。作用范围为全局级别,可用于配置文件,属非动态变量。

 

max_allowed_packet={YES|NO}

设定单个报文或任何中间字符串(intermediate string)的最大长度,单位是字节。报文消息缓冲由net_buffer_length参数进行设定,但其最终可以按需增长至max_allowed_packet参数设定的大小。此参数的默认值较小,在使用了BLOB列或长字符串的场景中,应该增大其值至能容纳最大BLOB数据的长度。协议本身限定此值最大为1G,参数只接受1024整数倍的数值,非1024的整数倍将会被自动圆整至离其最近的1024整数倍的数值。

最终生效的报文长度还取决于客户端的设定。客户端程序如mysql或mysqldump的默认设定为1G。作用范围为全局级别,可用于配置文件,属动态变量。

 

max_connect_errors=#

设定客户端连接至mysqld时的最大错误尝试次数。在某客户端尝试连接当前mysqld的错误次数连接达到max_connect_errors所设定的值时,其后续的连接尝试将被直接阻止。管理员可以通过FLUSH HOSTS语句或mysqladmin flush-hosts命令清空主机缓存(host cache)来解除对此前阻止主机的访问锁定。如果某客户端的在其错误尝试次数达到此参数设定的值之前成功建立了连接,其错误尝试次数的计数器将会被清空。作用范围为全局级别,可用于配置文件,属动态变量。

 

max_connections=#

设定mysqld允许客户端同时发起的最大并发连接数。增加此值将增加mysqld进程需要同时访问的文件描述符数目。作用范围为全局级别,可用于配置文件,属动态变量。

 

max_delayed_threads=#

设定为INSERT DELAYED语句所能够启动的最大线程数。如果当前相关的线程数目已经达到此参数所设定的值,后续的INSERT DELAYED语句将无视其DELAYED属性。如果将其值高精为0,mysqld将不为INSERT DELAYED创建任何线程,即禁用DELAYED功能。作用范围为全局级别,可用于配置文件,属动态变量。

 

max_error_count=#

设定为SHOW ERRORS或SHOW WARNINGS语句所保留的关于错误、警告或注意信息条目的最大数。作用范围为全局或会话级别,可用于配置文件,属动态变量。

 

max_heap_table_size=#

设定每个用户创建的MEMORY表所能够使用的最大内存空间。修改其值对当前已经创建的MEMORY表没有影响,除非使用CREATE TABLE、ALTER TABLE或TRUNCATE TABLE对表进行了重建。其最在小值为16384,单位是字节。最大值受限于平台字长,如32位平台为4G。此参数与tmp_table_size参数联合使用可用于限制内部内存表的大小。另外,max_heap_table_size不会被复制。作用范围为全局或会话级别,可用于配置文件,属动态变量。

 

max_insert_delayed_threads=#

max_delayed_threads的同义词。作用范围为全局级别,动态变量。

 

max_join_size=#

设定SELECT语句执行时所能够检查的行数(单表)或行组合(多表查询)的最大值。此参数可以阻止对键的错误使用而导致的需要执行较长时间的查询操作,因此,其尤其适用于有用户经常使用不带WHERE子句的查询场景中。有效取值范围为1-18446744073709551615,默认为18446744073709551615,这可以被理解为不限制。作用范围为全局或会话级别,可用于配置文件,属动态变量。

 

max_length_for_sort_data=#

filesort算法改进版所能够使用的字段最大长度值。有效取值范围是4-8388608。MySQL的filesort算法有两个版本,即原始版本和修改版本,字段长度大于max_length_for_sort_data设定的将使用原始版本,小于此参数值的则使用修改版本在排序缓冲(sort buffer)中完成排序。在使用超出字段超出指定长度时使用修改版本算法,由于可能需要更多的I/O操作,将会导致修改版算法执行速度更慢,而不是更快。作用范围为全局或会话级别,可用于配置文件,属动态变量。

 

max_long_data_size=#

设定可以由mysql_stmt_send_long_data()这个C API函数所传送的参数值的最大长度,如果没有在mysqld启动时设定,其默认为max_allowed_packet变量的值。MySQL 5.6已经弃用此变量。 作用范围为全局级别,可用于配置文件,属非动态变量。

 

max_prepared_stmt_count={0..1048576}

设定mysqld所允许的所有连接会话中执行的准备语句的总数。大量的准备语句同时执行会消耗大量的内存资源,这会带来潜在的“拒绝服务”的风险,因此,应该根据生产需要仔细设定此参数的值。如果新设定的值低于目前已经打开的准备语句总数,其不会对原有的语句产生影响,但不再接受新的执行请求,直到有新的空余额度。默认值是16382,0表示禁用准备语句。作用范围为全局级别,可用于配置文件,属动态变量。

 

max_relay_log_size={4096..1073741824}

设定从服务器上中继日志的体积上限,到达此限度时其会自动进行中继日志滚动。此参数值为0时,mysqld将使用max_binlog_size参数同时为二进制日志和中继日志设定日志文件体积上限。作用范围为全局级别,可用于配置文件,属动态变量。

 

max_seeks_for_key={1 .. 18446744073709547520}

设定基于某key执行查询时所允许的最大查找次数。在通过扫描索引的方式在某表中搜寻与查询条件匹配的行时,无论其索引的基数是什么,MySQL优化器都会假定其查找次数不需要超过此参数设定的数值。较小的值可以强制MySQL更倾向于索引扫描而非表扫描。作用范围为全局或会话级别,可用于配置文件,属动态变量。

 

max_sort_length={4 .. 8388608}

设定mysqld执行数值排序时所使用的字节数,剩余的将被忽略。作用范围为全局级别,可用于配置文件,属动态变量。

 

max_sp_recoursion_depth={0 .. 255}

设定存储过程可被递归调用的最大次数。递归调用会增大对线程栈空间的需要,因此,增大此参数的值,可能还需要在启动时调整thread_stack参数的值。默认值为0,表示禁止递归;最大值为255。作用范围为全局级别,可用于配置文件,属动态变量。

 

max_user_connections={ 0 .. 4294967295 }

设定单个用户允许同时向mysqld发起的最大并发连接请求个数。默认值为0,表示无上限。可为mysqld为此参数指定全局(GLOBAL)参数值,也可将某用户帐号的此参数值设定为只读以为其设定有效并发上限(通过GRANT语句实现)。这意味着,如果用户的此参数有个非0值,则以此限定为准;否则,mysqld会将用户的此参数值设定为全局值。作用范围为全局或会话级别,可用于配置文件,属动态变量。

 

max_write_lock_count=#

mysqld已施加的写锁个数达到此参数值指定的个数时,将允许处理一些挂起的读请求。其最小值为1,最大值取决于平台字长。作用范围为全局级别,属非动态变量。

 

metadata_locks_cache_size={1 .. 1048576}

设定mysqld元数据锁缓存的上限。此缓存可用来避免创建或销毁同步对象(synchronization object),这对于此类操作代价较高的操作系统(如Windows XP)来说尤为有用。默认值为1024。作用范围为全局级别,属非动态变量。

 

min_examined_row_limit=#

所检查的行数低于此参数设定的数值的查询操作将不被记入慢查询日志。默认值为0,最大值取决于平台字长。作用范围为全局或会话级别,可用于配置文件,属动态变量。

 

myisam_data_point_size={2 .. 7}

创建MyISAM表时如果没有设定MAX_ROWS选项,则通过此参数设定其默认指针的大小,单位为字节。默认值是6。作用范围为全局级别,可用于配置文件,属动态变量。

 

myisam_max_sort_file_size=#

设定在MySQL在使用REPARE TABLE、ALTER TABLE或LOAD DATA INFILE命令时为MyISAM表重新创建索引所能够使用的临时文件的体积上限,单位是字节。如果临时文件的大小大过了此上限值,则mysqld会使用key cache创建索引。默认值是2G,而如果MyISAM索引文件本身大过此值且其所在的文件系统有足够的空闲空间,增大此值会提升MySQL性能。作用范围为全局级别,可用于配置文件,属动态变量。

 

myisam_mmap_size=#

设定基于内存映射压缩MyISAM文件时可以使用的内存上限。在有着很多压缩格式MyISAM表的场景中,降低此值可以帮助减少出现内存交换的可能性。其最小值为7,默认值和最大值取决于平台位数。作用范围为全局级别,可用于配置文件,属非动态变量。

 

myisam_recover_options

用于保存mysqld命令行选项--myisam-revover-options的值。此选项用于设定MyISAM存储引擎的恢复模式,其可接受的值有OFF、DEFAULT(恢复模式,但无备份、强制或快速检测)、BACKUP(如果恢复过程中数据发生了改变,则将原表文件备份为table_name-datatime.BAK)、FORCE(强制恢复,哪怕会丢失数据)和QUICK(快速修复),可以以逗号为分隔为此选项同时指定多个值。也可以不为其提供任何参数值,默认为DEFAULT,而“”则表示为OFF,即禁用恢复模式。

如果启用恢复模式,mysqld每次打开一个MyISAM表时都会检测其是否标记为损坏或非正常关闭。如果损坏,则mysqld会尝试修复它;如果为非正常关闭,mysqld将会对其进行检测。

 

myisam_repair_threads=#

在通过排序修复过程中为MyISAM表创建索引的线程的个数,默认为1;如果给定大于1的值,则可以启动多个并行创建索引的线程(每个索引只能由一个线程创建)。最大值取决于平台位数。作用范围为全局或会话级别,可用于配置文件,属动态变量。

 

myisam_sort_buffer_size=#

在REPAIR TABLE过程中,或通过CREATE INDEX/ALTER TABLE为MyISAM表添加索引时为了对索引排序所能够使用的缓冲空间大小。最小值为4,32位系统上所能够使用的最大值为4294967295,即4G;64位系统上可以使用更大的空间。作用范围为全局或会话级别,可用于配置文件,属动态变量。

 

myisam_stats_method={nulls_equal|nulls_unequal|nulls_ignored}

定义在为MyISAM表收集索引分布相关的统计信息时处理NULL值的方式。nulls_equal表示所有的NULL值都视作相同值,nulls_unequal表示所有的NULL值都视作不同值,nulls_ignored表示所有的NULL值都将被忽略。作用范围为全局或会话级别,可用于配置文件,属动态变量。

 

myisam_use_mmap={ON|OFF}

在读写MyISAM表时能否使用内存映射。默认值为OFF。作用范围为全局级别,可用于配置文件,属动态变量。

 

net_buffer_length={1024 .. 1048576}

每个客户端线程都有一个连接缓冲(connection buffer)和一个结果缓冲(result buffer),此参数可以设定这两个缓冲的大小,但它们都可以按需动态增长至max_allowed_packet参数所设定的大小。但每个SQL语句完成后,结果缓冲都会收缩至net_buffer_length参数所定义的大小。一般说来不需要修改此参数的值,除非是内存资源较吃紧的场景中可以将其调小至客户端预期的SQL语句长度。如SQL语句超出此长度,连接缓冲会自动调节其值。其默认值为16384,单位是字节。作用范围为全局或会话级别,可用于配置文件,属动态变量,但对于会话级别来说,此变量是只读的。

 

net_read_timeout=#

设定mysqld等待从客户端接收更多数据的超时时长,默认值为30。作用范围为全局和会话级别,可用于配置文件,属动态变量。

 

net_write_timeout=#

设定mysqld等待向客户端传输数据的超时时长,默认值为60。作用范围为全局和会话级别,可用于配置文件,属动态变量。

 

net_retry_timeout=#

设定mysqld与客户端的通讯中断时,其中止与客户端的连接之前需要重试的次数。默认值为10,其最大取值取决于平台位数。作用范围为全局和会话级别,可用于配置文件,属动态变量。

 

new={ON|OFF}

用于MySQL 4.0中以启用支持MySQL 4.1版本上的某些新特性的能力,但仍然可以保持向后兼容。在MySQL 5.5无须设置,故其值为OFF。

 

old={ON|OFF}

用于定义兼容老版本MySQL的变量,默认是禁用的,但可以在mysqld启动时将其启用以兼容较老的MySQL版本。

 

参考链接 http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_insert_id