【若泽大数据】MySQL参数详解

系统变量提供的是各种与服务器配置和功能有关的信息。大部分的系统变量都可以在服务器启动时进行设置。在运行时,每一个系统变量都拥有一个全局值或会话值,或者同时拥有这两个值。许多系统变量都是动态的,也就是说,可以在服务器郑州运行时修改它们的值。这些类型的信息都会在每个变量的描述里(与变量名同处一行)指明。
对于那些可以在服务器启动时设置的变量,看到的是“自动”一词,后面紧跟着“直接设置”或某个选项。“直接设置”的意思是:可以在命令行上或者在选项文件里,使用与变量名同名的选项直接设置该变量。否则,在“启动”的后面需要紧跟用来设置变量的那个选项。
如果需要指明某个变量的作用范围,则会看到“启动”一词,而后面紧跟着的是“全局”或“会话”(或者两者皆有),用以表明该变量是否拥有GLOBAL形式或SESSION形式(或者是否同时拥有这两种形式)。运行时只读的变量通常只有一个全局值。
对于那些在服务器运行时可以进行修改的变量,则会看到“动态”一词。
通过 SHOW VARIABLES 语句或 mysqladmin variables 命令,可以查看这些系统变量。也可以检查数据库 INFORMATION_SCHEMA 里的 GLOBAL_VARIABLES 表和 SESSION_VARIABLES 表,以获得系统变量的信息。要想显示单个变量值,可以对于全局变量使用 SELECT @@GLOBAL.var_name,对会话变量使用 SELECT @@SESSION.var_name 或 SELECT @@var_name。
使用 SET 语句可以设置系统变量。如果要设置全局变量,则必须要拥有 SUPER 权限。设置会话变量通常不需要特别的权限。例外情况会特别注明。
系统变量的名字不区分大小写。




auto_increment_increment (启动:直接设置;作用范围:全局、会话;动态)
在服务器每次生成一个新序列值时,AUTO_INCREMENT 值的地增量。取值范围是 1~65535;默认值为1 。
auto_increment_offset (启动:直接设置;作用范围:全局、会话;动态)
AUTO_INCREMENT 序列的其实质。取值范围是 1~65535;默认值为 1 。
autocommit (启动:直接设置;作用范围:全局、会话;动态)
事务处理的自动提交模式。默认值为 1,因此自动提交功能是启用的,并且语句会立即生效。本质上,每条语句都是其自身的事务。将这个值设置为 0,可以禁用自动提交功能,如此一来,后续语句便只有等到提交完成(可以使用 COMMIT 语句,或者将 autocommit 设置为1来完成提交)之后才能生效。如果提交还未发生,则可以通过 ROLLBACK 来取消事务里的语句。将 autocommit 这时为1,可以重新启用自动提交(并且会隐式提交所有挂起的事务)。
auto_sp_privileges (启动:直接设置;作用范围:全局;动态)
如果此变量为1(默认值),那么在你创建存储例程时,MySQL服务器将自动授予你 EXECUTE 和 ALTER ROUTINE 权限,让你随后可以执行、修改或删除该例程。当删除例程时,MySQL服务器会收回那些权限。如果auto_sp_privileges 的值为0,则上述权限的自动授予和回收机制将不起作用。
back_log(启动:直接设置;作用范围:全局)
当前连接正在处理时,排队中的最大等待连接请求数量。
basedir(启动:直接设置;作用范围:全局)
MySQL安装根目录的路径名。如果其他路径名是以相对路径名的形式给出的,那么这些路径名会相对于此目录进行解析。
big_tables(启动:直接设置;作用范围:全局、会话;动态)
将此变量设置为1,可以使得在处理大型的结果集时,将所有临时结果保存到磁盘,而不是讲它们保留在内存里。虽然这样做会使性能变得慢一点,但是那些要求大型临时表的SELECT语句不会产生“表已满”的错误。其默认值为0(即把临时表保存在内存里)。通常情况下,不需要设置此变量,因为服务器会根据需要自动将结果保存到磁盘里。
bind_address(启动:直接设置;作用范围:全局)
服务器在监听TCP/IP客户端连接时所绑定的那个IP地址。自MySQL5.6.6起,其默认值为*(即监听所有的IPv4和IPv6接口);那一起的版本,默认值为0.0.0.0(即监听所有的IPv4接口)。此变量是在MySQL5.6.1里引入的。
binlog_cache_size(启动:直接设置;作用范围:全局;动态)
用于存储SQL语句(在将它们刷新到二进制日志之前,它们是事务的一部分)的那个缓存的大小。(只有当事务被提交,或者事务里包括有对非事务型表进行更新的语句时,这些语句才会被刷新。如果只回滚某个更新事务型表的事务,那么这些语句将被丢弃。)
binlog_checksum(启动:直接设置;作用范围:全局;动态)
是否在往二进制日志写入的事件里包含校验和。可取值包括:NONE(不写入校验和)和CRC32。此变量是在MySQL 5.6.2里引入的。在MySQL 5.6.6之前,默认值为NONE;之后,默认值为CRC32。
binlog_direct_non_transactional_updates(启动:直接设置;作用范围:全局、会话;动态)
可以同时更新事务型表和非事务型表的事务,可能会导致住服务器里的更新与从服务器里的更新不一致,因为对非事务型语句的更新,在它们出现在二进制日志之前,对于其他会话来讲是可见的。启用此变量(默认是禁用的)会导致非事务型更新被立即写到二进制日志里,而不是被缓存起来,一直到事务提交之后才写入。启用此变量,仅对于那些使用基于语句的日志记录进行复制的语句才有效。
binlog_format(启动:直接设置;作用范围:全局、会话;动态)
二进制的日志记录格式。其可取值包括:STATEMENT、ROW和MIXED,分别代表的是基于语句的日志记录格式、基于行的日志记录格式和混合型日志记录格式。如果使用unhealthy格式,则MySQL服务器将根据具体情况在基于语句的和基于行的日志记录格式之间自动切换。默认格式为STATEMENT。运行时,如果要更改此变量或者会话值,客户端必须拥有SUPER权限。
binlog_row_image(启动:直接设置;作用范围:全局、会话;动态)
基于行的二进制日志记录会使用之前和之后的“图像”来标书原始行和更改行。binlog_row_image控制着这些图像将包含多少列。FULL(默认值)表示记录所有列。MINIMAL只会记录那些需要确定行的列和被更改过的列。NOBLOB与FULL很想,它去掉了无关紧要的BLOB和TEXT列。此变量是在MySQL 5.6.2里引入的。
binlog_rows_query_log_events(启动:直接设置;作用范围:全局、会话;动态)
在启用基于行的二进制日志记录之后,启用此变量可以让有助于调试的信息包含在二进制日志里。此变量是在MySQL 5.6.2里引入的。
binlog_stmt_cache_size(启动:直接设置;作用范围:全局;动态)
在事务内执行非事务语句所需要的使用的缓存的大小。默认大小为32K。此变量是在MySQL 5.5.9里引入的。
bulk_insert_buffer_size(启动:直接设置;作用范围:全局、会话;动态)
用于帮助优化往MyISAM表里批量插入语句的缓存的大小。这里包括LOAD DATA语句、行INSERT语句和INSERT INTO … SELECT语句。当值为0时将禁用优化。
character_set_client(作用范围:全局、会话;动态)
客户端想服务器发送的那些SQL语句的字符集。
character_set_connection(作用范围:全局、会话;动态)
“客户端-服务器”连接的字符集。它主要用于解释字符串常量(带有前异符的字符串不包括在内),以及哪些“从数字转换到字符串”而得到的那些字符串的字符集。
character_set_database(作用范围:全局、会话;动态)
默认数据库(如果有的话)的字符集。如果没有默认的数据库(例如,如果客户在连接MySQL服务器时没有指定默认数据库),此变量将被设置为系统变量character_set_server的值。每当用户选择一个不同的数据库,MySQL服务器便会自动设置character_set_database的值。
character_set_filesystem(启动:直接设置;作用范围:全局、会话;动态)
文件系统的字符集。这个字符集用来解释SQL语句里的文件名字符串,如LOAD DATA语句里的数据文件的名字。服务器在访问文件之前,会先把文件名从character_set_client变量指定的字符集转换为character_set_filesystem变量指定的那个字符集。默认为binary(即不会进行转换)。
character_set_results(作用范围:全局、会话;动态)
服务器的发送给客户端的那些查询结果的字符集。
character_set_server(启动:直接设置;作用范围:全局、会话;动态)
服务器的默认字符集。
character_set_system(作用范围:全局)
系统字符集。其值总是utf8。这是各种元数据(如数据库名、表名和列名)锁使用的字符集。像DATABASE()、CURRENT_USER()、USER()和VERSION()这样的函数也是使用这个字符集。
character_set_dir(启动:直接设置;作用范围:全局)
存放字符集文件的那个目录。
collation_connection(作用范围:全局、会话;动态)
链接的字符集排序规则。
collation_database(作用范围:全局、会话;动态)
数据库的字符集排序规则,如果有的话。如果没有默认的数据库(例如,如果客户在连接MySQL服务器时没有指定默认数据库),此变量将被色织为系统变量collation_server的值。每当用户选择一个不同的数据库,MySQL服务器便会自动设置collation_database的值。
collation_server(启动:直接设置;作用范围:全局、会话;动态)
服务器默认字符集所对应的默认排序方式。
completion_type(启动:直接设置;作用范围:全局、会话;动态)
事务的完成类型。此变量的值为0(默认值)或NO_CHAIN时,不会影响COMMIT和ROLLBACK。此变量的值为1或CHAIN时,将导致COMMIT和ROLLBACK分别等价于COMMIT AND CHAIN和ROLLBACK AND CHAIN语句。此变量的值为2或者RELEASE时,将使它们分别等价于COMMIT RELEASE和ROLLBACK RELEASE。AND CHAIN的含义是,当一个事务结束时,服务器将终止会话。
concurrent_insert(启动:直接设置;作用范围:全局;动态)
对于在数据文件的中间没用空洞的MyISAM表,MySQL服务器允许在对已有行进行检索的同时在该表的末尾插入新行。此变量控制着服务器是否允许并发插入。此变量的值为0(或NEVER)时,会禁用此功能。此变量的值为1(或AUTO)时,会启用此功能。此变量的值为2(或ALWAYS)时,会对所有的MyISAM表启用并发插入,不管它们的数据文件里是否有空洞;此时,新行将被添加到正被使用的那个表的末尾,或者插到空洞处。默认值为1。
connect_timeout(启动:直接设置;作用范围:全局;动态)
mysqld在开始建立连接时等待数据包的秒数。默认值为10。
core_file(启动:直接设置;作用范围:全局)
当发生致命错误时,服务器在退出前是否需要生成一个核心文件。此变量是在MySQL 5.6.2里引入的。
datadir(启动:直接设置;作用范围:全局)
MySQL数据目录的路径名。
date_format(作用范围:全局)
此变量未被使用。
datetime_format(作用范围:全局)
此变量未被使用。
debug(作用范围:全局、会话;动态)
调试输出的类型。此变量只有在服务器编译时带有调试支持时才存在。
default_storage_engine(启动:直接设置;作用范围:全局、会话;动态)
在创建表时,如果没有带上ENGINE=engine_name选项或使用了一个不被支持的engine_name值,就使用此变量指定的引擎作为默认存储引擎。存储引擎的名字不区分大小写。默认为InnoDB。
default_tmp_storage_engine(启动:直接设置;作用范围:全局、会话;动态)
与default_storage_engine相似,但它适用于那些使用CREATE TEMPORARY TABLE创建的表。此变量是在MySQL 5.6.3里引用的。
default_week_format(启动:直接设置;作用范围:全局、会话;动态)
当调用WEEK()或YEARWEEK()函数时,如果不带可选的mode参数,则默认为此变量设置的那个模式值。
delay_key_write(启动:直接设置;作用范围:全局;动态)
对于使用DELAY_KEY_WRITE选项创建的MyISAM表,服务器是否需要延迟键写入。此变量由以下3中可取值。
ON(默认值)。此时,服务器会根据DELAY_KEY_WRITE选项的值进行操作;如果表时用DELAY_KEY_WRITE=1选项创建的,则延迟键写入;如果表使用DELAY_KEY_WRITE=0选项创建的,则不延迟。
OFF。它表示的是,对任务表都不延迟键写入,不管它们是如何定义的。
ALL。它表示的是,对任务表都总是延迟键写入,不管它们是如何定义的。
比较常见的做法是,在运行复制从服务器时将delay_key_write设置为ALL,以提高MyISAM表的性能(不管这些表最初是如何被创建的,都延迟其键写入)。
delayed_insert_limit(启动:直接设置;作用范围:全局;动态)
它指的是该表的延迟行处理器在检查表是否有新的SELECT语句到来之前插入的源自INSERT DELAYED语句的行数量。如果有语句到达,则将插入操作挂起,以便检索操作能够得到执行。
delayed_insert_timeout(启动:直接设置;作用范围:全局;动态)
当INSERT DELAYED操作的处理器插入完排队的各个行是,它会等待dealyed_insert_timeout秒,检查一下是否有新的INSERT DELAYED行到达。如果有行到达,则继续插入;否则终止插入操作。
delayed_queue_size(启动:直接设置;作用范围:全局;动态)
每个表针对INSERT DELAYED有可以排入队列的行数量。当队列排满时,则会有更多针对该表的INSERT DELAYED语句被阻塞,一直到队列拥有足够的空间为止。
div_precision_increment(启动:直接设置;作用范围:全局、会话;动态)
在使用操作符/对两个精确数值做除法运算时,此变量表示的是需要增加的精度位数。例如,当div_precision_increment的值为4或6时,.1/.7的结果分别为.14286或0.1428571。此变量的取值范围是0~30,默认为4。
eq_range_index_dive_limit(启动:直接设置;作用范围:全局、会话;动态)
对于使用非唯一索引的相等比较处理,它指的是优化器使用索引统计代替索引等分进行行估算的范围上限。当值为0时,将禁用统计。默认为10。此变量是在MySQL 5.6.5里引入的。在此之前,不管范围值为多少,都会使用索引等分。
error_count(作用范围:会话)
这时一个只读会话变量,它表示的是可能产生错误的最后那条语句所产生的错误数量。
event_scheduler(启动:直接设置;作用范围:全局;动态)
时间调度器的状态。此变量的可取值包括:OFF、ON或DISABLED。在启动MySQL服务器时,如果把此变量设置为DISABLED,那么时间调度器的状态将无法再MySQL服务器运行时被更改。在启动MySQL服务器时,如果把此变量设置为ON或OFF,那么在MySQL服务器运行时只能让事件调度器的状态在这两个值之间进行更改。默认值为OFF。
expire_logs_days(启动:直接设置;作用范围:全局;动态)
此变量的默认值为0。如果将其设置成其他的值,则MySQL服务器将自动删除在expire_logs_days天之前创建的日志文件,并更新该二进制日志的索引文件。MySQL服务器将在它每次启动以及每次打开一个新的二进制日志文件时执行这个到期检查。
external_user(作用范围:会话)
这是个只读变量,可以通过用于认证当前用户的身份认证插件进行设置。此变量是在MySQL 5.5.7里引入的。
flush(启动:直接设置;作用范围:全局;动态)
它用于表明服务器是否会在每次更新后将MyISAM表刷新到磁盘。这样可以降低在出现系统崩溃时表被损坏的风险,但是它会严重降低性能。因此,只有在使用不稳定的系统时它才会有用处。默认值是OFF。
flush_time(启动:直接设置;作用范围:全局;动态)
如果此变量为非零值,那么MySQL服务器会每隔flush_time秒关闭一次表,以便将尚未写入磁盘的更改刷新到磁盘。如果你的系统不够稳定,经常会死机或重启,那么使用此方法强行更新表,便可以减少表受损或数据丢失的概率,但是会降低性能。在Unix系统上,其默认值为0;在Windows上,其默认值为1800(即30分钟)。
foreign_key_checks(作用范围:全局、会话;动态)
将此变量设置为0或1将分别禁用或期待InnoDB表的外键检查。默认进行检查。禁用外键检查有时会非常有用。例如,可以按不同于表的外键关系所要求的顺序恢复一个创建和加载表的转储文件。在加载完表之后,可以重新启用外键检查。
ft_boolean_syntax(启动:直接设置;作用范围:全局;动态)
支持使用IN BOOLEAN MODE模式的进行FULLTEXT搜索的操作符列表。
ft_max_word_len(启动:直接设置;作用范围:全局)
包括在FULLTEXT索引里的单词所允许的最大长度。更长的单词会被忽略掉。在你更改此变量的值时,应该重建所有拥有这些FULLTEXT索引的MyISAM表的索引。默认值为84。
ft_min_word_len(启动:直接设置;作用范围:全局)
包括在FULLTEXT索引里的单词所允许的最小长度。更短的单词会被忽略掉。在你更改此变量的值时,应该重建所有拥有这些FULLTEXT索引的MyISAM表的索引。默认值为4。
ft_query_expansion_limit(启动:直接设置;作用范围:全局)
此变量用于那些使用WITH QUERYEXPANSION子句完成的全文检索。它决定了在每次搜索的第二阶段所能使用的“最佳匹配”的数量。
ft_stopword_file(启动:直接设置;作用范围:全局)
用于FULLTEXT索引的停用词文件。默认使用内奸的停用词列表。如果要禁用停用词,可以将此变量的值设置为空串。在你更改此变量的值或者停用词列表的内容时,应该重建所有拥有这些FULLTEXT索引的MyISAM表的索引。
general_log(启动:直接设置;作用范围:全局;动态)
它用于指定是否要用普通查询日志的日志记录。如果要启用,log_output变量会控制日志的输出目标。
general_log_file(启动:直接设置;作用范围:全局;动态)
它指的是普通查询日志文件的名字。在启用了FILE日志记录目标时,会用到它。它默认位于数据目录里的HOSTNAME.log中,其中HOSTNAME时服务器主机的名字。如果其文件名是以相对路径形式给出的,则服务器会将它解释为相对于数据目录。
group_concat_max_len(启动:直接设置;作用范围:全局、会话;动态)
GROUP_CONCAT()函数返回值的长度上限(默认为1024)。
have_compress(作用范围:全局)
它表示的是,服务器用于实现COMPRESS()和UNCOMPRESS()函数所需要的那个zlib压缩库是否可用。如果不可用,那么这两个函数将无法使用。
have_crypt(作用范围:全局)
它表示的是,服务器用于实现CRYPT()函数所需要的那个crypt()系统调用是否可用。如果不可用,那么该函数将无法使用。
hav_dynamic_loading(作用范围:全局)
它表示的是,服务器是否支持动态加载各种插件。
have_geometry(作用范围:全局)
它表示的是,空间数据类型是否可用。
have_openssl(作用范围:全局)
它表示的是,服务器是否允许客户端使用SSL来建立加密连接。have_openssl等同于have_ssl。
have_query_cache(作用范围:全局)
它表示的是,查询缓存是否可用。
have_rtree_keys(作用范围:全局)
它表示的是,RTREE索引是否可用于SPATIAL索引。
have_ssl(作用范围:全局)
它表示的是,服务器是否允许客户端使用SSL来建立加密连接。have_ssl等同于have_openssl。
have_symlink(作用范围:全局)
如果服务器在启动时带有—skip-symbolic-links选项,则此变量为DISABLED;否则,其可取值为YES或NO,但是实际的含义取决于具体的系统平台。在Unix里,它表示MyISAM表是否支持表符号的链接。在Windows里,它表示是否支持数据库符号链接。
host_cache_size(启动:直接设置;作用范围:全局;动态)
它指的是主机缓存的大小,这个缓存的用途是保存与客户端连接尝试以及尝试是否成功有关的信息。连接失败时主机通常会被阻塞,一直到该缓存被刷新。在运行时更改此变量的值会刷新该缓存(与FLUSH HOSTS的效果一样)。默认值为128。此变量是在MySQL 5.6.5里引入的。
hostname(作用范围:全局)
服务器的主机名。MySQL服务器会在启动时自动确定此变量的值。
identity(作用范围:会话;动态)
等同于会话变量last_insert_id。
ignore_db_dirs(启动:直接设置;作用范围:全局)
此变量会被—ignore-db-dir选项的实例进行设置,它表示的是数据库目录里的目录不会被SHOW DATABASES或数据库INFORMATION_SCHEMA里的表当作数据库目录。默认为空。此变量是在MySQL 5.6.3里引入的。
init_connect(启动:直接设置;作用范围:全局;动态)
如果此变量的值不为空,那么它指定的是一条或多条以分号分隔的SQL语句(它们会在每个SUPER权限的用户,init_connect变量将被忽略,目的是为了避免此变量值里包含的不正确或不恰当的语句导致管理员用户无法连接到服务器更正该错误。
init_file(启动:直接设置;作用范围:全局)
如果此变量的值不为空,那么它指定的是一个文件名,该文件名对应的文件中包括的是服务器在启动时执行的SQL语句。如果文件名是以相对路径形式指定的,那么服务器会将它解释为相对于数据目录。此文件应该是每行一条语句,并且这些语句不应该以“;”或者其他终止符作为结尾。
init_slave(启动:直接设置;作用范围:全局;动态)
对于主复制服务器,如果此变量的值不为空,那么它指定的是在每个从复制服务器进行连接时都会被执行的语句。该值的内容应该是一条或多条SQL语句,期间用分号分割。
Innodb_xxx


insert_id(作用范围:会话;动态)
设置此变量,可以指定下一个INSERT语句在插入一个AUTO_INcREMENT列时使用的值。它用于二进制日志的处理。
interactive_timeout(启动:直接设置;作用范围:全局、会话;动态)
此变量指的是,在服务器自己认为可以将交互式客户端会话关闭之前,该会话能够保持空闲的秒数。对于非交互式客户端,需要使用wait_timeout变量来代替。
join_buffe_size(启动:直接设置;作用范围:全局、会话;动态)
它指的是连接(它们是在未使用索引的情况下执行的,并且需要进行全表扫描)和特定类型的索引扫描所使用的缓冲区的最小大小。
keep_files_on_create(启动:直接设置;作用范围:全局、会话;动态)
如果在创建MySAM表的CREATE TABLE语句里明确给出了DATA DIRECTORY或INDEX DIRECTORY选项,并且服务器在给定的目录里分别找到了一个已有的数据文件或索引文件,那么它会返回一个错误。当没有使用DATA DIRECTORY或INDEX DIRECTORY选项来指定数据文件或索引文件的存放位置时,keep_files_on_create变量会控制服务器如何创建MyISAM表。如果此变量的值为OFF(默认值),并且服务器找到了一个已有的.MYD数据文件或.MYI索引文件,那么它会覆盖该文件。如果此变量的值为ON,服务器会返回一个错误。
key_buffer_size(启动:直接设置;作用范围:全局;动态)
它指的是用于缓存MyISAM表索引块的缓冲区大小。这个缓冲区在各个会话之间是共享的。此变量和其他的键缓存变量(key_cache_age_threshold、key_cache_block_size和key_cache_limit)是以分组的形式存在的,并且可以作为结构化系统变量的组成部分进行访问。为了更好地控制键缓存的作用,可以创建多个键缓存。
key_cache_age_threshold(启动:直接设置;作用范围:全局;动态)
它指的是,在被移到暖子链之前,未使用的缓冲块在MyISAM键缓存的热子链里可以保留多久。值越高,允许缓冲块在热子链里保留的时间越长。默认值为300。最小值为100。
key_cache_block_size(启动:直接设置;作用范围:全局;动态)
它指的是MyISAM键缓存的块大小。默认情况下,一个缓存看的大小为1024字节。
key_cache_limit(启动:直接设置;作用范围:全局;动态)
如果此变量被设置为它的默认值100,则MyISAM键缓存将使用“最近最少使用”策略来解决缓存缓冲区的重用问题。如果设置的值小于100,则键缓存将使用“中间插入”策略,而此变量的值即为暖缓冲子链使用的键缓存百分比值。此变量的取值范围是1~100。
language(启动:直接设置;作用范围:全局)
此变量已过时。请使用lc_messages和lc_messages_dir来代替。
large_files_support(作用范围:全局)
它指的是,MySQL服务器是否能够处理大文件。
large_page_size(作用范围:全局)
如果启用了大页面支持,此变量指的是大内存页的大小。如果未启用,则其值为0。
large_pages(启动:直接设置;作用范围:全局)
它指的是是否启用了大内存页支持功能。只有Linux系统才支持大页面。
last_insert_id(作用范围:会话;动态)
设置此变量,可以指定LAST_INSERT_ID()的返回值。它用于二进制日志的处理。
lc_messages(启动:直接设置;作用范围:全局、会话;动态)
出错信息的本地化语言。服务器会将本地化名字转换为语言名字,并在lc_messages_dir变量指定的目录里查找该语言名字所对应的目录,以便找到错误信息文件的位置。
lc_messages_dir(启动:直接设置;作用范围:全局)
存放出错信息文件的目录。
lc_time_names(启动:直接设置;作用范围:全局、会话;动态)
它指的是函数DATE_FORMAT()、DAYTIME()和MONTHNAME()显示日期和月份名字所使用的本地化语言。默认值为en_US,但是也可以设置为POSIX风格的语言名称,如es_AR(西班牙语/阿根廷)或zh_HK(中文/中国香港)。
license(作用范围:全局)
它指的是服务器所使用的许可类型。例如,如果服务器遵从的是GNU GPL(通用公共许可证)条款,则其值为GPL。
local_infile(启动:直接设置;作用范围:全局;动态)
它指的是服务器是否允许在LOAD DATA语句里使用LOCAL修饰符。
lock_wait_timeout(启动:直接设置;作用范围:全局、会话;动态)
它指的是等待每个元数据所的秒数。如果语句阻塞的时间超过了等待锁的时间,就会出错。允许的取值范围是1~31536000(默认为1年)。此变量是在MySQL 5.5.3里引入的。
locked_In_memory(启动:--memlock;作用范围:全局)
服务器是否锁定在内存中。
log(作用范围:全局)
此变量已在MySQL 5.6里被弃用并删除。请使用general_log来代替。
log_bin(作用范围:全局)
是否启用二进制日志记录功能。请注意,--log-bin选项设置的是log_bin_basename,而非log_bin。
log_bin_basename(作用范围:全局)
二进制日志文件的完整路径名。此变量是在MySQL 5.6.2里引入的。
log_bin_index(作用范围:全局)
二进制日志索引文件的名字。此变量是在MySQL 5.6.2里引入的。
log_bin_trust_function_creators(启动:直接设置;作用范围:全局;动态)
如果要创建或修改存储函数,则必须拥有相应的CREATE ROUTINE权限或ALTER ROUTINE权限。不过,如果启用了二进制日志记录功能,并且log_bin_trust_function_creators的值为0(默认值),那么还必须拥有SUPER权限,并且生命该存储函数是确定性的(即不会修改任何数据)。如果想禁用这些附加的要求,可以将此变量值设置为1。
log_error(启动:直接设置;作用范围:全局)
错误日志文件的名字。如果不设置此变量,服务器会吧出错信息输出到控制台中断。如果在服务器启动时指定了此变量,但未设置具体值,则日志文件名为数据目录里的HOSTNAME.err,其中,HOSTNAME为服务器主机的名字。如果其文件是以相对路径形式给出的,则服务器会将它解释为相对于数据目录。如果在指定文件名时没有带扩展名,mysqld会添加一个扩展名.err。
log_output(启动:直接设置;作用范围:全局;动态)
如果启用了普通查询日志和慢查询日志,则此变量指定的是它们的输出目标。此变量列出的是一组以都好分割的输出目标名。允许目标包括:TABLE、FILE和NONE。如果指定了此变量,则NONE值会禁用日志记录功能,并且它比其他的值优先级更高。默认值为FILE。设置系统变量general_log_file或slow_query_log_file,可以指定相应日志文件的名字。
log_queries_not_using_indexs(启动:直接设置;作用范围:全局;动态)
如果启用了慢查询日志,则此变量将控制那些不使用索引的查询是否应该被记录。如果进行记录,将使得日志文件迅速变得较大。请参考log_throttle_queries_not_using_indexes。
log_slave_updates(启动:直接设置;作用范围:全局)
对于复制从服务器从其主服务器的二进制日志里接收到的更新,此变量控制着从服务器是否把这些更新记录到它自己的二进制日志里。默认情况下,从服务器的更新记录功能是禁用的。但是在链式复制设置里,允许将一个从服务器当作另一个从服务器的主服务器。
log_throttle_queries_not_using_indexes(启动:直接设置;作用范围:全局;动态)
如果启用了log_throttle_queries_not_using_indexes,则它指的是每分钟最多向慢查询日志里写入的语句数量。默认值为0,表示“无限制”。此变量是在MySQL 5.6.5里引入的。
log_slow_queries(启动:直接设置;作用范围:全局)
此变量已在MySQL 5.6里被弃用并删除。请使用slow_query_log来代替。
log_warnings(启动:直接设置;作用范围:全局、会话;动态)
它指的是把非关键性警告信息记录到出错日志的记录级别。如果此变量的值为0,则不记录这些警告消息;如果值为1(默认值),则启用记录。如果此变量的值大于1,则会提高日志记录的级别,以包括那些与异常中止连接和“拒绝访问”错误有关的信息。
long_query_time(启动:直接设置;作用范围:全局、会话;动态)
此变量值的单位是秒。如果某个查询命令的执行时间大于了这个值(以及检查的记录会超过min_examined_row_limit行),则它会被认为是一个“慢”查询,并且会导致状态变量slow_queries增加。此外,如果已启用慢查询日志记录功能,则服务器会将该查询写入该日志。
最小值和默认值分别为0和10。该值可以包含小数部分(即微秒)。不过,只有日志目标时一个文件,而不是mysql.slow_query表时,才会记录小数部分。
low_priority_updates(启动:直接设置;作用范围:全局、会话;动态)
如果启用此变量,则对于使用表级锁定机制的存储引起,更新操作的优先级将低于检索操作。那些会修改表内容的语句(DELETE、INSERT、REPLACE、UPDATE)将一直等待,知道表上没有SELECT语句正在执行或者正在等待执行。如果有心的SELECT语句到来时,另一条SELECT语句还在执行,那么新语句会立即执行,而不是等待优先级的修改语句。对于那些支持LOW_PRIORITY选项的语句(如INSERT和UPDATE),启用此变量与指定该选项的效果一样。对于单独的INSERT语句,可以通过HIGH_PRIORITY选项来取笑此变量的效果,并把插入操作恢复到正常的优先级。
lower_case_file_system(作用范围:全局)
此变量用来表明包含数据目录的文件系统是否区分文件名的大小写。如果此变量的值为ON,怎文件名不区分大小写。(即可以把ON的含义理解为文件名的大写和小写版本都是一样的。)如果此变量的值为OFF,则文件名区分大小写。
lower_case_table_names(启动:直接设置;作用范围:全局)
此变量控制的是,在执行CREATE DATABASE和CREATE TABLE语句时,如何处理数据库名和表明所对应的目录名和文件名。当执行这些语句时,它还控制着服务器会如何进行名字比较。下表列出了各种可能的取值。
取值                                     含义                                 
       按照CREATE DATABASE和CREATE TABLE语句里给出的名字来创建磁盘文件。名字的比较会区分大小写。在文件名区分大小写的系统里,它是默认设置。
       在创建数据库和表时,名字强制转换为小写形式。名字的比较不区分大小写
       以小写形式保存名字,但是在进行比较时不区分大小写。也就是说,创建的文件名与那些CREATE语句里指定的一样,但是不以区分大小写的形式进行不叫。只有在文件名区分大小写的系统里才会使用此变量的值。
当没有显示设置lower_case_table_names变量时,如果数据目录所在的文件系统不区分文件名的大小写,那么MySQL服务器将自动把此变量设置为2。将此变量设置为非零值,也会使得表的别名不区分大小写。
master_info_repository(启动:直接设置;作用范围:全局;动态)
此变量表示的是,从服务器是将主服务器的日志信息写入文件,还是写入表。如果该值为FILE(默认值),则从服务器日志文件有—master-info-file选项指定。如果该值为TABLE,则服务器会把日志记录到mysql.slave_master_inro表中。此变量是在MySQL 5.6.2里引入的。
master_verify_checksum(启动:直接设置;作用范围:全局;动态)
此变量表示的是,在主服务器把从二进制日志里读取到的事件发送到从服务器之前,它是否验证这些时间的校验和。默认值为OFF。此变量是在MySQL 5.6.2里引入的。
max_allowed_packet(启动:直接设置;作用范围:全局、会话;动态)
它指的是服务器与客户端之间通信时使用的那个缓冲区的最大大小。该缓冲区的初始大小为net_buffer_length个字节,但是会根据需要增大到max_allowed_packet个字节。这个值也会限制MySQL服务器所能处理的字符串的最大长度。此变量的默认值和最大值分别是1MB和1GB。它的会话值是只读的。
max_binlog_cache_size(启动:直接设置;作用范围:全局;动态)
它指的是二进制日志缓存的最大大小。在事务被提交之前,构成事务的那些语句都会保存在二进制日志缓存里,它们要等到事务被提交时才会被写入二进制日志。如果某个事务超出了此变量所设定的最大长度,就必须被刷新到一个临时硬盘文件里。那些影响非事务语句的语句会被单独缓存;请参考max_binlog_stmt_cache_size。
max_binlog_size(启动:直接设置;作用范围:全局;动态)
它指的是二进制日志文件的最大大小。如果当前二进制日志文件达到了此大小,则MySQL服务器将关闭它,并开始使用下一个文件。此变量的取值范围为4KB~1GB。默认值为1GB。
如max_relay_log_size被设置为0,那么max_binlog_size变量页会对从服务器的中继日志文件的大小进行限制。
max_binlog_stmt_cache_size(启动:直接设置;作用范围:全局;动态)
此变量与max_binlog_cache_size相似,但是仅限于那些影响非事务表的语句(它们会被单独缓存起来)。此变量是在MySQL 5.5.9里引入的。
max_connect_errors(启动:直接设置;作用范围:全局;动态)
它指的是,主机在被组织继续进行连接之前,允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统。如果想清空这个主机缓存,并重新启用被阻塞的主机,可以使用FLUSH HOSTS语句或者mysqladmin flush-hosts命令。请参考状态变量Connect_errors_xxx。
max_connections(启动:直接设置;作用范围:全局;动态)
它指的是客户端连接的最大并发数。默认值为151。
max_delayed_threads(启动:直接设置;作用范围:全局、会话;动态)
它指的是为处理INSERT DELAYED语句而允许创建的最大线程数。当达到最大处理器数时,所有新接收到的这类语句都将被当作非DELAYED语句。客户端可以把此变量的值设置为0,以便在自己的会话里禁用DELAYED插入。
max_error_count(启动:直接设置;作用范围:全局、会话;动态)
它指的是服务器可以保存的出错信息、警告信息和提醒信息的最大数量。(这些信息总是会被通缉。此变量只会影响相关信息的存储数量,并且可供SHOW ERRORS和SHOW WARNINGS使用。)
max_heap_table_size(启动:直接设置;作用范围:全局、会话;动态)
它指的是新建MEMORY表的最大允许长度。更改此变量的值不会影响那些已有表,除非使用ALTER TABLE或者TRUNCATE TABLE语句来修改它们。此变量可以用于防止服务器使用过多的内存。此变量还会对服务器如何处理其内部使用的各种内存表产生影响;请参考对tmp_table_size变量的描述。
max_insert_delayed_threads(启动:使用—max-delayed-threads选项;作用范围:全局、会话;动态)
此变量等同于max_delayed_threads。
max_join_size(启动:直接设置;作用范围:全局、会话;动态)
当执行多表连接时,MySQL优化器会估算它需要检查多少个行组合。如果估算值超过了max_join_size行,则会出现一个错误。如果你习惯于编写会返回大量行的SELECT语句,则可以使用此变量。这个限制不会应用于存储在查询缓存里的查询结果,因为缓存里的查询结果不需要再次执行该查询即可被返回。
此变量需要与sql_big_selects变量一起使用,详见对该变量描述的讨论。将max_join_size设置为DEFAULT以外的某个值,会自动将sql_big_selects设置为0。
max_length_for_sort_data(启动:直接设置;作用范围:全局、会话;动态)
查询优化器将使用此变量来确定应该为ORDER BY操作执行哪一种filesort当作。
max_prepared_stmt_count(启动:直接设置;作用范围:全局;动态)
它指的是服务器可以同时维护的预处理语句的最大数。将此变量的值设置得更小一点,可将其用于限制服务器占用的内存。此变量的可取值范围是0~1000000默认值为16382。当将其值设置为0时,可以完全禁用预处理语句。
max_relay_log_size(启动:直接设置;作用范围:全局;动态)
它指的是从服务器中继日志文件的最大长度。如果当前中继日志文件达到了此大小,则MySQL服务器将关闭它,并开始使用下一个文件。如果此变量的值是0,则服务器将使用max_binlog_size变量来控制中继日志文件的最大长度。此变量的取值范围为4KB~1GB;默认值为0。
max_seeks_for_key(启动:直接设置;作用范围:全局、会话;动态)
查询优化器在进行基于键的查找时会使用此变量。如果某个索引的差异度比较低(只有很少量的唯一值),那么优化器可能会认为在执行键查找操作时需要进行多次查找,从而会采用全表扫描的方式来代替。把此变量设置成某个小一点的值,则会使优化器认为在执行键查找时最多只需要指定数量的索引寻找,从而使其更倾向于选择使用索引,而不会执行全表扫描。
max_sort_length(启动:直接设置;作用范围:全局、会话;动态)
使用每个数据值的前max_sort_length个字节来进行排序。默认值为1024。如果被排序值在这么多的字节内是唯一的,那么将此变量设置为更小一点的值可以获得更少的比较次数,同时也不会损失精确到。反之,如果被排序值在这么多的字节内不是唯一的,那么增加这个值可以获得更好的区分效果。
max_sp_recursion_depth(启动:直接设置;作用范围:全局、会话;动态)
它指的是每个存储过程的最大递归深度。默认值为0(不允许递归),最大值为255。
max_tmp_tables(启动:直接设置;作用范围:全局、会话;动态)
此变量未被使用。
max_user_connections(启动:直接设置;作用范围:全局、会话;动态)
它指的是每个账户同时进行连接的客户端最大个数。默认值为0,表示“无限制”。兵法连接数还会受到max_connections变量的全局限制。
此变量的会话值是只读的。它的会话值与全局值是相等的,除非账户在user表里的行拥有一个非零的MAX_USER_CONNECTIONS值。此时,该会话值将从账户的行里获得。
如果需要为某个特定的账户指定连接限制,可以使用GRANT语句。
max_write_lock_count(启动:直接设置;作用范围:全局;动态)
在对某个表使用了max_write_lock_count个写锁定之后,对于那些正在等待获得该表读锁的语句,服务器将适当提升它们的优先级。
metadata_locks_cache_size(启动:直接设置;作用范围:全局)
它指的是服务器为元数据锁所使用的那个缓存的大小。此变量是在MySQL 5.5.19里引入的。
min_examined_row_limit(启动:直接设置;作用范围:全局、会话;动态)
一个查询至少需要检查min_examined_row_limit个行才被允许记录到慢查询日志。默认值为0。
myisam_data_pointer_size(启动:直接设置;作用范围:全局;动态)
它指的是MyISAM索引文件的行指针的字节大小。此变量的取值范围是2~7,默认为6。对于个别的表,这个指针大小会受到指定的那个MAX_ROWS表选项的影响。
myisam_max_sort_file_size(启动:直接设置;作用范围:全局;动态)
对于REPAIR TABLE、ALTER TABLE或LOAD DATA等语句,在对MyISAM表进行重建时,既可以使用一个临时文件,页可以使用键缓存。具体使用哪一种方法由这个变量的值来决定。如果临时文件的大小可能会大于这个值,则需要使用键缓存。
myisam_mmap_size(启动:直接设置;作用范围:全局)
它指的的压缩收的MyISAM表文件在进行内存映射时使用的最大内存量。此变量是在MySQL 5.5.1里引入的。
myisam_recover_options(启动:直接设置;作用范围:全局)
它指的是自动修复MyISAM表时使用的模式。如果启用它,那么当服务器打开某个MyISAM表时,如果该表被标记为崩溃或者在上次使用时未正确关闭,那么它会尝试修复该表。这个变量的值应该为一个以逗号分隔的列表,其中可以带有这样一些选项:BACKUP(如果修复操作会更改这个表,则先为它创建一个备份)、FORCE(即使丢失了多行数据也要强制进行恢复)、QUICK(快速恢复)、DEFAULT(在恢复时不进行任何其他特殊的处理)或者OFF(不进行恢复;这是默认值)。
如果在运行服务器时启用了系统变量delay_key_write,或者对单个MyISAM表进行了配置,启用了延迟索引写入功能,那么启用表的自动修复功能是种不错的做法。
myisam_repair_threads(启动:直接设置:作用范围:全局、会话;动态)
它指的是在修复操作过程中用来创建MyISAM表使用的线程数。默认值为1,表示的是使用单个线程进行修复。将此变量的值设置为大于1,实现多线程修复——此功能仍处于体验阶段。
myisam_sort_buffer_size(启动:直接设置;作用范围:全局、会话;动态)
在执行类似ALTER TABLE、CREATE INDEX和REPAIR TABLE这样的操作期间,需要分配缓冲区,以便对MyISAM表的索引进行排序。此变量指定的便是该缓冲区的大小。
myisam_stats_method(启动:直接设置;作用范围:全局、会话;动态)
此变量表示的是,服务器在为MyISAM表通缉其索引键的分布概率时,应该把NULL值视为相同,还是视为不同。可设置的值包括有:nulls_equal(所有的NULL值在同一个组里)、nulls_unequal(每个NULL值单独成为一组)或nulls_ignored(忽略NULL值)。
myisam_use_mmap(启动:直接设置;作用范围:全局;动态)
它指的是服务器在读写MyISAM表时是否需要使用内存映射。默认值为OFF。
named_pipe(启动:直接设置)
它指的是服务器是否允许客户端使用命名管道连接。只有Windows支持这种连接方式。默认值为OFF。
net_buffer_length(启动:直接设置;作用范围:全局、会话;动态)
它指的是服务器与客户端程序进行通信时使用的连接和结果缓冲区的初始大小。此缓冲区可以扩展到max_allowed_packet个字节大小。此变量的取值范围是1KB~1MB;默认为16KB。它的会话值是只读的。
net_read_timeout(启动:直接设置;作用范围:全局、会话;动态)
它指的是在连接出现超时之前等待客户端发送数据的秒数。
net_retry_count(启动:直接设置;作用范围:全局、会话;动态)
它指的是中断的读取操作被重试的次数。
net_write_count(启动:直接设置;作用范围:全局、会话;动态)
它指的是在连接出现超时之前将数据写入客户端所需要等待的秒数。
new(启动:直接设置;作用范围:全局、会话;动态)
此变量未被使用。
old(启动:直接设置;作用范围:全局)
它是一个用于解决兼容问题的变量,可以启用某些较旧的行为特性。目前,它会导致索引提示无法 应用到ORDER BY或GROUP BY字句。
old_alter_table(启动:直接设置;作用范围:全局、会话;动态)
对于某些ALTER TABLE操作(在MySQL 5.0里,它们会需要表的临时副本),当前服务器并不需要临时副本。启用此变量可以让服务器使用临时副本。
old_passwords(启动:直接设置;作用范围:全局、会话;动态)
从MySQL 4.1版开始,MySQL服务器开始支持一种较以前更为安全的密码散列方法。仍然支持那些拥有旧风格散列密码的已有账户,但是默认情况下此变量是禁用的,并且新的密码会使用新的散列方法。启用此变量可以是密码散列操作使用4.1版本之前的旧方法。这个变量可能会对服务器降级或将账户移动到旧服务器有好处。
open_files_limit(启动:直接设置;作用范围:全局)
此变量值的是MySQL服务器试图保留的文件描述符的个数。如果在服务器启动时将此变量设置为一个非零值,但是发现服务器显示的实际值却小于指定值,那么该实际值表示的是操作系统所允许的文件描述符的最大数。(如果服务器显示的值为0,则表示操作系统不允许mysqld更改文件描述符的个数。)如果在服务器启动时没有设置此变量或是将其设置为0,那么MySQL服务器会把max_connections X 5和max_connections + table_open_cache X 2这两者当中较大的那个数作为保留的文件描述符个数。open_files_limit变量独立地控制着文件描述符的分配,与innodb_open_files变量控制的文件描述符无关。
optimizer_prune_level(启动:直接设置;作用范围:全局、会话;动态)
查询优化器将分析多个执行计划并从中选出一个最佳的。此变量决定着优化器如何处理中间计划。如果此变量的值是1(默认值),你怎么优化器将之对各候选计划将要检查的行个数进行估算,并根据估算结果丢弃中间计划。如果此变量被设置为0,则优化器将在所有计划中执行穷举搜索。
optimizer_search_depth(启动:直接设置;作用范围:全局、会话;动态)
此变量控制着查询优化器搜索执行计划的深度。如果此变量的值是0,则优化器将自动选择一个合理的深度值。默认行为是执行穷举搜索。
optimizer_switch(启动:直接设置;作用范围:全局、会话;动态)
此变量控制的是可以被关闭或打开的优化器策略。其值为一个以逗号隔开的flag=value设置列表,其中,value的值可以为on或off。你页可以将标志设置为default,以表示不管其默认值为何值都需要返回它;或者将optimizer_switch自己设置为default,将所有的标志都恢复成默认值。对于各种策略的描述请参考MySQL参考手册。
optimizer_trace_xxx(启动:直接设置;作用范围:全局、会话)
这些以optimizer_trace作为开头的系统变量主要用于跟踪查询优化器的内部操作。这些变量是在MySQL 5.6.3里引入的。
performance_schema_xxx
这些以performance_schema作为开头的系统变量主要是与搜索和分析服务器性能数据所使用的那个Performance Schema有关。更多信息请参考MySQL参考手册。
pid_file(启动:直接设置;作用范围:全局)
在mysqld启动时,它会将其进程ID(即PID)写入一个文件里。此变量指定的是哪个PID文件的路径名。此文件可能被其他进程用于确定服务器的进程编号,通常是用于向服务器发送信号。例如,当mysql.server向服务器发送关闭信号时,会读取这个文件。如果其文件名是以相对路径形式给出的,服务器会将它解释为相对于数据目录。默认为host_name.pid。
plugin_dir(启动:直接设置;作用范围:全局)
它指的是存放插件的那个目录的路径名。
port(启动:直接设置;作用范围:全局)
它指的是服务器用来监听客户端连接的TCP/IP端口号。
preload_buffer_size(启动:直接设置;作用范围:全局、会话;动态)
此变量决定着MySQL服务器在使用LOAD INDEX语句预加载有关索引时会分配一个多大的缓冲区。
protocol_version(作用范围:全局)
服务器所使用的客户端/服务器协议的版本号。
proxy_user(作用范围:全局)
这是一个只读的会话变量。在启用了代理功能时,它表示的是代理用户;否则为NULL。此变量是在MySQL 5.5.7里引入的。
pseudo_thread_id(作用范围:会话;动态)
此变量仅供MySQL服务器内部使用。
query_alloc_block_size(启动:直接设置;作用范围:全局、会话;动态)
它指的是在分析和执行SQL语句时分配的临时内存块大小。
query_cache_limit(启动:直接设置;作用范围:全局;动态)
它指的是查询结果的最大缓存大小,超过这一大小的查询结果将不会被缓存。默认大小为1MB。
query_cache_min_res_unit(启动:直接设置;作用范围:全局;动态)
它指的是为把查询结果存入查询缓存里而分配的内存块大小。默认大小为4KB。
query_cache_size(启动:直接设置;作用范围:全局;动态)
它指的是用来缓存查询结果的内存大小。当把此变量设置为0时,即使query_cache_type不为OFF,也要禁用查询缓存。反之,如果把此变量设置为一个非零值,那么即使query_cache_type的值为OFF,也要强行分配那么多的内存。取值为1024的倍数。query_cache_type(启动:直接设置;作用范围:全局、会话;动态)
当query_cache_size的值大于0时,它指的是查询缓存的操作模式。下表列出了各种可能的取值。
模式             含义                                                
   不缓存查询结果,也不检索缓存结果
       将可缓存的查询缓存起来,那些以SELECT SQL_NO_CACHE作为开头的查询除外
       根据需要只将那些以SELECT SQL_CACHE作为开头的可缓存查询缓存起来
如果使用SET语句来设置query_cache_type变量,那么符号值OFF、ON和DEMAND分别对应模式0、模式1和模式2.
query_cache_wlock_invalidate(启动:直接设置;作用范围:全局、会话;动态)
当此变量为0(默认值)时,即使某个客户对某个表进行了WRITE锁定,其客户端也能检索该表已被缓存的查询结果。如果把此变量设置为1,那么在某个客户端对某个表获得WRITE所期间,该表已被缓存的查询结果将变得不可用,其他客户端必须等到该锁被释放。
query_prealloc_size(启动:直接设置;作用范围:全局、会话;动态)
它指的是为分析和执行SQL语句而分配的那个缓冲区的长度。与那些由query_alloc_block_size变量控制的内存分配块不同,这个缓冲区在前后两条语句之间不会被释放。
rand_seed1和rand_seed2(作用范围:会话;动态)
它们是复制RAND()函数时内部使用的只读会话变量。
range_alloc_block_size(启动:直接设置;作用范围:全局、会话;动态)
它指的是在进行范围优化时分配的内存的块大小。
read_buffer_size(启动:直接设置;作用范围:全局、会话;动态)
它指的是对表进行顺序扫描的那个线程所使用的缓存区的大小。缓冲区会根据每个客户端的需要进行分配。
read_only(启动:直接设置;作用范围:全局;动态)
此变量控制的是从服务器是否会以只读方式来处理客户连接。默认情况下,read_only的值为OFF,此时,客户端的更新都会以平常的方式(即它们都有权限这样做)被接收。如果把此变量设置为ON,那么只有从主服务器那里接收到的语句(对于从服务器)或者拥有SUPER权限的客户端所执行的语句才能执行更新操作;SET PASSWORD要求SUPER权限。read_only不会应用于TEMPORARY表。
如果你明确地拥有表锁或者还有尚未执行完毕的事务,那么你不能启用此变量。在其他客户端拥有表锁或者还有尚未执行完毕的事务时,如果你试图激活此变量,那么你的请求将被阻塞,一直到这些锁被释放或是事务执行完毕位置。当你的请求被阻塞时,如果其他客户端试图要获得新的表锁或是试图开始新的事务,那么它们也将被阻塞。这些阻塞条件对FLUSH TABLES WITH READ LOCK语句没有作用,因为它获得的是全局读锁,不是表锁。
rand_rnd_buffer_size(启动:直接设置;作用范围:全局、会话;动态)
它指的是在对行进行排序之后,顺序读取各行时使用的那个缓冲区的大小。缓冲区会根据每个客户端的需要进行分配。
relay_log(启动:直接设置;作用范围:全局)
中继日志文件的名字。
relay_log_basename(作用范围:全局)
中继日志文件的完整路径名。此变量是在MySQL 5.6.2里引入的。
relay_log_index(作用范围:全局)
中继日志索引文件的名字。
relay_log_info_file(启动:直接设置;作用范围:全局)
中继日志信息文件的名字;默认为relay-log.info。
relay_log_info_repository(启动:直接设置;作用范围:全局;动态)
此变量表示的是,从服务器是将中继日志信息写入文件,还是写入表。如果该值为FILE(默认值),那么从服务器会把日志记录到—relay-log-info-file选项所指定的文件里。如果该值为TABLE,那么服务器会把日志记录到mysql.slave_relay_log_info_file表里。此变量的在MySQL 5.6.2里引入的。
relay_log_purge(启动:直接设置;作用范围:全局;动态)
如果此变量被设置为1(默认值),从服务器会在用完一个中继日志文件之后立刻删除它。如果把此变量设置为0,中继日志文件将不会被自动删除。
relay_log_recovery(启动:直接设置;作用范围:全局)
此变量在从服务器崩溃之后非常游泳。在启动时启用它,可以使从服务器删除所有的还未处理的中继日志,并再次从主服务器获取它们。此变量默认是禁用的。
relay_log_space_limit(启动:直接设置;作用范围:全局)
全体中继日志文件的最大允许大小。当达到这个限制时,从服务器的I/O线程会等待SQL线程处理更多的事件,并通过删除日志文件的方式释放空间。
report_host、report_password、report_port、report_user(作用范围:全局)
在从复制服务器上,可以设置这些变量,以表示从服务器进行连接时应该报告给主服务器的那些值。它们不需要与从服务器在建立连接时实际使用的那些值相对应。当SHOW SLAVE HOSTS语句在主服务器上执行时,这些值会显示在该语句的输出里。只有在主服务器启动时带有—show-slave-auth-info选项,才会报告report_user和report_password的值。
secure_auth(启动:直接设置;作用范围:全局;动态)
它表示的是,服务器是否只允许那些拥有MySQL 4.1里引入的密码格式的用户进行连接。如果此变量被设置为OFF,那么服务器将允许那些使用4.1版本之前的就密码格式的账户进行连接。在MySQL 5.6.5之前,此变量的默认值为OFF;之后的默认值为ON。
secure_file_priv(启动:直接设置;作用范围:全局)
如果把此变量设置为目录路径名,服务器将只允许LOAD DATA和SELECT … INTO OUTFILE语句以及LOAD_FILE()函数对该目录的文件进行操作。默认情况下,此变量的值为空(没有上述限制)。
server_id(启动:直接设置;作用范围:全局;动态)
MySQL服务器的复制ID编号。如果编号值为0,则表示该服务器不参与复制;否则,这个值必须是一个1~2 (32次方)-1的整数。每一个服务器的复制ID编号都必须是唯一的。
server_uuid(作用范围:全局)
服务器自动生成的UUID值。此变量是在MySQL 5.6.0里引入的。
shared_memory(启动:直接设置)
它指的是服务器是否允许客户端使用共享内存连接。只有Windows支持这种连接方式。默认值为OFF。
shared_memory_base_name(启动:直接设置)
它指的是用来建立共享内存连接的共享内存的名字。默认名字为MYSQL(区分大小写)。
skip_external_locking(启动:直接设置;作用范围:全局)
它指的是外部锁定机制(即文件系统级的锁定机制)是否被禁止。
skip_name_resolve(启动:直接设置;作用范围:全局)
此变量默认是禁用的。启用它之后,可以禁止主机名解析,并且在权限表里必须通过IP地址或使用localhost来指定这些主机。
skip_networking(启动:直接设置;作用范围:全局)
如果禁用此变量(默认值),则服务器允许使用TCP/IP连接。如果启用它,则会禁用TCP/IP连接。客户端只可以从本地主机进行连接,且必须使用非TCP/IP接口。Unix客户端可使用Unix套接字文件。Windows客户端可以使用共享内存或命名管道(如果这些链接类型被弃用了的话)连接。
skip_show_databases(启动:直接设置;作用范围:全局)
如果禁用此变量(默认值),则有用户都可以执行SHOW DATABASES语句。如果用户拥有SHOW DATABASE权限,则它可以看到所有的数据库,否则,用户只能看到它直接权限能够访问的那些数据库。如果启用此变量,则只有拥有SHOW DATABASE权限的用户才能使用SHOW DATABASE语句,并且它会显示所有的数据库。
slave_allow_batching(启动:直接设置;作用范围:全局;动态)
启用从服务器的批请求功能。它仅适用于MySQL集群。
slave_checkpoint_group(启动:直接设置;作用范围:全局;动态)
如果启用了多线程从服务器执行(请参考slave_parallel_threads),则此变量控制的是从服务器在获得一个检查点之前执行的最大事务数。默认值为512。允许的取值范围为32~512KB。此变量是在MySQL 5.6.3里引入的。检查点依赖于slave_checkpoint_group和slave_checkpoint_period;超过任何一个限制都会导致从服务器回到检查点,并重置与它们两个关联在一起的那些计数器。
slave_checkpoint_group(启动:直接设置;作用范围:全局;动态)
如果启用了多线程从服务器执行(请参考slave_parallel_threads),则此变量控制的是从服务器在获得一个检查点之前执行的最大时间(单位为毫秒)。默认值为300。允许的取值范围为1~4GB。此变量是在MySQL 5.6.3里引入的。请参考slave_checkpoint_group。
slave_compressed_protocol(启动:直接设置;作用范围:全局;动态)
此变量决定着是否要对从服务器和主服务器之间的通信进行压缩。这需要主、从服务器都支持使用压缩协议才行。
slave_load_mode(启动:直接设置;作用范围:全局;动态)
它指的是从服务器的执行模式,取值可以为STRICT(默认)或IDEMPOTENT。后面那个设置对于涉及循环或多个主服务器的复制拓扑可能很有用,可用于防止出现“键恢复”会“键未找到”的错误。
slave_load_tmpdir(启动:直接设置;作用范围:全局)
如果服务器是一个复制从服务器,那么它指的是用于处理LOAD DATA语句的那个目录的路径名。此变量的默认值是系统变量他们怕敌人的值。
slave_max_allowed_packet(启动:直接设置;作用范围:全局;动态)
与max_allowed_packet类似,但它适用于从服务器的SQL线程和I/O线程。默认大小为1GB。
slave_net_timeout(启动:直接设置;作用范围:全局;动态)
它指的是在连接出现超时之前等待主服务器发送数据的秒数。
slave_parallel_workers(启动:直接设置;作用范围:全局;动态)
在从服务器上,将此变量设置为大于0,以启用多线程复制。通常情况下会执行从从服务器上接收到的所有事件的那个SQL线程,实际上会变成执行这些时间的那个工作线程slave_parallel_workers的坐标。默认值为0。允许的取值范围为0~1024。此变量是在MySQL 5.6.3里引入的。
slave_pending_jobs_size_max(启动:直接设置;作用范围:全局;动态)
如果启用了从服务器多线程执行(请参考slave_parallel_threads),则此变量控制的是工作线程用于缓存未处理事件的最大内存量。默认大小为16MB。允许的取值范围为1KB~18EB。此变量是在MySQL 5.6.3里引入的。
slave_skip_errors(启动:直接设置;作用范围:全局)
此变量用于指定一个错误列表;在列表里的错误出现时,从服务器会忽略它们,而不是将复制过程挂起。(不过,与利用这个选项来忽略错误的做法相比,还是找出问题的根源并彻底解决更好。)如果此变量的值为all,则会忽略所有的错误。否则,此变量的值应该是以逗号分隔的一个或者多个出错编号。
slave_sql_verify_checksum(启动:直接设置;作用范围:全局;动态)
它指的是从服务器的SQL线程是否应该验证中继日志里读取到的事件的校验和。如果校验和错误,复制过程会停止。默认值为OFF。此变量是在MySQL 5.6.2里引入的。
slave_transaction_retries(启动:直接设置;作用范围:全局;动态)
它指的是从服务器重试失败事务的次数。事务失败的原因包括:死锁或者已经到达存储引起的超时限制。默认值为10。
slave_type_conversions(启动:直接设置;作用范围:全局;动态)
这个变量表示的是在从服务器上进行基于行的复制时允许的各种类型转换。默认值为空串(即不允许转换)。当其值为非空时,它应该是一个以逗号分隔的值列表,其中的值为一个或多个ALL_LOSSY(允许丢失信息的转换)或ALL_NON_LOSSY(允许那些不丢失信息的转换)。此变量是在MySQL 5.5.3里引入的。
slow_launch_time(启动:直接设置;作用范围:全局;动态)
它指的是创建“慢”线程所占用的秒数。任何线程的创建时间超过这个值时,都会导致状态变量Slow_launch_threads的值加1。
slow_query_log(启动:直接设置;作用范围:全局;动态)
它用于指定是否要启用慢查询日志记录。如果要启用,则log_output变量会控制日志的输出目标。
slow_query_log_file(启动:直接设置;作用范围:全局;动态)
它指的是慢查询日志文件的名字。在启用了FILE日志目标时,会用到它。它的默认值是数据目录里的HOSTNAME-slow.log文件,其中,HOSTNAME是服务器主机的名字。如果其文件名是以相对路径形式给出的,则服务器会将它解释为相对于数据目录。
socket(启动:直接设置;作用范围:全局)
它指的是Unix域套接字的路径名或Windows中命名管道的名字。
sort_buffer_size(启动:直接设置;作用范围:全局、会话;动态)
供那些用来完成排序操作(GROUP BY或ORDER BY)的线程使用的缓冲区的大小。如有必要,每个客户端都能分配到一个这样的缓冲区。一般来说,如果你有许多个客户端会在同一时间进行排序操作,就不应该把这个值设置得很大(超过1MB)。
sql_auto_is_null(作用范围:全局、会话;动态)
如果此变量设置为1,那么最近生成的AUTO_INCREMENT值可以选择使用WHERE col_name IS NULL形式的子句来进行查询,其中,col_name是AUTO_INCREMENT列的名称。有些ODBC程序会使用此功能。如果要禁用它,可以将此变量设置为0。默认是0(在MySQL 5.5.3之前默认为1)。
sql_big_selects(作用范围:全局、会话;动态)
服务器会把此变量与系统变量max_join_size一起使用。如果sql_big_selects为1(默认),服务器会接受那些返回任意大小结果集的查询。如果sql_big_selects为0,服务器会拒绝那些由可能返回大量行的查询。在这种情况下,执行连接操作时,会使用max_join_size的值:服务器会对它需要检查的行组合数量进行估算,如果该值超过了max_join_size的值,那么服务器将返回一个错误,而不会执行该查询。
将max_join_size设置为DEFAULT以外的某个值,会自动将sql_big_selects设置为0。
sql_buffer_result(作用范围:全局、会话;动态)
将此变量设置为1,会导致服务器使用内部临时表来保存SELECT语句的结果。带来的效果是,服务器可以快速地释放由生成结果的那个表所占用的锁。默认值为0。
sql_log_bin(作用范围:全局、会话;动态)
将这个变量的会话值设置为0或1,可以禁用或启用当前客户端会话的二进制日志记录。在运行时,客户端必须拥有SUPER权限才能更改这个变量,即使是更改其会话值也是如此。该变量只有在启用二进制日志记录的情况下才会发挥作用。
sql_log_off(作用范围:全局、会话;动态)
将这个变量的会话值设置为0或1,可以启用或禁用当前客户端会话的普遍查询日志记录。在运行时,客户端必须拥有SUPER权限才能更改这个变量,即使是更改其会话值也是如此。该变量只有在启用普通查询日志记录的情况下才会发挥作用。
sql_mode(启动:直接设置;作用范围:全局、会话;动态)
服务器的SQL模式。这个变量将改变MySQL服务器的某些行为,使它更符合SQL语言标准或是与其他数据库服务器或老版本的MySQL服务器保持兼容。此变量的值应该是一个空串(这将清除以前设置的SQL模式)或者是由下面将要介绍的一个或多个模式值以逗号分隔而构成的一系列值。自MySQL 5.6.6起,其默认值为NO_ENGINE_SUBSTITUTION;而对于之前的版本,其值为空串。有些模式值很简单,它们可以单独使用以启用某种特定的行为。其他的则是复合模式,每种复合SQL模式涵盖多种简单SQL模式,这使得用于可以方便地一次设置多种SQL模式。模式值不区分大小写。
术语“严格模式“(strict mode)指的是这样一种sql_mode设置:它启用了STRICT_TRANS_TABLES和STRICT_ALL_TABLES,以便让服务器在对数据进行检查时更加严格。
下面列出了一些简单的SQL模式值。
n    ALLOW_INVALID_DATES
在严格模式里,禁止对DATE和DATETIME值进行全面的日期有效性检查。唯一的要求是月份的取值范围必须为1~12,日期的取值范围必须为1到31。但是TIMASTAMP值是个例外:不管是否启用了这个SQL模式,它们都必须是有效的。
n    ANSI_QUOTES
把双引号自负解释为供标识符(如数据库名、表名和列名)使用的引号字符,而不是供字符串使用的引号字符。(不管这个模式是否启用,都可以用反引号来当作名字的引号字符。)
n    ERROR_FOR_DIVISION_BY_ZERO
对于行插入或修改操作,即使是在严格模式下,以零为除数的出发(或求余数)运算得到的结果通常是NULL,且不会返回任何警告信息。启用ERROR_FOR_DIVISION_BY_ZERO模式将更改这种行为。如果没有启用严格模式,那么以零为除数时结果将为NULL值,但会返回一条警告信息;如果启用了严格模式,那么在执行INSERT或UPDATE语句期间遇到以零为除数的情况时,将产生一个错误,并且该语句会失败。如果想要禁止在插入或更新是出现错误,并且产生一个NULL值和警告信息,可以使用INSERT IGNORE或UPDATE IGNORE。
n    HIGH_NOT_PRECEDENCE
此模式可以更改NOT操作符的优先级,使其与!操作符的优先级相同。
n    IGNORE_SPACE
让服务器忽略内建函数名与引入参数表的那个左括号“(”之间的空格。默认情况下,那个左括号必须紧跟在函数名的后面,其中间不允许有间隔。此模式会使函数名被当作保留字。
n    NO_AUTO_CREATE_USER
防止GRANT语句创建不安全的新账户。也就是说,如果某个账户不存在,那么GRANT会执行失败,并且不会创建账户,除非该语句包含一个指定有非空密码的IDENTIFIED BY子句,或者包含有一个指定身份验证插件的IDENTIFIED WITH子句。
n    NO_AUTO_VALUE_ON_ZERO
通常情况下,把0插入一个AUTO_INCREMENT列,等效于插入NULL值:MySQL将自动生成下一个序列编号,并把它保存在该列里。如果启用了此模式,那么往AUTO_INCREMENT列里插入0将会把数字0存入该列。
n    NO_BACKSLASH_ESCAPES
如果启用了这个模式,那么反斜线字符(“\”)将被当作一个没有特殊含义的普通字符,而不是当作一个字符串的转义字符。
n    NO_DIR_IN_CREATE
忽略CREATE TABLE和ALTER TABLE语句时,该模式所指定的存储引擎不可用——此时,这个模式便决定着服务器将如何处理它们。如果启用了此模式,那么会出现一个错误,并且该表不会被创建(或更改)。如果禁用了此模式,那么允许替换为默认的存储引擎。
n    NO_ZERO_DATE
在严格模式下,拒绝接收’0000-00-00’作为一个有效日期值通常情况下,MySQL允许存储“零”日期值。这个模式可以通过使用INSERT IGNORE语句代替INSERT语句的办法来覆盖。
n    NO_ZERO_IN_DATE
在严格模式下,拒绝接收月或日部分是零的日期值。(年份是零的日期值是允许的。)通常情况下,MySQL允许存储这样的日期值。在非严格模式下,或者如果用户发出的是INSERT IGNORE语句,MySQL将把这样的日期值保存为’0000-00-00’。
n    ONLY_FULL_GROUP_BY
通常情况下,MySQL允许SELECT语句的输出列列表里带有非聚合型列,或者使用不是列在GROUP BY子句里的HAVING子句。例如:
select a,b,count(*) from t group by a;
ONLY_FULL_GROUP_BY标志要求非聚合型输出列(或HAVING列)都被列在GROUP BY里:
select a,b,count(*) from t group by a,b;
n    PAD_CHAR_TO_FULL_LENGTH
通常情况下,服务器在检索CHAR列值时会删除其尾部空格。如果启用了这个模式,MySQL服务器将禁止删除CHAR列的尾部空格,这样,检索到的值的长度就等于列的定义宽度。
n    PIPES_AS_CONCAT
如果启用了这个模式,那么||将被解释为字符串连接操作符,而不会解释为逻辑或。
n    REAL_AS_FLOAT
如果启用了这个模式,那么数据类型REAL将于FLOAT同义,而不是等同于DOUBLE。
n    STRICT_ALL_TABLES
如果启用了这个模式,那么所有的存储引擎都将对输入数据做更严格的检查,这将导致MySQL拒绝接收绝大多数非法值。如果想要更加严格,可以使用TRADITIONAL模式。
n    STRICT_TRANS_TABLES
如果启用了这个模式,那么事务型存储引擎将输入数据值做严格的检查,这将导致MySQL拒绝接受绝大多数非法值。在此基础上,只要有可能(例如,遇到插入单个行的INSERT语句),非事务型存储引擎也将对输入数据做严格的检查。如果想要更加严格,可以使用TRADITIONAL模式。
下表列出的是复合SQL模式,以及每种复合模式所包含的模式内容。
复合模式                组成模式
ANSI            ANSI_QUOTES, IGNORE_SPACE, PIPES_AS_CONCAT, REAL_AS_FLOAT
DB2    ANSI_QUOTES, IGNORE_SPACE, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OOPTIONS, PEPES_AS_CONCAT
MAXDB    ANSI_QUOTES, IGNORE_SPACE, NO_AUTO_CREATE_USER, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, PEPES_AS_CONCAT
MSSQL    ANSI_QUOTES, IGNORE_SPACE, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OOPTIONS, PEPES_AS_CONCAT
MYSQL323            HIGH_NOT_PRECEDENCE, NO_FIELD_OPTIONS
MYSQL40            HIGH_NOT_PRECEDENCE, NO_FIELD_OPTIONS
ORACLE    ANSI_QUOTES, IGNORE_SPACE, NO_AUTO_CREATE_USER, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, PEPES_AS_CONCAT
POSTGRESQL    ANSI_QUOTES, IGNORE_SPACE, NO_FIELD_OPTIONS, NO_KEY_OPTIONS, NO_TABLE_OOPTIONS, PEPES_AS_CONCAT
TRADITIONAL    ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER, NO_ZERO_DATE, NO_ZERO_IN_DATE, STRICT_ALL_TABLES, STRICT_TRANS_TABLES
之所以称之为TRADITIONAL模式,是因为它启用这样的模式——它们使得MySQL在处理输入值时,可以表现得像那些会拒绝无效数据的传统数据库一样。它有点像严格模式,但是对于更加严格的检查又包含了几个附加的约束。


sql_log_off(作用范围:全局、会话;动态)
将此变量设置为0或1(默认值),可以控制服务器是禁止还是记录Note级的警告。
sql_quote_show_create(作用范围:全局、会话;动态)
此变量控制的是,在语句SHOW CREATE TABLE和SHOW CREATE DATABASE的输出结果里是否需要标识符(数据库名、表名、列名和索引名)用引号引起来。默认为1(即需要使用引号)。将此变量设置为0,可以不要求使用引号。当生产用于其他数据库服务器的CREATE TABLE语句时,不使用引号会带来好处。如果禁用引号,则一定要确保表没有使用保留字或者没有包含特殊字符。
如果禁用了SQL模式ANSI_QUOTES,引用标识符将使用反撇号(`);否则,会使用双引号(”)。
sql_safe_updates(作用范围:全局、会话;动态)
如果将此变量设置为1,那么只有这些被修改的行是通过键值来确定的,或者使用了LIMIT子句,服务器才会接受UPDATE和DELETE。当使用默认值0时,无这种限制。
sql_select_limit(作用范围:全局、会话;动态)
此变量指定的是SELECT语句返回的最大行数。如果显式地给出了LIMIT子句,那么该子句的优先级要高于此变量。默认值为每个表所能容纳的最大行数。如果你曾经更改过此变量的值,可以使用之DEFAULT来恢复其默认值。
对于存储例程或那些不会把行返回给客户端的SELECT操作(如子查询、INSERT INTO … SELECT和CREATE TABLE … SELECT语句),此变量没有任何作用。
sql_slave_skip_counter(作用范围:全局;动态)
拥有SUPER权限的用户可以把此变量当作GLOBAL变量设置为n,告诉复制从服务器跳过接下来从其主服务器接收到的n个时间。如果最后的位置位于一组事件(如某个事务的一组事件)的中间,那么从服务器还会跳过组里的其余时间。
sql_warnings(作用范围:全局、会话;动态)
如果将此变量设置为1,那么MySQL会报告警告统计信息(即使对于单个行的插入操作也会报告)。对于默认值0,则只会针对插入多个行的INSERT语句报告警告统计信息。
ssl_xxx
ssl_xxx变量表示的是与服务器启动时给定的各个—ssl-xxx选项相对应的值。(例如,ssl_ca表示的是—ssl-ca选项的值。)如果在启动服务器时没有给定—ssl-xxx选项,那么相应的ssl_xxx变量的值将为空串。如果不支持使用SSL,则这些变量的值都将是NULL。
storage_engine(作用范围:全局、会话;动态)
自MySQL 5.5.3起,它已被弃用。请使用default_storage_engine来代替。
stored_program_cache(启动:直接设置;作用范围:全局;动态)
它指的是服务器会为每个连接缓存多少存储例程。默认值为256。此变量是在MySQL 5.5.21里引入的。
sync_binlog(启动:直接设置;作用范围:全局;动态)
当把此变量设置为0时(默认值),服务器不会把二进制日志刷新到磁盘。当此变量被设置为一个正整数n的时候,服务器每对二进制日志进行n次写操作就会把日志刷新到磁盘。在这种情况下,系统发生崩溃时,此变量的值越小,有关数据的安全系数越大,但这同时对系统性能的负面影响也越大。
sync_frm(启动:直接设置;作用范围:全局;动态)
当启动此变量时(默认值),服务器会在数据创建时将每个非临时表的.frm文件刷新到磁盘。
sync_master_info(启动:直接设置;作用范围:全局;动态)
对于从服务器,如果这个变量为0(默认值),那么从服务器不会强制将它的master.info文件同步到磁盘。实际上,正常的文件系统会执行刷新操作。如果该值大于0,那么从服务器会在每个事件组处理完之后将该文件同步到磁盘。
sync_relay_log(启动:直接设置;作用范围:全局;动态)
对于从服务器,如果这个变量为0(默认值),那么从服务器不会强制将其中继日志同步到磁盘。实际上,正常的文件系统会执行刷新操作。如果该值大于0,那么从服务器会在每个写入组处理完之后将中继日志同步到磁盘。如果启用了自动提交,那么每条语句都会发生一次写入操作;否则,是每个事务发生一次写入操作。
sync_relay_log_info(启动:直接设置;作用范围:全局;动态)
此变量与sync_master_info很像,不同之处在于它处理的是relay-log.info文件。
system_time_zone(作用范围:全局)
服务器的系统时区。服务器在它启动时会尝试通过询问操作系统的办法来确定此变量的值。要想显式地设置这个值,可以设置TZ环境变量,或是为mysqld_safe脚本指定—timezone选项。
table_definition_cache(启动:直接设置;作用范围:全局;动态)
它指的是服务器在其定义缓存里可以存放的表定义(来自.frm文件)个数。
table_open_cache(启动:直接设置;作用范围:全局;动态)
它指的是服务器能够同时打开的表的最大个数。
table_open_cache_instances(启动:直接设置;作用范围:全局)
它指的是用于对打开的表缓存进行分区的实例数量。默认为1(即不分区)。在高负荷情况下,将缓存分开可能会减少会话之间的资源竞争。此变量是在MySQL 5.6.6里引入的。
thread_cache_size(启动:直接设置;作用范围:全局;动态)
它指的是线程缓存所能容纳的最大线程数。当客户端断开与MySQL服务器的连接时,如果这个缓存还没有满,那么客户端曾经使用过的线程就将被放入这个缓存。只要这个缓存里还有线程,新建立的连接就会重复使用它们而不是去创建新的线程。当MySQL服务器为每个当前连接的客户端分别使用一个线程的时候,就要用到线程缓存。
thread_concurrency(启动:直接设置;作用范围:全局)
此变量已过时。
thread_handling(启动:直接设置;作用范围:全局)
它指的是服务器用于处理客户端连接的线程模型。此变量的值可以为no-threads(单个连接线程)或one-thread-per-connection(每个当前连接的客户端使用一个线程)。默认为one-thread-per-connection。
thread_stack(启动:直接设置;作用范围:全局)
它指的是每个线程的栈大小。
time_format(作用范围:全局)
此变量未被使用。
time_zone(启动:使用—default-time-zone选项;作用范围:全局、会话;动态)
它指的是MySQL服务器的当前时区。如果此变量的值为SYSTEM,则MySQL服务器将使用system_time_zone变量的值作为它的当前时区。客户端可以通过修改此变量的会话值,设置其自己会话的时区。
timestamp(作用范围:会话;动态)
通过设置此变量,可以指定当前会话的TIMESTAMP值。它用于二进制日志的处理。timestamp的值会对NOW()的返回值产生影响,但是不会影响到SYSDATE()的返回值。
tmp_table_size(启动:直接设置;作用范围:全局、会话;动态)
它指的是MySQL内部使用的各种临时表(即服务器在处理SQL语句的过程中自动创建的表)的最大允许长度。如果某个临时表的长度超过了max_heap_table_size和tmp_table_size当中较小的那个值,那么服务器会把它从内部内存表转换为MyISAM表,保存到磁盘上。如果有足够多的内存的话,那么增大此变量的值可以使服务器在内存里维护更大的临时表,而不必把它们转换为磁盘文件格式。
tmpdir(启动:直接设置;作用范围:全局)
它指的是服务器用于创建临时文件的那个目录的路径名。此变量的值可以是一个目录列表,它们将轮换着使用。在Unix里,目录名之间使用冒号(:)隔开;在Windows里,目录名之间需要用分号(;)隔开。
transaction_alloc_block_size(启动:直接设置;作用范围:全局、会话;动态)
它指的是为处理这样一些语句而分配的临时内存的块大小:在事务提交之时,在将事务写入二进制日志之前,需要存储为事务的一部分的语句。
transaction_prealloc_size(启动:直接设置;作用范围:全局、会话;动态)
它指的是为处理构成某个事务的语句而分配的那个缓冲区的大小。与那些由transaction_alloc_block_size变量控制的内存分配块不同,这个缓冲区在最后两条语句之间不会被释放。
tx_isolation(启动:使用—transaction-isolaction选项;作用范围:全局、会话;动态)
它指的是事务隔离的默认级别。
tx_read_only(启动:使用—transaction-read-only选项;作用范围:全局、会话;动态)
默认事务访问模式是否为只读。默认值为OFF(即允许读/写)。此变量是在MySQL 5.6.5里引入的。
unique_checks(作用范围:全局、会话动态)
将此变量设置为0或1,将分别禁用或启用对InnoDB表里的辅助索引进行唯一性检查。当把数据导入InnoDB表时,禁用这些检查可以提升性能,但是只有事先知道这些数据值不会与唯一性需求冲突时,才可以这样做。
updatable_views_with_limit(启动:直接设置;作用范围:全局、会话;动态)
当禁用此变量时,服务器会禁止对那些在其底表里没有使用主键的视图进行更新操作(即执行UPDATE或DELETE语句),即使更新操作里包含有LIMIT 1子句,把更新范围限制在了单个行里也不行。当启用此变量时(默认值),服务器会允许更新操作,并产生一条警告信息。
version(作用范围:全局)
它指的是MySQL服务器的版本。此变量的值由一个版本编号以及(可能)一个或多个后缀构成,如-log用于表明启用日志记录;-debug用于表明服务器正运行在调试模式下。
version_comment(作用范围:全局)
它指的是在配置服务器时指定给CMake的-DWITH_COMMENT选项的值。如果在配置时没有指定任何注释,则此变量的默认值为“Source distribution”。
version_compile_machine(作用范围:全局)
它指的是MySQL的编译机器(即硬件类型)。这个值是在构建MySQL时的配置阶段确定的。
version_compile_os(作用范围:全局)
它指的是MySQL的编译操作系统。这个值是在构建MySQL时的配置阶段确定的。
wait_timeout(启动:直接设置;作用范围:全局、会话;动态)
此变量指的是,在服务器自己认为可以将非交互式客户端关闭之前,该客户端能够保持空闲的秒数。对于交互式客户端,需要使用interactive_timeout变量的值来代替。
warning_count(作用范围:会话)
这是一个只读会话变量,它表示的是,最后那条语句所产生的诸如错误、警告和注意等信息的数量。


InnoDB系统变量
下面这些系统变量都与InnoDB存储引擎有关。
ignore_builtin_innodb(作用范围:全局)
此变量未被使用。
innodb_adaptive_flushing(启动:直接设置;作用范围:全局;动态)
它表示的是,InnoDB是否会试图通过使用工作负载水平更改缓冲池里脏页刷新频率的方式来避免I/O爆炸。默认值为ON。
innodb_adaptive_flushing_lwm(启动:直接设置;作用范围:全局;动态)
它指的是会使InnoDB启用自适应刷新功能的那个重做日志容量的最低百分比点数。默认值为10。此变量是在MySQL 5.6.6里引入的。
innodb_adaptive_hash_index(启动:直接设置;作用范围:全局;动态)
它指的是,InnoDB是否要使用自适应哈希索引。也就是说,它是否要见识索引查找,并动态构建散列索引,如果这样做,则有可能提高性能。默认值为ON。
innodb_adaptive_max_sleep_delay(启动:直接设置;作用范围:全局;动态)
它指的是,InnoDB是否要使用工作负载水平来调整innodb_thread_sleep_delay。当值为0时,会禁止调整。非零值最大可达1000000,它指定的是InnoDB调整innodb_thread_sleep_delay的上限值(单位为微秒)。默认值为150000。此变量是在MySQL 5.6.3里引入的。
innodb_additional_mem_pool_size(启动:直接设置;作用范围:全局)
它指的是InnoDB存储引擎用来存放各种内部数据结构的内存池的大小。
innodb_autoextend_increment(启动:直接设置;作用范围:全局;动态)
当某个自扩展表空间快要被填满时,InnoDB存储引擎将自动使用此变量的值作为第增量去增加那个表空间的大小。指定值的单位为MB。此变量的默认值是8,最大值是1000。
innodb_autoinc_lock_mode(启动:直接设置;作用范围:全局)
此变量控制的是InnoDB用于生成AUTO_INCREMENT值的锁定算法。允许取值包括0、1(默认值)和2。一般情况下,当有多个事务需要同时生成自动增量值时,使用这些值可以增加锁定的扩展性、获得更好的并发性,并减少阻塞。对于会生成多个这种值的多行INSERT语句,模式0和1可以爆炸生成的值在该语句内部是连续的。模式2无法保证这种连续性:因为他们不一定连续。着也会对复制产生影响。模式0和1对基于语句的复制来讲是安全的;但是模式2分配的值是不确定的,因此该模式是不安全的。(所有的模式对基于行的复制都是安全的。)
innodb_buffer_pool_dump_at_shutdown(启动:直接设置;作用范围:全局;动态)
它指的是,InnoDB是否会在关闭时将缓冲池转储至磁盘。默认值为OFF。此变量是在MySQL 5.6.3里引入的。
innodb_buffer_pool_dump_now(启动:直接设置;作用范围:全局;动态)
将此变量设置为ON,会使得InnoDB立即将缓冲池转储至磁盘。默认值为OFF。此变量是在MySQL 5.6.3里引入的。
innodb_buffer_pool_filename(启动:直接设置;作用范围:全局;动态)
它指的是InnoDB用于缓冲池转储和加载操作的那个文件的名字。默认为数据目录里的ib_buffer_pool文件。此变量是在MySQL 5.6.3里引入的。
innodb_buffer_pool_instances(启动:直接设置;作用范围:全局)
它指的是,如果innodb_buffer_pool_size的值至少为1GB,则需要将InnoDB缓冲池划分为innodb_buffer_pool_instances个区域。此变量的默认值是1(单个缓冲池),最大值是64。为达到最好的效果,需要对innodb_buffer_pool_size和innodb_buffer_pool_instances的值进行选择,以便每个实例都至少为1GB。此变量是在MySQL 5.5.4里引入的。
innodb_buffer_pool_load_abort(启动:直接设置;作用范围:全局;动态)
将此变量设置为ON,会导致InnoDB中断当前正从磁盘加载的所有缓冲池。默认值为OFF。此变量是在MySQL 5.6.3里引入的。
innodb_buffer_pool_load_at_startup(启动:直接设置;作用范围:全局)
它指的是,InnoDB是否会在启动时从磁盘加载缓冲池。默认值为OFF。此变量是在MySQL 5.6.3里引入的。
innodb_buffer_pool_load_now(启动:直接设置;作用范围:全局;动态)
将此变量设置为ON,会导致InnoDB立即从磁盘加载缓冲池。默认值为OFF。此变量是在MySQL 5.6.3里引入的。
innodb_buffer_pool_size(启动:直接设置;作用范围:全局)
它指的是InnoDB用于缓冲表数据和索引的那个缓存的大小。默认大小为128MB。
innodb_change_buffer_max_size(启动:直接设置;作用范围:全局;动态)
它指的是InnoDB为更改缓冲区预留的缓冲池最大百分比例。默认值为25。允许的取值范围为0~50。此变量是在MySQL 5.6.2里引入的。
innodb_change_buffering(启动:直接设置;作用范围:全局;动态)
它指的是,InnoDB缓冲表会如何更改辅助 索引的延迟写操作。通过写操作缓冲的方式,InnoDB有事可以把它们分成一组,然后顺序地写入,而不是以随机方式写入;这样有利于提高I/O的性能。下表列出了各种可能的取值。
取值                含义
all                    缓存所有的更改操作;这个是默认值
none                不缓存更改操作
changes            缓存插入和删除操作
deletes                缓存那些把索引记录标记为删除的更改操作
inserts                缓存插入操作
purges                缓存那些被“垃圾回收器”标记为删除的清理操作
innodb_checksum_algorithm(启动:直接设置;作用范围:全局;动态)
InnoDB会在其表空间的每一个块里写入校验和值。此变量控制的是用于计算校验和值的算法。下表列出了各种可能的取值。strict_xxx的值与他们的对应变量很相似,主要差异在于:InnoDB在表空间里遇到多种校验和类型时会停止。
取值                            含义
none,strict_none            校验值为常量
crc3,strict_crc32                使用CRC32算法
innodb,strict_innodb        默认算法
此变量是在MySQL 5.6.3里引入的。
innodb_checksums(启动:直接设置;作用范围:全局)
它指的是,InnoDB表是否启用校验计算。默认值为ON。自MySQL 5.6.3起,此变量已被弃用,请使用innodb_checksum_algorithm。
innodb_commit_concurrency(启动:直接设置;作用范围:全局;动态)
此变量表示的是可以同时提交多少个线程。当该值为0时(默认值),表示的是“无限制”。
innodb_concurrency_tickets(启动:直接设置;作用范围:全局;动态)
当某个线程想进入InnoDB时,只有当线程数量小于innodb_commit_concurrency变量设置的上限时它才能成功。否则,该线程将排队等候直到线程的数量降低到那个上限以下。一旦线程被允许进入,它将可以不受限制地离开和重新进入InnoDB,这种自由往返的最大次数由innodb_concurrency_tickets变量的值决定。默认值为500。
innodb_data_file_path(启动:直接设置;作用范围:全局)
它指定的是InnoDB表空间组件的文件。
innodb_data_home_dir(启动:直接设置;作用范围:全局)
它指的是相对于InnoDB表空间组件文件存放位置的目录路径名。如果此变量为空,则组件文件名将被解释为绝对路径名。
innodb_doublewrite(启动:直接设置;作用范围:全局)
它指的是,InnoDB是否启用了双写缓冲区。默认值是ON。
innodb_fast_shutdown(启动:直接设置;作用范围:全局;动态)
当此变量的值为0或1时,它表示的是InnoDB是否使用其较快速的关机方法(它会跳过某些正常情况下会执行的操作)。当取值为2时,InnoDB会刷新其日志,然后停止。
innodb_file_format(启动:直接设置;作用范围:全局;动态)
如果启用了innodb_file_per_table,则它指的是InnoDB新表所使用的格式。默认格式为Antelope;另一个允许值为Barracuda。使用Barracuda可以启用不被Antelope支持的功能,如COMPRESSED行格式。
innodb_file_format_check(启动:直接设置;作用范围:全局)
InnoDB系统表空间包含有一个标志,它表示的是表空间里使用的最高版本的文件格式。此变量会在服务器启动时设置,主要用于控制InnoDB是否要检查这个标志,以确定此格式版本比InnoDB支持的那个版本更高。如果启用此变量(默认值),并且该格式版本更高,那么启动会失败,并产生一个错误。如果该格式版本不够高,那么InnoDB会将innodb_file_format_max设置成该格式。
innodb_file_format_max(启动:直接设置;作用范围:全局;动态)
请参考innodb_file_format_check的描述。
innodb_file_io_threads(启动:直接设置)
此变量未被使用。
innodb_file_per_table(启动:直接设置;作用范围:全局;动态)
如果此变量被设置为0(默认值),InnoDB将在其系统表空间里创建新表。如果此变量被设置为1,InnoDB将为每个新表分别创建一个独立表空间:在数据库目录里为每一个新表单独创建一个.ibd文件来存放该表的内容。在这种情况下,系统表空间只会用于InnoDB数据目录条目,而不会用于数据或索引存储。
此变量只影响InnoDB如何创建新表。不管如何更改此变量的值,InnoDB存储引擎总是可以访问已经在系统表空间或独立表空间里创建的表。
innodb_flush_log_at_trx_commit(启动:直接设置;作用范围:全局;动态)
这个变量控制着InnoDB日志的刷新行为。下表列出了各种可能的取值。
取值            含义
           每秒写入一次日志,并刷新到磁盘一次
           每提交一次写入一次日志,并刷新到磁盘一次
           每提交一次写入一次日志,但是每秒刷新到磁盘一次
只有在将此变量设置为1(默认值)时,InnoDB才能爆炸ACID特性。否则,如果出现崩溃的情况,那么会付出大约1秒的代价,即最近的事务会丢死。如果将此变量设置为0,则可以减少InnoDB将缓存数据保存到磁盘的次数。不过,如果出现崩溃,则这样会大大增加潜在丢失最近提交事务的风险。
innodb_flush_method(启动:直接设置;作用范围:全局)
此变量给出的是InnoDB用来刷新文件的方法。它只适用于Unix系统。可取值包括fdatasync(使用fsync()来刷新数据文件和日志文件)、O_DSYNC(使用fsync()来刷新数据文件,并使用O_DSYNC来打开和刷新日志文件)和O_DIRECT(使用fsync()来刷新数据文件和日志文件,视情况选用O_DIRECT或directio()来打开数据文件)。默认值为fdatasync。在Windows里,此变量的值总是为async_unbuffered。
innodb_flush_neighbors(启动:直接设置;作用范围:全局;动态)
它表示的是,InnoDB是单独刷新缓冲池的脏面,还是连同位于同一范围(页面组)内的相邻页面一起刷新。刷新相邻页面,可以将写操作结合在一起,减少磁盘设备旋转过程中的寻道时间开销。这个变量是在MySQL 5.6.3里引入的,是一个布尔量,其默认值为ON。自MySQL 5.6.6起,这个变量成为了三态变量,允许的值包括:0(不刷新相邻页面)、1(刷新相邻页面)和2(刷新同一范围里的所有相邻页面)。
innodb_force_load_corrupted(启动:直接设置;作用范围:全局)
它表示的是,InnoDB在启动时是否加载已标记为损坏的表。默认值为OFF,因此这些表通常情况下会被忽略。如果启用此变量,则可能允许恢复那些在禁用此变量时无法访问的数据;在恢复之后,可以在禁用此变量的情况下重启服务器。此变量是在MySQL 5.5.18里引入的。
innodb_force_recovery(启动:直接设置;作用范围:全局)
此变量的值通常为0,但是可以被设置为1~6的某个值,以便让服务器在崩溃后即使InnoDB恢复失败也可以再次启动。
innodb_ft_xxx
在MySQL 5.6.4之前,对全文搜索的支持仅限于MyISAM表。这些以innodb_ft作为开头的系统变量都与InnoDB表的全文搜索支持有关。该项功能是在MySQL 5.6.4引入的。更多信息,请参考MySQL擦卡手册。
innodb_io_capacity(启动:直接设置;作用范围:全局;动态)
它指的是InnoDB对于后台任务每秒执行I/O操作次数的近似限制。默认值为200,最小值为100。对于慢速旋转的磁盘,可能需要将这个值调低一点。对于SSD磁盘,可以将其适当调高。请参考innodb_io_capacity_max。
innodb_io_capacity_max(启动:直接设置;作用范围:全局;动态)
如果innodb_io_capacity的值在紧急情况下不够高,那么innodb_io_capacity_max会成为InnoDB可以将该限制扩展到的最大值。其默认值为innodb_io_capacity默认值的两倍,它受限制于服务器所使用的最低值2000。此变量是在MySQL 5.6.6里引入的。
innodb_large_prefix(启动:直接设置;作用范围:全局;动态)
InnoDB索引的最大索引前缀长度通常是767字节。如果启用此变量,那么对于那些使用COMPRESSED或DYNAMIC行格式的表,允许前缀最高达到3072个字节。默认值为OFF。此变量是在MySQL 5.5.14里引入的。
innodb_lock_wait_timeout(启动:直接设置;作用范围:全局、会话;动态)
它指的是等待某个事务锁的秒数。如果无法获得该锁,则InnoDB会回滚该事务。
innodb_locks_unsafe_for_binlog(启动:直接设置;作用范围:全局)
此变量会对InnoDB如何处理索引行锁定产生影响,但是自MySQL 5.6.3起,它已被弃用,因此请不要再使用它。为获得与此变量相同的效果(非严格的锁定),但是更加灵活,可以针对特定的会话或事务,使用SET TRANSACTION将事务隔离级别设置为READ COMMITTED。
innodb_log_buffer_size(启动:直接设置;作用范围:全局)
它指的是InnoDB事务日志缓冲区的大小。此变量的取值范围通常是1MB~8MB;默认为1MB。
innodb_log_file_size(启动:直接设置;作用范围:全局)
它指的是每个InnoDB日志文件的大小。innodb_log_file_size和innodb_log_files_in_group的乘积决定了InnoDB日志的总大小。
innodb_log_group_home_dir(启动:直接设置;作用范围:全局)
它指的是InnoDB应该将其日志文件写入的那个目录的路径名。
innodb_lru_scan_depth(启动:直接设置;作用范围:全局;动态)
InnoDB会使用一个后台操作来查找需要从其缓冲池刷新到磁盘的脏页。这个变量控制的是这个操作能够查看到的页面列表(按最近最少使用的顺序排序)的长度。对默认值1024的合理更改包括:对于拥有繁重写操作工作负载和大型缓冲池的服务器,可以减小这个值;而对于I/O能力还有盈余的服务器,可以增加这个值。此变量是在MySQL 5.6.3里引入的。
innodb_max_dirty_page_pct(启动:直接设置;作用范围:全局;动态)
它指的是,在InnoDB认为需要将日志刷新到磁盘之前,InnoDB允许脏页占用其缓冲池的百分比。允许的取值范围是0~100;默认值为90。
innodb_max_dirty_pages_pct_lwm(启动:直接设置;作用范围:全局;动态)
它指的是,InnoDB为降低脏页的占用比例,而启用预刷新功能所参考的缓冲池脏页最低占用百分比。默认值为0,表示禁止预刷新。允许的取值范围为0~99。此变量是在MySQL 5.6.6里引入的。
innodb_max_purge_lag(启动:直接设置;作用范围:全局;动态)
InnoDB维护着一个清除线程,它可以清除删除操作或更新操作标记的待删除的行。如果小批量行被插入和删除的频率差不多相同,啊呢么清除线程可能会落后,进而导致大量待删除行不能及时清除,而占用着本应该释放的空间。innodb_max_purge_lag变量控制着如何延迟INSERT、DELETE和UPDATE语句,让它们适当放慢速度以便清除线程能够追上它们的进度。默认为0(即不延迟)。如果把此变量设置为一个非零值,那么延迟大约是((n/innodb_max_purge_lag) x10 ) – 5毫秒,其中的n是在执行过程中会把一些行标记为待删除的事务的数量。
innodb_max_purge_lag_delay(启动:直接设置;作用范围:全局;动态)
它指的是可以由innodb_max_purge_lag产生的延迟间隔(单位为毫秒)。默认为0(即无间隔)。此变量是在MySQL 5.6.5里引入的。
innodb_mirrored_log_groups(启动:直接设置;作用范围:全局)
它指的是InnoDB维护的日志文件组的个数。其值总是为1。
innodb_monitor_disable、innodb_monitor_enable、innodb_monitor_reset、innodb_monitor_reset_all(启动:直接设置;作用范围:全局)
这次变量控制的是对INFORMATION_SCHEMA.innodb_metrics表的操作。更多信息请参考MySQL参考手册。这些变量是在MySQL 5.6.2里引入的。
innodb_old_blocks_pct(启动:直接设置;作用范围:全局;动态)
它指的是InnoDB缓冲池的旧子列表所占百分比。默认值为37(即缓冲池的3/8)。允许的取值范围为5~95。
innodb_old_blocks_time(启动:直接设置;作用范围:全局;动态)
一个缓冲块在第一次访问之后、下次访问之前,需要在InnoDB缓冲池的旧子列表里待多少毫秒才能移动到新子列表里。默认值为0。表示的是,插到旧子列表里的缓存块,在第一次访问时会立即移到新子列表里去。
innodb_open_files(启动:直接设置;作用范围:全局)
如果将innodb_file_per_table变量设置为1,将启用独立表空间。innodb_open_files变量控制着需要为InnoDB存储引擎保留多少个文件描述符用于同时打开多个.ibd文件。最小值为10,默认值为300。在innodb_open_files变量控制下分配的文件描述符与在open_files_limit变量控制下分配的文件描述符互不相干:前者用来打开.ibd文件,后者供表缓冲区使用。
innodb_page_size(启动:直接设置;作用范围:全局)
它指的是InnoDB表空间里的页面大小。默认大小为16KB。允许值由4KB、8KB和16KB。该设置只有在InnoDB初始化表空间的时候才会生效,因此应该在初始化MySQL之前,或者在删除并重新创建InnoDB表空间文件之前设置它。此变量是在MySQL 5.6.4里引入的。
innodb_print_all_deadlocks(启动:直接设置;作用范围:全局;动态)
它指的是,InnoDB是否会将诊断信息写到与事务死锁有关的错误日志里。默认值为OFF。此变量是在MySQL 5.6.2里引入的。
innodb_purge_batch_size(启动:直接设置;作用范围:全局;动态)
它指的是,重做日志记录的数量。这些记录会引发清除操作,将更改过的缓冲池数据块刷新到磁盘上。默认值为20。此变量是在MySQL 5.5.4里引入的。
innodb_purge_threads(启动:直接设置;作用范围:全局)
它指的是,InnoDB使用了多少后台线程来实现清除操作(将所有事务都不再需要的待删除行删除掉)。默认值为0。此变量是在MySQL 5.5.4里引入的。
innodb_random_read_ahead(启动:直接设置;作用范围:全局;动态)
它指的是,InnoDB是否要试图预测何时会需要位于某个范围内(即页面组)的页面,并为它们执行一个异步的预读取操作。预测的依据是该范围内的其他页面是否已被读取,而它们的读取顺序无关紧要。默认值为OFF。
innodb_read_ahead_threshold(启动:直接设置;作用范围:全局;动态)
如果InnoDB检测到某个模式的顺序页面方位是由innodb_read_ahead_threshold或多个来自同一范围(页面组)的页面构成,那么它会在下一个范围里执行一个异步预读取操作。默认值为56。允许的取值范围为0~64。
innodb_read_io_threads(启动:直接设置;作用范围:全局)
它指的是InnoDB在执行读取操作时会时候多少个线程。日期范围是1~64;默认值为4。
innodb_replication_delay(启动:直接设置;作用范围:全局;动态)
如果在从服务器上已达到innodb_thread_concurrency表明的那个限制,那么此变量便是复制线程的延迟时间(单位为毫秒)。默认值为0。
innodb_rollback_on_timeout(启动:直接设置;作用范围:全局)
此变量控制着InnoDB存储引擎在事务超时时的行为。如果此变量的值是OFF(默认值),InnoDB存储引擎将只回滚最后一条语句;如果此变量的值是ON,InnoDB存储引擎将回滚整个事务。
innodb_rollback_segments(启动:直接设置;作用范围:全局;动态)
它指的是,在一个事务里,InnoDB在系统表空间里会使用多少回滚段。默认值为128。此变量是在MySQL 5.5.11里引入的。在5.6.3里,它被替换成了innodb_undo_logs。
innodb_sort_buffer_size(启动:直接设置;作用范围:全局)
它指的是InnoDB在索引创建期间用于合并排序的缓冲区大小(单位为字节)。默认大小为1MB。在MySQL 5.6.4里最小值为512KB;在MySQL 5.6.5及以上的版本里,最小值为64KB。此变量是在MySQL 5.6.4里引入的。在MySQL 5.6.4之前,使用的是固定大小1MB。
innodb_spin_wait_delay(启动:直接设置;作用范围:全局;动态)
它指的是,旋转锁的两次轮询之间的最大等待值。这个值没有单位,但是值越大意味着等待得越久。默认值为6,最小值为0。
innodb_stats_method(启动:直接设置;作用范围:全局;动态)
此变量表示的是,服务器在InnoDB表统计器索引键的分布概率时,应该把NULL值视为相同,还是视为不同。可设置的值包括有:nulls_equal(所有的NULL值在同一个组里)、nulls_unequal(每个NULL值单独成为一组)或nulls_ignored(忽略NULL值)。
innodb_stats_on_metadata(启动:直接设置;作用范围:全局;动态)
它指的是,InnoDB是否要更新与那些与表元数据访问语句(如SHOW INDEX或SHOW TABLE STATUS)有关的统计信息,或者更新那些与访问STATISTICS表和执行TABLES INFORMATION_SCHEMA语句所得到的各张表有关的统计信息。其效果与运行ANALYZE TABLE相类似。默认值为ON。
innodb_stats_persistent_sample_pages(启动:直接设置;作用范围:全局;动态)
它指的是,用于估计统计信息的InnoDB样本的索引页数量。默认值为20。如果启用了innodb_analyze_is_persistent,那么此设置会被忽略掉。否则,InnoDB会使用innodb_stats_transient_sample_pages的值。此变量是在MySQL 5.6.2里引入的。
innodb_stats_sample_pages(启动:直接设置;作用范围:全局;动态)
在MySQL 5.5里,它指的是用于估计统计信息的InnoDB样本的索引页数量。默认值为8。自MySQL 5.6.3起,此变量已被弃用,请使用innodb_stats_transient_sample_pages。
innodb_stats_transient_sample_pages(启动:直接设置;作用范围:全局;动态)
它指的是,用于估计统计信息的InnoDB样本的索引页数量。默认值为8。如果启用了innodb_analyze_is_persistent,此设置会被忽略。否则,InnoDB会使用innodb_stats_transient_sample_pages的值。此变量是在MySQL 5.6.2里引入的。
innodb_strict_mode(启动:直接设置;作用范围:全局、会话;动态)
它指的是,InnoDB是否对表和索引的创建和修改语句的语法进行较严格要求。如果启用了此变量,那么InnoDB会把有冲突的子句当作错误;否则,它们会被当作警告。这个有点类似于启用了严格的SQL默认。
innodb_support_xz(启动:直接设置;作用范围:全局、会话;动态)
它表示的是,InnoDB在XA事务里是否支持两阶段提交默认。默认值为ON;但是如果为了获得更好的性能而不使用XA事务,则可以将其设置为OFF。
innodb_sync_spin_loops(启动:直接设置;作用范围:全局;动态)
它表示的是,线程在被挂起之前等待InnoDB释放互斥信号的次数。
innodb_table_locks(启动:直接设置;作用范围:全局、会话;动态)
此变量控制的是,当禁用自动提交模式时,InnoDB会如何处理LOCK TABLE语句,以获得InnoDB表的写锁。如果此变量的值是ON(默认值),InnoDB将申请到一个内部表锁。如果此变量的值是OFF,InnoDB要一直等到没有任何其他线程锁定那个表时才能执行LOCK TABLE语句。禁用此变量可以在一定程度上防止应用程序在自动提交模式已被禁用的情况下发出LOCK TABLE语句时遭遇死锁。
innodb_thread_concurrency(启动:直接设置;作用范围:全局;动态)
它指的是InnoDB尝试维护的线程数量上限。当值为0时(默认值),表示的是“无限制”。允许的取值范围为0~1000。
innodb_thread_sleep_delay(启动:直接设置;作用范围:全局;动态)
它指的是InnoDB线程在被放入InnoDB等待队列之前休眠的时间(单位为毫秒)。默认值为10000(即10秒);值为0时,表示的是“不休眠”。
innodb_undo_directory(启动:直接设置;作用范围:全局)
如果innodb_undo_logs和innodb_undo_tablespaces都是非零值,则它指的是InnoDB在其中创建独立恢复日志表空间的那个目录。默认值为“.”,它表示的是InnoDB在其中创建其他日志文件的那个默认目录。此变量是在MySQL 5.6.3里引入的。
innodb_undo_logs(启动:直接设置;作用范围:全局;动态)
它指的是,在一个事务里,InnoDB在系统表空间里会使用多少回滚段。默认值为128。此变量是在MySQL 5.6.3里引入的。它用于替换innodb_rollback_segments。
innodb_undo_tablespaces(启动:直接设置;作用范围:全局)
它指的是InnoDB针对独立恢复日志所使用的那个表空间文件数量。默认值为0。此变量是在MySQL 5.6.3里引入的。
innodb_use_native_aio(启动:直接设置;作用范围:全局)
它指的是,在Linux里是否使用异步I/O子系统。默认值为ON。此变量是在MySQL 5.5.4里引入的。
innodb_use_sys_malloc(启动:直接设置;作用范围:全局)
它指的是,InnoDB是否要使用系统内存分配器。默认值为ON。如果禁用此变量,会导致InnoDB使用其自己的分配器。
innodb_version(作用范围:全局)
它指的是InnoDB存储引擎的版本号。
innodb_write_io_threads(启动:直接设置;作用范围:全局)
它指的是InnoDB在执行写入操作时会使用多少个线程。取值范围是1~64;默认值为4。
timed_mutexes(启动:直接设置;作用范围:全局;动态)
是否要搜集InnoDB的互斥时间信息。默认值为OFF。


状态变量
状态变量提供的是各种与服务器当前运作状态有关的信息。通过使用SHOW STATUS语句或执行mysqladmin extended-status命令可以查看这些状态变量。状态变量(与系统变量相似)的值可分为全局级和会话级,分别对应于所有客户端的总和值和当前客户端的值。如果某个状态变量只有一个全局值,则全局变量和会话变量都将返回相同的值。另外,还可以通过在INFORMATION_SCHEMA数据库里查询表GLOBAL_STATUS和SESSION_STATUS来获得状态变量信息。
状态变量名不区分大小写。
下面列出的是一些比较通用的状态变量。随后的节描述的是几组彼此相关的状态变量,其中涉及的类型包括:InnoDB存储引擎、查询缓存和SSL。
Aborted_clients
因客户端未正确关闭而被中断的客户端连接个数。
Aborted_connects
连接服务器的尝试失败的次数。
Binlog_cache_disk_use
因其大小超过系统变量binlog_cache_size的限制而使用临时磁盘文件的那些事务的数量。
Binlog_cache_use
因其大小未超过系统变量binlog_cache_size的限制而保存在二进制日志缓存里的那些事务的数量。
Binlog_stmt_cache_disk_use
因语句缓存已满而存储在临时文件里的非事务语句的数量。此变量是在MySQL 5.5.9里引入的。
Binlog_stmt_cache_use
存储在语句缓存里的非事务语句数量。此变量是在MySQL 5.5.9里引入的。
Bytes_received
服务器从所有客户端(对于全局值)或当前客户端(对于会话值)接收到的字节总数。
Bytes_sent
服务器向所有客户端(对于全局值)或当前客户端(对于会话值)发送出去的字节总数。
Com_xxx
服务器维护着一组状态变量,它们的作用是计数器,用于表示特定类型的语句(或命令)已执行的次数。这种类型的变量有几十个,并且它们的名字都相似,因此这里没有将它们逐一地列出来。每个语句计数器的变量名都已Com_作为开头,并且都有一个后缀,用于表明该计数器所对应的语句类型。例如,变量Com_select和Com_drop_table分别表示的是服务器已执行了多少条SELECT语句和DROP TABLE语句。
Compression
表明是否对利用客户端/服务器协议实现的通信进行压缩。
Connection_errors_xxx
这些变量用于跟踪在客户端尝试进行连接时出现的各种类型的错误。这些变量是在MySQL 5.6.5里引入的。
Connections
尝试连接服务器的次数(包括成功或失败的)。
Created_tmp_disk_tables
服务器在处理语句时在磁盘上创建的内部临时表个数。
Created_tmp_files
服务器创建的临时文件个数。
Created_tmp_tables
服务器在处理语句时创建的内部临时表个数。
Delayed_errors
在处理INSERT DELAYED行时发生的错误个数。
Delayed_insert_threads
INSERT DELAYED处理器的个数。
Delayed_writes
已写入的INSERT DELAYED行的个数。
Flush_commands
已执行的表刷新操作次数。
Handler_commit
请求提交事务的次数。
Handler_delete
请求从表删除行的次数。
Handler_external_lock
此变量与锁定操作数量有关,主要是在表访问的开始和结束时起作用。其值除以2,即为锁定操作的次数。比变量是在MySQL 5.6.2里引入的。
Handler_mrr_init
有些存储引擎自己实现了“多范围读取”(Multi-Range Read)优化策略。此变量表示的是服务器使用该实现的次数。比变量是在MySQL 5.6.1里引入的。
Handler_prepare
为两阶段提交所做的准备次数。
Handler_read_first
请求从索引里读取第一行的次数。
Handler_read_key
请求基于索引值读取行的次数。
Handler_read_last
请求从索引里读取最后一行的次数。比变量是在MySQL 5.5.7里引入的。
Handler_read_next
按索引顺序请求读取下一行的次数。
Handler_read_prev
按索引逆序请求读取上一行的次数。
Handler_read_rnd
根据位置请求读取一行的次数。
Handler_read_rnd_next
请求读取下一行的次数。如果这个值很大,则说明你可能在执行大量的需要全表扫描的语句,或者执行大量的未正确使用索引的语句。
Handler_rollback
请求事务回滚的次数。
Handler_savepoint
请求创建事务保存点的次数。
Handler_savepoint_rollback
请求回滚到事务保存点的次数。
Handler_update
在表里请求更新行的次数。
Handler_write
在表里请求插入行的次数。
Key_blocks_not_flushed
在键缓存里已被修改、但仍未刷新到磁盘的缓存块个数。
Key_blocks_unused
键缓存用尚未使用的缓存块个数。
Key_blocks_used
键缓存里被同时使用的缓存块最大个数。
Key_reads_requests
请求从键缓存里读取数据块的次数。
Key_reads
从磁盘里读取索引块的次数。
Key_write_requests
请求把数据块写入键缓存的次数。
Key_writes
把索引块写入键缓存的次数。
Last_query_cost
查询优化器最近一次的查询开销计算。这个值只对未使用UNION或子查询才有用。如果还没计算出查询开销,则这个值为0。这个值只对使用查询缓存的查询才有效。
Last_query_partial_plans
它适用于最近执行的查询,指的是优化器在准备执行计划时迭代的次数。此变量是MySQL 5.6.5里引入的。
Max_used_connections
同时打开的最大连接数。
Not_flushed_delayed_rows
等待通过INSERT DELAYED语句写入的行个数。
Open_files
打开文件的个数。
Open_streams
处于打开状态的文件流的个数。一个流即为一个用fopen()函数打开的文件。它只适用于日志文件。
Open_table_definitions
缓存的.frm文件的个数。
Open_tables
处于打开状态的表的个数,其中不包括TEMPORARY表
Opened_files
服务器已打开文件的次数。(有些存储引擎不会递增这个计数器的值。)
服务器使用内部库函数my_open()打开文件的次数。
Opened_table_definitions
服务器已打开.frm文件的次数。
Opened_tables
服务器已打开表的次数。如果这个值很大,则应该考虑加大表缓存。
Performance_schema_xxx
这些以Performance_schema开头的状态变量都与用于采集和分析服务器性能数据的Performance Schema程序有关。更多详细信息请参考MySQL参考手册。
Prepared_stmt_count
预处理语句的个数。
Questions
服务器接收到的语句个数(其中即包括成功的语句也包括不成功的语句)。Questions和Uptime的比值即为每秒处理的语句数量。
Select_full_join
“完全”连接(即未使用索引的连接操作)的次数。
Select_full_range_join
对参照表进行范围搜索时执行连接的次数。
Select_range
使用第一个表的范围执行连接的次数。
Select_range_check
在利用服务搜索获取辅助表的行时执行连接的次数。
Select_scan
在对第一张表进行全表扫描时执行连接的次数。
Slave_heartbeat_period
复制操作使用的心跳间隔(单位为秒)。
Slave_last_heartbeat
该TIMESTAMP值表示的是从主服务器接收最后一个心跳包的时间。此变量是在MySQL 5.6.1里引入的。
Slave_open_tmp_tables
从SQL线程曾经打开的临时表个数。
Slave_received_heartbeats
自上一条CHANGE MASTER语句以来或者自从服务器重启或重置一起来,从主服务器接收到的心跳包个数。
Slave_retried_transactions
从SQL线程重试事务的次数。
Slave_running
从I/O线程和SQL线程是否都在运行中。
Slow_launch_threads
创建时间超过slow_lanuch_time秒的线程数。
Slow_queries
查询时间超过long_query_time秒的查询的个数。
Sort_merge_passes
排序算法执行的合并的次数。
Sort_range
使用范围的排序操作的个数。
Sort_rows
排好序的行数。
Sort_scan
使用全表扫描的排序操作的个数。
Table_locks_immediate
无需等待便能立刻得到满足的表锁请求的数量。
Table_locks_waited
只有在等待之后才能得到满足的表锁请求的数量。如果这个值很大,则表明表锁存在大量的竞争问题。
Table_open_cache_hits、Table_open_cache_misses、Table_open_cache_overflows
这些变量提供的是与打开表缓存的操作相关的统计信息。“命中”和“缺失”分别指的是在缓存里找到和未找到表。“溢出”值的是缓存超出table_open_cache所表示的那个大小限制的次数。此变量是在MySQL 5.6.6里引入的。
Tc_log_max_pages_used
事务协调恢复日志文件所使用的页面的最大数量。
Tc_log_page_size
事务协调恢复日志文件的页面大小。
Tc_log_page_waits
在事务协调恢复日志文件里,两阶段提交操作必须等待空闲页面的次数。
Threads_cached
线程缓存里的线程数量。
Threads_connected
处于打开状态的连接数量。
Threads_created
服务器为处理客户端连接而创建线程的次数。
Threads_running
处于激活状态(非休眠状态)的线程个数。
Uptime
服务器自开始运行以来持续运行的秒数。
Uptime_since_flush_status
自最近一次执行FLUSH STATUS语句以来经过的秒数。


InnoDB状态变量
下面这些状态变量显示的是与InnoDB存储引擎操作有关的信息。其中许多都可以在SHOW ENGINE INNODB STATUS语句的输出里获得,但是SHOW STATUS语句的输出更容易读懂。
Innodb_available_undo_logs
可用的InnoDB恢复日志个数。(系统变量innodb_undo_logs表示的是当前激活的数量。)此变量是在MySQL 5.6.5里引入的。
Innodb_buffer_pool_pages_data
InnoDB缓冲池里包含数据的页面数量。此计数包括那些从没被修改过的干净页面和那些包含修改数据的脏页。
Innodb_buffer_pool_dump_status
缓冲池转储操作的当前状态。此变量是在MySQL 5.6.3里引入的。
Innodb_buffer_pool_load_status
缓冲池加载操作的当前状态。此变量是在MySQL 5.6.3里引入的。
Innodb_buffer_pool_pages_dirty
InnoDB缓冲池里包含修改过的数据的页面数量。
Innodb_buffer_pool_pages_flushed
已执行过刷新请求的InnoDB缓冲池的页面数量。
Innodb_buffer_pool_pages_free
InnoDB缓冲池里的空闲页面数。
Innodb_buffer_pool_pages_latched
InnoDB缓冲池里正在被读取或写入的页面数,或者不能被刷新和释放以再次使用的页面数。只有在构建MySQL时定义了UNIV_DEBUG才会显示。
Innodb_buffer_pool_pages_misc
InnoDB缓冲池里的内部操作所分配到的页面数。
Innodb_buffer_pool_pages_total
InnoDB缓冲池里的页面总数。
Innodb_buffer_pool_read_ahead
InnoDB预读后台线程读入InnoDB缓冲池的页面数。
Innodb_buffer_pool_read_ahead_evicted
被InnoDB预读后台线程读入的、因未被查询使用而驱逐的页面数量。
Innodb_buffer_pool_read_requests
InnoDB发起的逻辑读请求的数量。
Innodb_buffer_pool_reads
因不能从InnoDB缓冲池进行逻辑读取而采取的单页读取操作的数量。
Innodb_buffer_pool_wait_free
当把数据写入将被刷新到磁盘的缓冲池时,InnoDB必须等待的次数。写入操作通常是在后台进行的,但是在InnoDB需要读取页面或者创建新页时,如果没有可用页面,就必须等待。
Innodb_buffer_pool_write_requests
往InnoDB缓冲池写入的次数。
Innodb_data_fsyncs
由InnoDB执行的“同步到磁盘”(sync-to-disk)操作的个数。
Innodb_data_pending_fsyncs
挂起的InnoDB数据“同步到磁盘”操作的个数。
Innodb_data_pending_reads
挂起的InnoDB“数据读取”操作的个数。
Innodb_data_pending_writes
挂起的InnoDB“数据写入”操作的个数。
Innodb_data_read
InnoDB读取的字节数。
Innodb_data_reads
InnoDB“数据读取”操作的个数。
Innodb_data_writes
InnoDB“数据写入”操作的个数。
Innodb_data_written
InnoDB写入的字节数。
Innodb_dblwr_pages_written
写入InnoDB双写缓冲区的页面数。
Innodb_dblwr_writes
写入InnoDB双写缓冲区的次数。
Innodb_have_atomic_builtins
表明MySQL在构建时是否启用了原子操作。
Innodb_log_waits
当把数据写入将被刷新的日志缓冲池时,InnoDB必须等待的次数。
Innodb_log_write_requests
InnoDB日志文件的写请求数。
Innodb_log_writes
InnoDB日志文件的写入次数。
Innodb_num_open_files
InnoDB已打开的文件个数。此变量是在MySQL 5.6.2里引入的。
Innodb_os_log_fsyncs
InnoDB日志文件“同步到磁盘”操作的个数。
Innodb_os_log_pending_fsyncs
挂起的InnoDB日志文件“同步到磁盘”操作的个数。
Innodb_os_log_pending_writes
挂起的InnoDB日志文件写入操作的个数。
Innodb_os_log_written
写入InnoDB日志文件的字节数。
Innodb_page_size
InnoDB所使用的内编译页面大小。通过它,可以把一个以页为单位的测量值转换为以字节为单位的值。默认大小为16KB。
Innodb_pages_created
InnoDB创建的页数。
Innodb_pages_read
InnoDB读取的页数。
Innodb_pages_written
InnoDB写入的页数。
Innodb_row_lock_current_waits
InnoDB正在等待获得的行锁个数。
Innodb_row_lock_time
获得InnoDB行锁所花费的总时间(单位为毫秒)。
Innodb_row_lock_time_avg
获得一个InnoDB行锁所需要花费的平均时间(单位为毫秒)。
Innodb_row_lock_time_max
获得InnoDB行锁所需要花费的最大时间(单位为毫秒)。
Innodb_row_lock_waits
InnoDB为获得行锁而等待的时间。
Innodb_rows_deleted
从InnoDB表删除的行数。
Innodb_rows_inserted
插入InnoDB表的行数。
Innodb_rows_read
从InnoDB表读取的行数。
Innodb_wors_updated
在InnoDB表里更新的行数。
Innodb_truncated_status_writes
SHOW ENGINE INNODB STATUS的输出内容被截断了多少次。此变量是在MySQL 5.5.7里引入的。


查询缓存状态变量
下面这些状态变量显示的是与查询缓存操作有关的信息。
Qcache_free_blocks
查询缓存里的空闲内存块数量。
Qcache_free_memory
查询缓存里的空闲内存总量。
Qcache_hits
保存在缓存里的满足查询请求的查询数量。
Qcache_inserts
在查询缓存里注册过的查询数量。
Qcache_lowmem_prunes
为了给新的查询结果腾出空间而从查询缓存里丢弃的缓存查询结果的数量。
Qcache_not_cached
无法缓存的或者因用户使用了SQL_NO_CACHE关键字而被禁止缓存的查询的数量。
Qcache_queries_in_cache
缓存里注册的查询数量。
Qcache_total_blocks
查询缓存里的内存块数量。


SSL状态变量
以下变量提供的是与SSL管理代码有关的信息。其中的许多变量都可以反映出当前会话的状态;并且当会话实际并非安全连接时,它们将为空白。只有服务器在构建时包含了SSL支持,这些变量才可用。
Ssl_accept_renegotiates
slow_query_log


# (超过2秒的SQL语法记录起来,设短一点来记录除错也是一种方法.)


long_query_time = 2


log-slow-queries=D:\mysql-5.6.23-winx64\log\mysql-slow.log


log= D:\mysql-5.6.23-winx64\log\mysql.log


 


#开启慢查询,新版5.6


slow-query-log=1


long_query_time = 2 #这个没变,2秒


slow-query-log-file=D:\mysql-5.6.23-winx64\log\mysql-slow.log


#慢查询日志文件


general_log=ON
general_log_file=D:\mysql-5.6.23-winx64\log\mysql.log
 
log-error=D:\mysql-5.6.23-winx64\log\error.log
log-bin=bin
#二进制日志路径和名称,排在最后的为日志名
 
expire_log_days=5  
#保留二进制日志天数
net_buffer_length=16384
max_allowed_packet=25165824 
max_binlog_size=200M
 
 
#一下配置,没有全部测试过,不保证正确性
[mysqld] 
port = 3306 
serverid = 1 
socket = /tmp/mysql.sock 
 
back_log=500
#由默认的80修改为500.(每个连接256kb,占用:125M)
#back_log值 指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。也就是说,如果MySql的连接数据达到#max_connections 时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过#back_log,将不被授予连接资 源。


skip-locking
#避免MySQL的外部锁定,减少出错几率增强稳定性。 


skip-name-resolve 
#禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求! 
 
key_buffer_size = 256M 
#key_buffer_size指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。对于内存在4GB左右的服务器该参数可设置为256M或384M。
#注意:该参数值设置的过大反而会是服务器整体效率降低! 
innodb_buffer_pool_size=1024M
#主要针对InnoDB表性能影响最大的一个参数。功能与Key_buffer_size一样。值越大越好,这能保证你在大多数的读取操作时使用的是内存而不是硬盘


max_allowed_packet = 4M 
#导入恢复大的sql时,max_allowed_packet 和 net_buffer_length 这两个参数起着决定性作用,速度差别几百上千倍,但是我没看出来


thread_stack = 256K 
table_cache = 128K 
sort_buffer_size = 6M 
#查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每连接独占,如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。所以,对于内存在4GB左右的服务器推荐设置为6-8M。 


read_buffer_size = 4M 
#读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。 
join_buffer_size = 8M 
#联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享。 


myisam_sort_buffer_size = 64M 
 
tmp_table_size = 256M 
max_connections = 768 
#指定MySQL允许的最大连接进程数。如果在访问论坛时经常出现Too Many Connections的错误提 示,则需要增大该参数值。 
#max_user_connections
#每个用户的最大连接数,设置为0表示不限制。


max_connect_errors = 10000000 
wait_timeout = 10 
#MySQL客户端的数据库连接闲置最大时间值。如果有大量的空闲MySQL链接请求,会白白占用内存资源,可以将值设置小一点


thread_concurrency = 8 
#thread_concurrency应设为CPU核数的2倍,错误设置了thread_concurrency的值, 会导致mysql不能充分利用多cpu(或多核)


skip-networking 
#开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项!否则将无法正常连接! 


table_cache=1024 
#物理内存越大,设置就越大.默认为2402,调到512-1024最佳 


innodb_additional_mem_pool_size=4M 
#默认为2M 


innodb_flush_log_at_trx_commit=1 
#设置为0就是等到innodb_log_buffer_size列队满后再统一储存,默认为1 


innodb_log_buffer_size=2M 
#InnoDB存储引擎的事务日志所使用的缓冲区


innodb_thread_concurrency=8 
#你的服务器CPU有几个就设置为几,建议用默认一般为8 


key_buffer_size=256M 
#默认为218,调到128最佳 


tmp_table_size=64M 
#默认为16M,调到64-256最挂 




read_rnd_buffer_size=16M 
#MySql的随机读缓冲区大小,每个线程独享
sort_buffer_size=32M 
#排序缓存
thread_cache_size=120 
#这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,
#那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能


query_cache_size=32M 
#主要用来缓存MySQL中的ResultSet,也就是一条SQL语句执行的结果集
# 指定MySQL查询缓冲区的大小。可以通过在MySQL控制台观察,如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的 情况;#如果Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓 冲;#Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多。
query_cache_type
#和query_cache_size配合使用,建议设置查询缓存时,详细查询一下用法和注意事项
在服务器模式里开始重新协商的次数。
Ssl_accepts
在服务器模式里开始的SSL/TLS握手的次数。
Ssl_callback_cache_hits
在服务器模式里从外部会话缓存成功地检索到的会话数量。
Ssl_cipher
会话所使用的SSL密码(协议)。(如果不存在有效的密码,则为空。)可以利用此变量来判断会话是否是已加密。
Ssl_cipher_list
可用的SSL密码协议列表。
Ssl_client_connects
在客户端模式里开始的SSL/TLS握手的次数。
Ssl_connect_renegotiates
在客户端模式里开始重新协商的次数。
Ssl_ctx_verify_depth
SSL上下文的验证深度。
Ssl_ctx_verify_mode
SSL上下文的验证模式。
Ssl_default_timeout
默认的SSL会话超时时间。
Ssl_finished_accepts
在服务器模式里成功建立的SSL/TLS会话数。
Ssl_finished_connects
在客户端模式里成功建立的SSL/TLS会话数。
Ssl_server_not_after
SSL证书的最后有效日期。此变量是在MySQL 5.6.3里引入的。
Ssl_server_not_before
SSL证书的开始有效日期。此变量是在MySQL 5.6.3里引入的。
Ssl_session_cache_hits
在会话缓存里找到的SSL会话数。
Ssl_session_cache_misses
在会话缓存里未找到的SSL会话数。
Ssl_session_cache_mode
服务器所使用的SSL缓存类型。
Ssl_session_cache_overflows
因缓存已满而被删除的会话数。
Ssl_session_cache_size
SSL会话缓存里存储的会话数。
Ssl_session_cache_timeouts
已超时的会话数。
Ssl_session_reused
是否有会话再次利用了之前的某个会话。
Ssl_used_session_cache_entries
会话缓存里的会话数。
Ssl_verify_depth
SSL验证深度。
Ssl_verify_mode
SSL验证模式。
Ssl_version
会话的SSL协议版本。


1、配置参数
MySQL有两种途径途径了解其的配置参数,一个是MySQL交互模式下的命令SHOW  VARIABLES,一个使用mysqladmin variables 查询。


MySQL的配置参数分为2种,全局的和局部的。局部的配置变量可以在每次会话中自己更改。


从MySQL 4.0以后开始,在SHOW VARIABLES中显示的参数,大部分可以动态使用SET命令进行更改。


基本参数配置:


参数


说明


bind-address


绑定的IP地址


user


用户


port


端口号


datadir


数据文件目录


basedir


msyql应用程序的目录


socket


socket文件,默认在/tmp目录下,但是建议不要这样设置,/tmp目录是一个大家都愿意破坏的目录


default-table-type


默认表类型


查询的Cache的是从MySQL4.0版本开始提供的功能。相关的参数为:


参数


说明


query_cache_size


查询Cache的尺寸


query_cache_type


查询的Cache类型。


0 OFF,不进行缓冲


1 ON,进行缓冲


2 DEMAND,对SELECT SQL_CACHE开头的查询进行缓冲


query_cache_limit


查询的结果的限制长度,小于这个长度的数据才能Cache


MyISAM的索引参数:key_buffer_size为MyISAM引擎的最关键的优化参数之一。


参数


说明


key_buffer_size


(关键参数),索引块用的缓冲区大小,所有的连接程序线程共用


key_cache_block_size


每一个索引block的大小,默认1024字节,从4.1.1后才出现这个参数,原来都是直接采用1024字节作为Block的长度


InnoDB使用的参数:InnoDB的参数较少,笼统而不细致,内存的管理多由InnoDB引擎自己负责,主要的缓冲就是innodb_buffer_pool_size参数分配的缓冲。这样配置倒是简单了,但没有了细致优化乐趣。


参数


说明


innodb_buffer_pool_size


innodb的缓冲区大小,存放数据和索引,一般设置为机器内存的50%-80%


 (关键参数)


innodb_log_buffer_size


InnoDB日志缓冲区大小


innodb_flush_method


刷新日志的方法


innodb_additional_mem_pool_size


innodb内存池的大小,存放着各种内部使用的数据结构


innodb_data_home_dir


InnoDB数据文件的目录


innodb_data_file_path


数据文件配置


innodb_log_files_in_group


Innodb日志的


innodb_log_file_size


Innodb日志文件的尺寸


innodb_lock_wait_timeout


等待数据锁的超时时间,避免死锁的一种措施


innodb_flush_log_at_trx_commit


日志提交方式 (关键参数)


0每秒写1次日志,将数据刷入磁盘,相当于每秒提交一次事务。


1每次提交事务写日志,同时将刷新相应磁盘,默认参数。


2每提交事务写一次日志,但每隔一秒刷新一次相应的磁盘文件[注]


innodb_force_recovery


在Innodb的自动恢复失败后,从崩溃中强制启动,有1-6个级别,数值越低恢复的方式也保守,默认为4。尽量使用较保守方式恢复。


恢复后要注释删除这一行。


Log的参数:MySQL的日志有6种,查询日志,慢查询日志,变更日志,二进制变更日志,告警日志,错误日志。my.cnf中可以配置日志的前缀和日志参数。日志是监控数据库系统的重要途径。


参数


说明


log


查询日志,记录所有的MySQL的命令操作,在跟踪数据库运行时非常有帮助,但在实际环境中就不要使用了


log-update


变更日志,用文本方式记录所有改变数据的变更操作,


log-bin


二进制变更日志,更加紧凑,使用mysqlbinlog读取,操作,转换


binlog_cache_size


临时存放某次事务的SQL语句缓冲长度


max_binlog_cache_szie


最大的二进制Cache日志缓冲区尺寸


max_binlog_size


最大的二进制日志尺寸


log-error


导致无法启动的错误日志


log-warnings


告警日志


long_query_time


慢查询时间限度,超过这个限度,mysqld认为是一个慢查询


log-queries-not-using-indexes


没有使用索引查询的日志,方便记录长时间访问的查询进行优化


log-slow-queries


慢速的查询日志,


打开文件参数:


参数


说明


table_cache


能够被同时打开的表最大个数,打开一个表使用2个文件描述符


(关键参数)


open_files_limit


mysqld保留的文件描述符号个数,和table_cache和max_connections设置相关,默认为0


设置为0, 系统设置max_connections*5或者max_connections + table_cache*2中的最大值


关于连接通信的参数:


参数


说明


max_connections


最大的连接数


max_connect_errors


同一个地址最大错误连接数,防止攻击用


net_buffer_length


服务器和客户之间通讯的使用的缓冲区长度


max_allowed_packet


服务器和客户之间最大的通信的缓冲区长度


net_read_timeout


网络读取超时


net_write_timeout


网络写入超时


interactive_timeout


交互模式下的没有操作后的超时时间


wait_ timeout


非交互模式的没有操作后的超时时间


每个会话使用的buffer设置,默认使用my.cnf的配置,也可以使用每个会话设置。不要设置的过大。


参数


说明


read_buffer_size


(record_buffer)


对数据表作顺序读取的缓冲大小


read_rnd_buffer_size


在排序后,读取结果数据的缓冲区大小,


sort_buffer_size


(sort_buffer)


用来完成排序操作的线程使用的缓冲区大小


join_buffer_size


全关联操作缓冲区(没有索引而进行关联操作)


write_buffer_size


myisamchk的特有选项


写入缓冲区大小


myisam_sort_buffer_szie


为索引的重新排序操作(比如CREATE INDEX)的分配的缓冲区的长度


对于磁盘缓式写入的一些选项,delay_key_write,flush,flush_time参数可能可以进一步提高MyISAM引擎的性能,但是在服务器Crash的时候,可能会丢失数据,造成表损坏。


MySQL对于插入语句支持一个选项INSERT DELAYED,如果有这个选项,MySQL将这些插入语句放入一个队列,并不马上读入磁盘。delay_insert_XXX的选项都是配置这个功能,


MySQL创建表的时候也有一个选项,DELAY_KEY_WRITE,有这个选项描述的表的键发生改动后,改动可以缓冲在key_buffer中,不立即回写磁盘。


参数


说明


delay_insert_limit


INSERT DELAYED语句选项。(插入语句的描述)


处理INSERT DELAYED语句,MYSQL插入delay_insert_limit条语句后检查是否有查询语句,如有有去查询,如果没有,则继续插入


delay_insert_timeout


在处理完INSERT DELAYED对列的插入数据后,MYSQL等待delay_insert_timeout秒后看看是否有INSERT DELAYED数据,如果有继续,如果没有结束这次操作。


delay_query_size


INSERT DELAYED插入数据对列的长度


max_delayed_threads


处理INSERT DELAYED语句的最大线程个数


delay_key_write


对于使用DELAY_KEY_WRITE选项的创建的表,可以延缓键读写


0N  不延缓所有的键写如操作


OFF延缓有DELAY_KEY_WRITE选项的标的键写入操作


ALL延缓所有的表


flush


是否要在每个操作后立即刷新数据表


flush_time


每隔多少秒,对数据表进行一次刷新。关闭后打开。


 


 


关闭某些选项:关闭某些选项可以加快MySQL的运行速度,这些选项在MySQL SHOW VARIABLES 中显示为have_XXX 的变量。


参数


说明


skip-openssl


关闭mysql服务器对SSL加密的支持


skip-isam


关闭mysql服务器对isam的引擎的支持


skip-bdb


关闭mysql服务器对bdb的引擎的支持


skip-external-locking


不使用外部锁,MySQL的外部锁用于防止其他程序修改正在数据文件,但其在部分系统上不可靠,一般都不使用。(4.03版本前叫skip-locking)


skip-innodb


关闭mysql服务器对innodb的引擎的支持


skip_networking


只能从本地访问数据库


 


 


其他参数:


参数


说明


slow_launch_time


用多于这个时间创建的线程视为一个慢创建线程


binlog_cache_size


临时存放构成每次事务的SQL的缓冲区长度,(全局变量,但是应该影响每一个会话)


max_binlog_cache_size


二进制日志缓冲区的最大长度,其实就是事物的最大长度,默认4G


max_heap_table_size


HEAP表的最大允许长度


max_tmp_tables


临时tables的最大个数


myisam_recover_options


myisam引擎的自动恢复模式


thread_cache_size


线程缓冲区的所能容纳的最大线程个数


tmp_table_size


临时tables的最大尺寸


 


2        运行状态监控
MySQL有两种途径途径了解其的运行状态,一个是MySQL交互模式下的命令SHOW STATUS,一个使用mysqladmin extended-status  。两种方法异曲同工,通过观察其运行状态可以了解我们的参数设置是否合理,是否有要优化的表和数据。


SHOW STATUS显示了MySQL从运行开始到现在为止状态,大部分为一些计数器,使用FLUSH STATUS可以重新对各种状态变量进行计数。


                                                                                                                                                     表19 MySQL的状态计数器


参数


说明


Aborted_clients


因客户没有正确关闭而丢弃的连接数量,没有正确关闭指没有调用mysql_close就退出,连接超时,数据传送中客户端退出


Aborted_connects


试图连接MySQL服务器但没有成功的次数


Connections


试图连接MySQL服务器的尝试次数,(包括成功的和没有成功)


 


 


Com_XXX


执行语句的计数器,比如Com_select变量记录了select语句的个数


 


 


Created_tmp_disk_tables


使用磁盘创建临时表的次数,如果要创建的临时表的尺寸大于tmp_table_size,那么临时表将创建在磁盘上,


Created_tmp_tables


创建临时表的次数


 


 


Delayed_XXX


INSERT DELAYED语句的执行性能参数


 


 


Opened_tables


曾经打开过的数据表总数


Open_tables


当前处于打开的表个数


Open_files


当前处于打开的文件个数


 


 


Bytes_received


从客户收到的字节总数


Bytes_send


发送给客户的字节总数


 


 


Handler_commit


Handler_rollback


事务提交或者回滚的次数


Handler_delete


对数据表删除一条记录的次数


Handler_update


对数据表修改一条记录的次数


Handler_write


对数据表插入一条记录的次数


Handler_read_first


读取索引中第一个索引项的个数


Handler_read_key


根据索引直接读取一行数据的次数,这个数值高表示数据库有较好的检索能力。


Handler_read_next


根据索引读取下个数据行的请求次数. 在一个索引的区间内进行查询( > < ,orderby 这类查询条件)会影响这个计数器。


Handler_read_prev


根据索引读取前个数据行的请求次数.用于一些反序查询。


Handler_read_rnd


通过一个固定位置(应该就是不通过索引)读取一个数据行的次数。这个数值很高表示你的很多查询操作的结果需要排序,可能这些查询操作不能适当使用索引而要检索整个表。


Handler_read_rnd_next


请求从数据文件中读取下一个记录的次数.如果有很多全表的检索这个值将很高. 通常这表示数据表没有合适的索引。


 


 


key_blocks_used


索引缓冲区块中已经被使用的区块大小。Block的尺寸默认是1024字节,4.1.1后可以通过key_cache_block_size参数设置。可以根据key_buffer_size/(1024 or key_cache_block_size) 得到Block总数,然后知道key_buffer的利用率


Key_read_requests


从缓冲读取1个Block的次数


Key_read


从磁盘读取的次数


Key_write_requests


写入索引缓冲区写入一个Block的次数


Key_write


写回磁盘的次数


 


 


Qcache_free_blocks


Qcache没有使用的内存块个数


Qcache_free_memory


Qcache没有使用的内存尺寸


Qcache_hits


查询在Qcache中的命中次数,和Com_select比较,就可以知道Qache的大约命中率是多少。


Qcache_inserts


加入Cache中的查询个数


Qcache_lowmem_prunes


由于Qcache不够用,造成替换出Qcache的查询个数


Qcache_not_cached


没有能Cache的查询个数


 


 


Slow_queries


慢查询的次数,如果一个查询的所用的时间大于long_query_time设置的时间,则计数加1


 


 


Select_XXXX


关联查询的一些状态计数


 


 


Innodb_XXXX


InnoDB的状态技术器,不过只有MySQL 5.02的版本才支持这些计数器。这儿略过


 


 


Table_locks_waited


必须等待后才能完成表锁定的请求个数,如果这个数值和下面数值的比率过大,表示数据库的性能较低


Table_locks_immediate


无需等待,立即完成表锁定的请求个数。


 


 


Thread_connected


现在处在连接打开状态的线程个数


Thread_cached


现在在现场缓冲区的线程个数


Thread_created


到目前为止,创建的线程个数


Thead_running


现在运行的线程个数,不是所有打开的线程都在运行,有些会处于SLEEP状态


InnoDB的状态监控的要在交互模式下使用show innodb status命令。相对的可以利用InnoDB状态参数也过少。


 


1、  innodb_flush_log_at_trx_commit  AND  sync_binlog


innodb_flush_log_at_trx_commit = N:


N=0  – 每隔一秒,把事务日志缓存区的数据写到日志文件中,以及把日志文件的数据刷新到磁盘上;


N=1  – 每个事务提交时候,把事务日志从缓存区写到日志文件中,并且刷新日志文件的数据到磁盘上;


 


N=2  – 每事务提交的时候,把事务日志数据从缓存区写到日志文件中;每隔一秒,刷新一次日志文件,但不一定刷新到磁盘上,而是取决于操作系统的调度;


sync_binlog =  N:


N>0  — 每向二进制日志文件写入N条SQL或N个事务后,则把二进制日志文件的数据刷新到磁盘上;


N=0  — 不主动刷新二进制日志文件的数据到磁盘上,而是由操作系统决定;


推荐配置组合:


N=1,1  — 适合数据安全性要求非常高,而且磁盘IO写能力足够支持业务,比如充值消费系统;


N=1,0  — 适合数据安全性要求高,磁盘IO写能力支持业务不富余,允许备库落后或无复制;


N=2,0或2,m(0<m<100)  — 适合数据安全性有要求,允许丢失一点事务日志,复制架构的延迟也能接受;


N=0,0  — 磁盘IO写能力有限,无复制或允许复制延迟稍微长点能接受,例如:日志性登记业务;


2、 innodb_file_per_table


启用单表空间,减少共享表空间维护成本,减少空闲磁盘空间释放的压力。另外,大数据量情况下 的性能,也会有性能上的提升,为此建议大家使用独立表空间 代替  共享表空间的方式;


3、  key_buffer_size


 key_buffer_size只能缓存MyISAM或类MyISAM引擎的索引数据,而innodb_buffer_pool_size不仅能缓存索引数据,还能缓存元数据,但是对于我们只使用InnoDB引擎的数据库系统而言,此参数值也不能设置过于偏小,因为临时表可能会使用到此键缓存区空间,索引缓存区推荐:64M;


4、  query_cache_type  and query_cache_size


n  query_cache_type=N


N=0  —- 禁用查询缓存的功能;


N=1  —- 启用产讯缓存的功能,缓存所有符合要求的查询结果集,除SELECT SQL_NO_CACHE.., 以及不符合查询缓存设置的结果集外;


N=2  —- 仅仅缓存SELECT SQL_CACHE …子句的查询结果集,除不符合查询缓存设置的结果集外;


n  query_cache_size


查询缓存设置多大才是合理?至少需要从四个维度考虑:


①   查询缓存区对DDL和DML语句的性能影响;


②   查询缓存区的内部维护成本;


③   查询缓存区的命中率及内存使用率等综合考虑


④   业务类型


 


5、  innodb_commit_concurrency


含义:同一时刻,允许多少个线程同时提交InnoDB事务,默认值为0,范围0-1000。


0      — 允许任意数量的事务在同一时间点提交;


N>0  — 允许N个事务在同一时间点提交;


注意事项:


①   mysqld提供服务时,不许把 innodb_commit_concurrency 的值从0改为非0,或非0的值改为0;


 


②   mysqld提供时,允许把 innodb_commit_concurrency 的值N>0改为M,且M>0;


6、 innodb_concurrency_tickets


含义:


同一时刻,能访问InnoDB引擎数据的线程数,默认值为500,范围1-4294967295。


补充说明:当访问InnoDB引擎数据的线程数达到设置的上线,线程将会被放到队列中,等待其他线程释放ticket。


建议:


    MySQL数据库服务最大线程连接数参数max_connections,一般情况下都会设置在128-1024的范围,再结合实际业务可能的最大事务并发度,innodb_concurrency_tickets保持默认值一般情况下足够。


7、 innodb_fast_shutdown  and innodb_force_recovery


innodb_fast_shutdown:


含义:设置innodb引擎关闭的方式,默认值为:1,正常关闭的状态;


0         —  mysqld服务关闭前,先进行数据完全的清理和插入缓冲区的合并操作,若是脏数据


较多或者服务器性能等因素,会导致此过程需要数分钟或者更长时间;


1          — 正常关闭mysqld服务,针对innodb引擎不做任何其他的操作;


2  — 若是mysqld出现崩溃,立即刷事务日志到磁盘上并且冷关闭mysqld服务;没有提交


的事务将会丢失,但是再启动mysqld服务的时候会进行事务回滚恢复;


innodb_force_recovery:


含义:


mysqld服务出现崩溃之后,InnoDB引擎进行回滚的模式,默认值为0,可设置的值0~6;


提示:


   只有在需要从错误状态的数据库进行数据备份时,才建议设置innodb_force_recovery的值大于0。 若是把此参数作为安全选项,也可以把参数的值设置大于0,防止InnoDB引擎的数据变更,设置不同值的作用:


0 — 正常的关闭和启动,不会做任何强迫恢复操作;


1 — 跳过错误页,让mysqld服务继续运行。跳过错误索引记录和存储页,尝试用


SELECT *  INOT OUTFILE ‘../filename’ FROM tablename;方式,完成数据备份;


2 — 阻止InnoDB的主线程运行。清理操作时出现mysqld服务崩溃,则会阻止数据恢复操作;


3 —  恢复的时候,不进行事务回滚;


4 — 阻止INSERT缓冲区的合并操作。不做合并操作,为防止出现mysqld服务崩溃。不计算


表的统计信息


5 — mysqld服务启动的时候不检查回滚日志:InnoDB引擎对待每个不确定的事务就像提交


的事务一样;


MySQL安装成功后有几个默认的配置模板,列表如下:
my-huge.cnf : 用于高端产品服务器,包括1到2GB RAM,主要运行mysql
my-innodb-heavy-4G.ini : 用于只有innodb的安装,最多有4GB RAM,支持大的查询和低流量
my-large.cnf : 用于中等规模的产品服务器,包括大约512M RAM
my-medium.cnf : 用于低端产品服务器,包括很少内存(少于128M)
my-small.cnf : 用于最低设备的服务器,只有一点内存(少于512M)


my.cnf具体的配置说明如下:


basedir = path 使用给定目录作为根目录(安装目录)。
character-sets-dir = path 给出存放着字符集的目录。
datadir = path 从给定目录读取数据库文件。
pid-file = filename 为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统); Init-V脚本需要使用这个文件里的进程ID结束mysqld进程。
socket = filename 为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(仅适用于UNIX/Linux系统; 默认设置一般是/var/lib/mysql/mysql.sock文件)。在Windows环境下,如果MySQL客户与服务器是通过命名管道进行通信 的,–sock选项给出的将是该命名管道的名字(默认设置是MySQL)。
lower_case_table_name = 1/0 新目录和数据表的名字是否只允许使用小写字母; 这个选项在Windows环境下的默认设置是1(只允许使用小写字母)。
mysqld程序:语言设置


character-sets-server = name 新数据库或数据表的默认字符集。为了与MySQL的早期版本保持兼容,这个字符集也可以用–default-character-set选项给出; 但这个选项已经显得有点过时了。
collation-server = name 新数据库或数据表的默认排序方式。
lanuage = name 用指定的语言显示出错信息。
mysqld程序:通信、网络、信息安全


enable-named-pipes 允许Windows 2000/XP环境下的客户和服务器使用命名管道(named pipe)进行通信。这个命名管道的默认名字是MySQL,但可以用–socket选项来改变。
local-infile [=0] 允许/禁止使用LOAD DATA LOCAL语句来处理本地文件。
myisam-recover [=opt1, opt2, ...] 在启动时自动修复所有受损的MyISAM数据表。这个选项的可取值有4种:DEFAULT、BACKUP、QUICK和FORCE; 它们与myisamchk程序的同名选项作用相同。
old-passwords 使用MySQL 3.23和4.0版本中的老算法来加密mysql数据库里的密码(默认使用MySQL 4.1版本开始引入的新加密算法)。
port = n 为MySQL程序指定一个TCP/IP通信端口(通常是3306端口)。
safe-user-create 只有在mysql.user数据库表上拥有INSERT权限的用户才能使用GRANT命令; 这是一种双保险机制(此用户还必须具备GRANT权限才能执行GRANT命令)。
shared-memory 允许使用内存(shared memory)进行通信(仅适用于Windows)。
shared-memory-base-name = name 给共享内存块起一个名字(默认的名字是MySQL)。
skip-grant-tables 不使用mysql数据库里的信息来进行访问控制(警告:这将允许用户任何用户去修改任何数据库)。
skip-host-cache 不使用高速缓存区来存放主机名和IP地址的对应关系。
skip-name-resovle 不把IP地址解析为主机名; 与访问控制(mysql.user数据表)有关的检查全部通过IP地址行进。
skip-networking 只允许通过一个套接字文件(Unix/Linux系统)或通过命名管道(Windows系统)进行本地连接,不允许ICP/IP连接; 这提高了安全性,但阻断了来自网络的外部连接和所有的Java客户程序(Java客户即使在本地连接里也使用TCP/IP)。
user = name mysqld程序在启动后将在给定UNIX/Linux账户下执行; mysqld必须从root账户启动才能在启动后切换到另一个账户下执行; mysqld_safe脚本将默认使用–user=mysql选项来启动mysqld程序。
mysqld程序:内存管理、优化、查询缓存区


bulk_insert_buffer_size = n 为一次插入多条新记录的INSERT命令分配的缓存区长度(默认设置是8M)。
key_buffer_size = n 用来存放索引区块的RMA值(默认设置是8M)。
join_buffer_size = n 在参加JOIN操作的数据列没有索引时为JOIN操作分配的缓存区长度(默认设置是128K)。
max_heap_table_size = n HEAP数据表的最大长度(默认设置是16M); 超过这个长度的HEAP数据表将被存入一个临时文件而不是驻留在内存里。
max_connections = n MySQL服务器同时处理的数据库连接的最大数量(默认设置是100)。
query_cache_limit = n 允许临时存放在查询缓存区里的查询结果的最大长度(默认设置是1M)。
query_cache_size = n 查询缓存区的最大长度(默认设置是0,不开辟查询缓存区)。
query_cache_type = 0/1/2 查询缓存区的工作模式:0, 禁用查询缓存区; 1,启用查询缓存区(默认设置); 2,”按需分配”模式,只响应SELECT SQL_CACHE命令。
read_buffer_size = n 为从数据表顺序读取数据的读操作保留的缓存区的长度(默认设置是128KB); 这个选项的设置值在必要时可以用SQL命令SET SESSION read_buffer_size = n命令加以改变。
read_rnd_buffer_size = n 类似于read_buffer_size选项,但针对的是按某种特定顺序(比如使用了ORDER BY子句的查询)输出的查询结果(默认设置是256K)。
sore_buffer = n 为排序操作分配的缓存区的长度(默认设置是2M); 如果这个缓存区太小,则必须创建一个临时文件来进行排序。
table_cache = n 同时打开的数据表的数量(默认设置是64)。
tmp_table_size = n 临时HEAP数据表的最大长度(默认设置是32M); 超过这个长度的临时数据表将被转换为MyISAM数据表并存入一个临时文件。
mysqld程序:日志


log [= file] 把所有的连接以及所有的SQL命令记入日志(通用查询日志); 如果没有给出file参数,MySQL将在数据库目录里创建一个hostname.log文件作为这种日志文件(hostname是服务器的主机名)。
log-slow-queries [= file] 把执行用时超过long_query_time变量值的查询命令记入日志(慢查询日志); 如果没有给出file参数,MySQL将在数据库目录里创建一个hostname-slow.log文件作为这种日志文件(hostname是服务器主机 名)。
long_query_time = n 慢查询的执行用时上限(默认设置是10s)。
long_queries_not_using_indexs 把慢查询以及执行时没有使用索引的查询命令全都记入日志(其余同–log-slow-queries选项)。
log-bin [= filename] 把对数据进行修改的所有SQL命令(也就是INSERT、UPDATE和DELETE命令)以二进制格式记入日志(二进制变更日志,binary update log)。这种日志的文件名是filename.n或默认的hostname.n,其中n是一个6位数字的整数(日志文件按顺序编号)。
log-bin-index = filename 二进制日志功能的索引文件名。在默认情况下,这个索引文件与二进制日志文件的名字相同,但后缀名是.index而不是.nnnnnn。
max_binlog_size = n 二进制日志文件的最大长度(默认设置是1GB)。在前一个二进制日志文件里的信息量超过这个最大长度之前,MySQL服务器会自动提供一个新的二进制日志文件接续上。
binlog-do-db = dbname 只把给定数 据库里的变化情况记入二进制日志文件,其他数据库里的变化情况不记载。如果需要记载多个数据库里的变化情况,就必须在配置文件使用多个本选项来设置,每个数据库一行。
binlog-ignore-db = dbname 不把给定数据库里的变化情况记入二进制日志文件。
sync_binlog = n 每经过n次日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安全的做法,但效率最低。默认设置是n=0,意思是由操作系统来负责二进制日志文件的同步工作。
log-update [= file] 记载出错情况的日志文件名(出错日志)。这种日志功能无法禁用。如果没有给出file参数,MySQL会使用hostname.err作为种日志文件的名字。
mysqld程序:镜像(主控镜像服务器)


server-id = n 给服务器分配一个独一无二的ID编号; n的取值范围是1~2的32次方启用二进制日志功能。
log-bin = name 启用二进制日志功能。这种日志的文件名是filename.n或默认的hostname.n,其中的n是一个6位数字的整数(日志文件顺序编号)。
binlog-do/ignore-db = dbname 只把给定数据库里的变化情况记入二进制日志文件/不把给定的数据库里的变化记入二进制日志文件。
mysqld程序:镜像(从属镜像服务器)


server-id = n 给服务器分配一个唯一的ID编号
log-slave-updates 启用从属服务器上的日志功能,使这台计算机可以用来构成一个镜像链(A->B->C)。
master-host = hostname 主控服务器的主机名或IP地址。如果从属服务器上存在mater.info文件(镜像关系定义文件),它将忽略此选项。
master-user = replicusername 从属服务器用来连接主控服务器的用户名。如果从属服务器上存在mater.info文件,它将忽略此选项。
master-password = passwd 从属服务器用来连接主控服务器的密码。如果从属服务器上存在mater.info文件,它将忽略此选项。
master-port = n 从属服务器用来连接主控服务器的TCP/IP端口(默认设置是3306端口)。
master-connect-retry = n 如果与主控服务器的连接没有成功,则等待n秒(s)后再进行管理方式(默认设置是60s)。如果从属服务器存在mater.info文件,它将忽略此选项。
master-ssl-xxx = xxx 对主、从服务器之间的SSL通信进行配置。
read-only = 0/1 0: 允许从属服务器独立地执行SQL命令(默认设置); 1: 从属服务器只能执行来自主控服务器的SQL命令。
read-log-purge = 0/1 1: 把处理完的SQL命令立刻从中继日志文件里删除(默认设置); 0: 不把处理完的SQL命令立刻从中继日志文件里删除。
replicate-do-table = dbname.tablename 与–replicate-do-table选项的含义和用法相同,但数据库和数据库表名字里允许出现通配符”%” (例如: test%.%–对名字以”test”开头的所有数据库里的所以数据库表进行镜像处理)。
replicate-do-db = name 只对这个数据库进行镜像处理。
replicate-ignore-table = dbname.tablename 不对这个数据表进行镜像处理。
replicate-wild-ignore-table = dbn.tablen 不对这些数据表进行镜像处理。
replicate-ignore-db = dbname 不对这个数据库进行镜像处理。
replicate-rewrite-db = db1name > db2name 把主控数据库上的db1name数据库镜像处理为从属服务器上的db2name数据库。
report-host = hostname 从属服务器的主机名; 这项信息只与SHOW SLAVE HOSTS命令有关–主控服务器可以用这条命令生成一份从属服务器的名单。
slave-compressed-protocol = 1 主、从服务器使用压缩格式进行通信–如果它们都支持这么做的话。
slave-skip-errors = n1, n2, …或all 即使发生出错代码为n1、n2等的错误,镜像处理工作也继续进行(即不管发生什么错误,镜像处理工作也继续进行)。如果配置得当,从属服务器不应 该在执行 SQL命令时发生错误(在主控服务器上执行出错的SQL命令不会被发送到从属服务器上做镜像处理); 如果不使用slave-skip-errors选项,从属服务器上的镜像工作就可能因为发生错误而中断,中断后需要有人工参与才能继续进行。
mysqld–InnoDB:基本设置、表空间文件


skip-innodb 不加载InnoDB数据表驱动程序–如果用不着InnoDB数据表,可以用这个选项节省一些内存。
innodb-file-per-table 为每一个新数据表创建一个表空间文件而不是把数据表都集中保存在中央表空间里(后者是默认设置)。该选项始见于MySQL 4.1。
innodb-open-file = n InnoDB数据表驱动程序最多可以同时打开的文件数(默认设置是300)。如果使用了innodb-file-per-table选项并且需要同时打开很多数据表的话,这个数字很可能需要加大。
innodb_data_home_dir = p InnoDB主目录,所有与InnoDB数据表有关的目录或文件路径都相对于这个路径。在默认的情况下,这个主目录就是MySQL的数据目录。
innodb_data_file_path = ts 用来容纳InnoDB为数据表的表空间: 可能涉及一个以上的文件; 每一个表空间文件的最大长度都必须以字节(B)、兆字节(MB)或千兆字节(GB)为单位给出; 表空间文件的名字必须以分号隔开; 最后一个表空间文件还可以带一个autoextend属性和一个最大长度(max:n)。例如,ibdata1:1G; ibdata2:1G:autoextend:max:2G的意思是: 表空间文件ibdata1的最大长度是1GB,ibdata2的最大长度也是1G,但允许它扩充到2GB。除文件名外,还可以用硬盘分区的设置名来定义表 空间,此时必须给表空间的最大初始长度值加上newraw关键字做后缀,给表空间的最大扩充长度值加上raw关键字做后缀(例如/dev/hdb1: 20Gnewraw或/dev/hdb1:20Graw); MySQL 4.0及更高版本的默认设置是ibdata1:10M:autoextend。
innodb_autoextend_increment = n 带有autoextend属性的表空间文件每次加大多少兆字节(默认设置是8MB)。这个属性不涉及具体的数据表文件,那些文件的增大速度相对是比较小的。
innodb_lock_wait_timeout = n 如果某个事务在等待n秒(s)后还没有获得所需要的资源,就使用ROLLBACK命令放弃这个事务。这项设置对于发现和处理未能被InnoDB数据表驱动 程序识别出来的死锁条件有着重要的意义。这个选项的默认设置是50s。
innodb_fast_shutdown 0/1 是否以最快的速度关闭InnoDB,默认设置是1,意思是不把缓存在INSERT缓存区的数据写入数据表,那些数据将在MySQL服务器下次启动 时再写入 (这么做没有什么风险,因为INSERT缓存区是表空间的一个组成部分,数据不会丢失)。把这个选项设置为0反面危险,因为在计算机关闭时,InnoDB 驱动程序很可能没有足够的时间完成它的数据同步工作,操作系统也许会在它完成数据同步工作之前强行结束InnoDB,而这会导致数据不完整。
mysqld程序:InnoDB–日志


innodb_log_group_home_dir = p 用来存放InnoDB日志文件的目录路径(如ib_logfile0、ib_logfile1等)。在默认的情况下,InnoDB驱动程序将使用 MySQL数据目录作为自己保存日志文件的位置。
innodb_log_files_in_group = n 使用多少个日志文件(默认设置是2)。InnoDB数据表驱动程序将以轮转方式依次填写这些文件; 当所有的日志文件都写满以后,之后的日志信息将写入第一个日志文件的最大长度(默认设置是5MB)。这个长度必须以MB(兆字节)或GB(千兆字节)为单 位进行设置。
innodb_flush_log_at_trx_commit = 0/1/2 这个选项决定着什么时候把日志信息写入日志文件以及什么时候把这些文件物理地写(术语称为”同步”)到硬盘上。设置值0的意思是每隔一秒写一次日 志并进行 同步,这可以减少硬盘写操作次数,但可能造成数据丢失; 设置值1(设置设置)的意思是在每执行完一条COMMIT命令就写一次日志并进行同步,这可以防止数据丢失,但硬盘写操作可能会很频繁; 设置值2是一般折衷的办法,即每执行完一条COMMIT命令写一次日志,每隔一秒进行一次同步。
innodb_flush_method = x InnoDB日志文件的同步办法(仅适用于UNIX/Linux系统)。这个选项的可取值有两种: fdatasync,用fsync()函数进行同步; O_DSYNC,用O_SYNC()函数进行同步。
innodb_log_archive = 1 启用InnoDB驱动程序的archive(档案)日志功能,把日志信息写入ib_arch_log_n文件。启用这种日志功能在InnoDB与 MySQL一起使用时没有多大意义(启用MySQL服务器的二进制日志功能就足够用了)。
mysqld程序–InnoDB:缓存区的设置和优化


innodb_log_buffer_pool_size = n 为InnoDB数据表及其索引而保留的RAM内存量(默认设置是8MB)。这个参数对速度有着相当大的影响,如果计算机上只运行有 MySQL/InnoDB数据库服务器,就应该把全部内存的80%用于这个用途。
innodb_log_buffer_size = n 事务日志文件写操作缓存区的最大长度(默认设置是1MB)。
innodb_additional_men_pool_size = n 为用于内部管理的各种数据结构分配的缓存区最大长度(默认设置是1MB)。
innodb_file_io_threads = n I/O操作(硬盘写操作)的最大线程个数(默认设置是4)。
innodb_thread_concurrency = n InnoDB驱动程序能够同时使用的最大线程个数(默认设置是8)。
mysqld程序:其它选项


bind-address = ipaddr MySQL服务器的IP地址。如果MySQL服务器所在的计算机有多个IP地址,这个选项将非常重要。
default-storage-engine = type 新数据表的默认数据表类型(默认设置是MyISAM)。这项设置还可以通过–default-table-type选项来设置。
default-timezone = name 为MySQL服务器设置一个地理时区(如果它与本地计算机的地理时区不一样)。
ft_min_word_len = n 全文索引的最小单词长度工。这个选项的默认设置是4,意思是在创建全文索引时不考虑那些由3个或更少的字符构建单词。
Max-allowed-packet = n 客户与服务器之间交换的数据包的最大长度,这个数字至少应该大于客户程序将要处理的最大BLOB块的长度。这个选项的默认设置是1MB。
Sql-mode = model1, mode2, … MySQL将运行在哪一种SQL模式下。这个选项的作用是让MySQL与其他的数据库系统保持最大程度的兼容。这个选项的可取值包括ansi、db2、 oracle、no_zero_date、pipes_as_concat。


6 — 不做事务日志前滚恢复操作;


推荐的参数组合配置:


innodb_fast_shutdown = 1


#若是机房条件较好可设置为0(双路电源、UPS、RAID卡电池和供电系统稳定性)


innodb_force_recovery =0


#至于出问题的时候,设置为何值,要视出错的原因和程度,对数据后续做的操作


8、  innodb_additional_mem_pool_size


含义:开辟一片内存用于缓存InnoDB引擎的数据字典信息和内部数据结构(比如:自适应HASH索引结构);


默认值:build-in版本默认值为:1M;Plugin-innodb版本默认值为:8M;


提示:若是mysqld服务上的表对象数量较多,InnoDB引擎数据量很大,且innodb_buffer_pool_size的值设置 较大,则应该适当地调整innodb_additional_mem_pool_size的值。若是出现缓存区的内存不足,则会直接向操作系统申请内存分配,并且会向MySQL的error log文件写入警告信息;


9、 innodb_buffer_pool_size


含义:开辟一片内存用于缓存InnoDB引擎表的数据和索引;


默认值:历史默认值为:8M,现在版本默认值为:128M;


参数最大值:受限于CPU的架构,支持32位还是支持64位,另外还受限于操作系统为32位还是64位;


提示:


innodb_buffer_pool_size的值设置合适,会节约访问表对象中数据的物理IO。官方手册上建议专用的数据库服务器,可考虑设置为物理内存总量的80%,但是个人建议要看物理服务器的物理内存总量,以及考虑: 是否只使用InnoDB引擎、mysqld内部管理占用的内存、最大线程连接数和临时表等因素,官方提供的80%值作为一个参考,举而个例子方便大家作决定(前提:物理服务器为mysqld服务专用,且只用InnoDB引擎,假设数据量远大于物理内存):


1).内存配置:24G    则 innodb_buffer_pool_size=18G


1).内存配置:32G    则 innodb_buffer_pool_size=24G


出现下列哪些情况,则可以考虑减小innodb_buffer_pool_size的值:


1).出现物理内存的竞争,可能导致操作系统的分页;


2).InnoDB预分配额外的内存给缓冲区和结构管理,当分配的总内存量超过innodb_buffer_pool_size值的10%;


3).地址空间要求必须为连续的,在windows系统有一个严重问题,DLL需要加载在特定的地址空间;


4).初始化缓冲区的时间消耗,与缓冲区的大小成正比。官方提供的数据 Linux X86 64位系统 初始化 innodb_buffer_pool_size=10G 大概需要6秒钟;




10、  lower_case_table_names


   Linux或类Unix平台,对文件名称大小写敏感,也即对数据库、表、存储过程等对象名称大小写敏 感,为减少开发人员的开发成本,为此推荐大家设置该参数使对象名称都自动转换成小写;


11、  max_connect_errors


    max_connect_errors默认值为10,也即mysqld线程没重新启动过,一台物理服务器只要连接 异常中断累计超过10次,就再也无法连接上mysqld服务,为此建议大家设置此值至少大于等于10W; 若异常中断累计超过参数设置的值,有二种解决办法,执行命令:FLUSH HOSTS;或者重新启动mysqld服务;


 


12、  interactive_timeout  and wait_timeout


u  interactive_timeout


       处于交互状态连接的活动被服务器端强制关闭,而等待的时间,单位:秒;


u  wait_timeout


       与服务器端无交互状态的连接,直到被服务器端强制关闭而等待的时间,此参数只对基于TCP/IP或基于 Socket通信协议建立的连接才有效,单位:秒;


u  推荐设置


     interactive_timeout = 172800


     wait_timeout  = 172800


13、  transaction-isolation  and binlog-format 


u  transaction-isolation


      可供设置的值:READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、


SERIALIZABLE,默认的值为: REPEATABLE-READ,事务隔离级别设置的不同,对二进制日志登记格


式影响非常大,详细信息可见文章解读MySQL事务的隔离级别和日志登记模式选择技巧;


u  binlog-format


       复制的模式,可供设置的值:STATEMENT、ROW、MIXED(注:5.0.*只有命令行式复制),


5.1.*版本默认设置:MIXED;


u  推荐配置


①   只读为主的业务应用场景


             transaction-isolation =  read-committed


             binlog-format  = mixed            #5.1.*版本,5.0.*只能设置为 statement


①   非只读为主的业务应用场景


             transaction-isolation = repeatabled-read


             binlog-format  = mixed            #5.1.*版本,5.0.*只能设置为 statement


14、  event_scheduler


事务调度默认是关闭状态,也推荐源码编译的版本可不编译进来,以及实际生产环境保持默认禁用 状态,当真正需要用的时候,可以临时打开,命令:SET GLOBAL event_scheduler=1;


15、  skip_external_locking


外部锁,也即操作系统所实施的锁,只对MyISAM引擎有效,且容易造成死锁发生,为此我们一律禁用;


16、 innodb_adaptive_hash_index


InnoDB引擎会根据数据的访问频繁度,把表的数据逐渐缓到内存,若是一张表的数据大量缓存在 内存中,则使用散列索引(注:Hash Index)会更高效。InnoDB内有Hash Index机制,监控数据的访 问情况,可以自动创建和维护一个Hash Index,以提供访问效率,减少内存的使用;


17、  innodb_max_dirty_pages_pct


    InnoDB主线程直接更新Innodb_buffer_pool_size中存在的数据,并且不实时刷回磁盘,而是等待 相关的处罚事件发生,则允许缓存空间的数据量不实时刷回磁盘的最大百分比。比例设置较小,有利于 减少mysqld服务出现问题的时候恢复时间,缺点则是需要更多的物理I/O,为此我们必须根据业务特点 和可承受范围进行一个折中,一般范围建议设置为5%~90%,像我们SNS游戏行业的写非常厉害,综合 各方面因素,设置为20%;

大数据课程推荐:


“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页
评论

打赏作者

强悍de巨人

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值