系统变量提供的是各种与服务器配置和功能有关的信息。大部分的系统变量都可以在服务器启动时进行设置。在运行时,每一个系统变量都拥有一个全局值或会话值,或者同时拥有这两个值。许多系统变量都是动态的,也就是说,可以在服务器郑州运行时修改它们的值。这些类型的信息都会在每个变量的描述里(与变量名同处一行)指明。
对于那些可以在服务器启动时设置的变量,看到的是“自动”一词,后面紧跟着“直接设置”或某个选项。“直接设置”的意思是:可以在命令行上或者在选项文件里,使用与变量名同名的选项直接设置该变量。否则,在“启动”的后面需要紧跟用来设置变量的那个选项。
如果需要指明某个变量的作用范围,则会看到“启动”一词,而后面紧跟着的是“全局”或“会话”(或者两者皆有),用以表明该变量是否拥有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语句时,如何处理数据库名和表明所对应的目录名和文件名。当执行这些语句时,它还控制着服务器会如何进行名字比较。下表列出了各种可能的取值。
取值 含义
0 按照CREATE DATABASE和CREATE TABLE语句里给出的名字来创建磁盘文件。名字的比较会区分大小写。在文件名区分大小写的系统里,它是默认设置。
1 在创建数据库和表时,名字强制转换为小写形式。名字的比较不区分大小写
2 以小写形式保存名字,但是在进行比较时不区分大小写。也就是说,创建的文件名与那些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时,它指的是查询缓存的操作模式。下表列出了各种可能的取值。
模式 含义
0 不缓存查询结果,也不检索缓存结果
1 将可缓存的查询缓存起来,那些以SELECT SQL_NO_CACHE作为开头的查询除外
2 根据需要只将那些以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日志的刷新行为。下表列出了各种可能的取值。
取值 含义
0 每秒写入一次日志,并刷新到磁盘一次
1 每提交一次写入一次日志,并刷新到磁盘一次
2 每提交一次写入一次日志,但是每秒刷新到磁盘一次
只有在将此变量设置为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
在服务器模式里开始重新协商的次数。
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协议版本。