MySQL 55 服务器变量详解.docx
《MySQL 55 服务器变量详解.docx》由会员分享,可在线阅读,更多相关《MySQL 55 服务器变量详解.docx(30页珍藏版)》请在冰豆网上搜索。
![MySQL 55 服务器变量详解.docx](https://file1.bdocx.com/fileroot1/2023-1/14/a7e67c38-c07a-460b-9aed-c3ff0cb07f1a/a7e67c38-c07a-460b-9aed-c3ff0cb07f1a1.gif)
MySQL55服务器变量详解
autocommit={0|1}
设定MySQL事务是否自动提交,1表示立即提交,0表示需要显式提交。
作用范围为全局或会话,可用于配置文件中(但在5.5.8之前的版本中不可用于配置文件),属于动态变量。
automatic_sp_privileges={0|1}
设定MySQL服务器是否为存储例程的创建赋予其创建存储例程上的EXECUTE和ALTERROUTINE权限,默认为1(赋予此两个权限给其创建者)。
作用范围为全局。
back_log=#
当MySQL的主线程在短时间内收到大量连接请求时,其会花些时间检测已经有线程并为新请求启动新线程,back_log参数的值即为短时间内到达的请求中有多少可以被接受并等待主MySQL线程进行后续处理。
作用范围为全局,可以用配置文件,非动态变量。
basedir=PATH,-bPATH
用于指定MySQL的安装目录,所有其它的常用相对路径都相对于此处的路径而言。
作用范围为全局,可用于配置文件中,但属于非动态变量。
bind-address=ADDR
指定mysqld服务监听的IP地址,默认为0.0.0.0,表示本机已配置的所有IP地址。
作用范围为全局,可用于配置文件中,但属于非动态变量。
binlog-format={ROW|STATEMENT|MIXED}
指定二进制日志的类型,默认为STATEMENT。
如果设定了二进制日志的格式,却没有启用二进制日志,则MySQL启动时会产生警告日志信息并记录于错误日志中。
作用范围为全局或会话,可用于配置文件,且属于动态变量。
buld_insert_buffer_size
MyISAM引擎使用一个特殊的树状结构的缓存来加速批量插入操作,如INSERT...SELECT,INSERT...VALUES(...),(...),...和LOADDATAINFILE命令完成的插入操作。
对于每个线程来说,此buffer的大小是独立的,其配置的数值单位为字节,有效取值范围为0至“2^CPU字长”次方,默认大小为8MB。
作用范围为全局或会话,可用于配置文件,属动态变量。
chroot=PATH,-rPATH
设定MySQL基于chroot模式工作时的工作目录,在安全问题尤为重要的环境中,这是推荐使用的机制。
但此时,LOADDATAINFILE等命令的工作可能会受到影响。
可用于配置文件。
console
仅用于Windows平台的选项,用于实现将错误日志信息发送至标准输入和错误输出,即使配置了--log-error选项,此功能也一样有效。
concurrent_insert={NEVER|AUTO|ALWAYS}或分别使用{0|1|2}
设定是否允许在MyISAM表上并行执行INSERT和SELECT语句。
作用范围为全局,可用于配置文件,属动态变量。
connect_timeout=#
mysqld服务器端在响应“失败的握手操作”信息给客户端之前所等待的秒数,默认为10秒。
作用范围为全局,可用于配置文件,属动态变量。
core-file
当MySQL进程宕掉时将信息保存为一个core文件,在Linux平台上,core文件通常被保存至当前进程的工作目录中,并命名为core.pid,其文件名后缀pid为当前进程的进程号;对MySQL而言,保存目录为数据文件目录。
datadir=PATH,-hPATH
指定MySQL服务的数据目录。
作用范围为全局,可用于配置文件中,但属于非动态变量。
default_storage_engine={Engine_Name}
设定MySQL服务器的默认存储引擎。
MySQL5.5.5版本之前默认为MyISAM,之后的版本默认为InnoDB。
作用范围为全局,可用于配置文件,属动态变量。
delay-key-write={ON|OFF|ALL}
仅用于MyISAM表,且要求在创建表时使用了DELAY_KEY_WRITE选项。
在启用时,keybuffer不会在每一次索引更新时都予以清空,而是在表关闭时才执行keybuffer清空操作。
OFF表示忽略DELAY_KEY_WRITE,ON表示MySQL接受CREATETABLE时使用的任何DELAY_KEY_WRITE选项,ALL表示所有新打开的表遵循此特性。
error-count
上一条SQL语句导致的错误信息的数目,此为只读变量。
event-scheduler={ON|OFF|DISABLED}
设定MySQL服务器是否启用以及否启动EventScheduler。
OFF表示停止,此为默认值;ON表示启动,其处于运行状态并执行所有的调度事务;DISABLED表示禁用EventScheduler,即其不能切换为启动状态。
作用范围为全局,可用于配置文件,属动态变量。
expire_logs_days={0..99}
设定二进制日志的过期天数,超出此天数的二进制日志文件将被自动删除。
默认为0,表示不启用过期自动删除功能。
如果启用此功能,自动删除工作通常发生在MySQL启动时或FLUSH日志时。
作用范围为全局,可用于配置文件,属动态变量。
external_user=name
在MySQL服务器上基于认证插件进行用户认证时,此插件会把发起连接请求用户当作另一个用户以达到权限检查的目的,这样可以使得外部用户作第二用户的代理用户,并拥有第二用户的所有权限。
当使用MySQL的内部认证机制或没有插件为其设定值时,此变量的值为NULL。
作用范围为会话级别,不可用于配置文件,属非动态变量。
flush={ON|OFF}
设定MySQL服务器是否单独为每个SQL语句执行数据同步(将数据写入磁盘)。
正常情况下,MySQL为每个语句执行数据同步工作,并将后续的同步过程交由操作系统完成。
默认为OFF。
作用范围为全局,可用于配置文件,属动态变量。
flush-time={0..}
为非0值时,MySQL服务器会将所有打开的表每隔flush_time指定的时长进行关闭,使用其释放所有资源并将数据同步至磁盘中。
只有在系统资源极其稀缺的情况下才需要启用此功能。
默认值是0,即为禁用此功能。
作用范围为全局,可用于配置文件,属动态变量。
foreign-key-checks={0|1}
设定是否为InnoDB表查检外键约束,默认为1,即检查。
在不确保按原有顺序重新装载所有InnoDB表时,禁用此功能会避免外键约束的副作用。
general_log={ON|OFF}
设定是否启用查询日志,默认值为取决于在启动mysqld时是否使用了--general_log选项。
如若启用此项,其输出位置则由--log_output选项进行定义,如果log_output的值设定为NONE,即使用启用查询日志,其也不会记录任何日志信息。
作用范围为全局,可用于配置文件,属动态变量。
general_log_file=FILE_NAME
查询日志的日志文件名称,默认为“hostname.log"。
作用范围为全局,可用于配置文件,属动态变量。
group_concat_max_len={4..}
设定GROUP_CONCAT()函数返回值的最大长度,默认为1024。
有效取值范围为4至“2^CPU字长”次方。
作用范围为全局或会话级别,用于配置文件,属动态变量。
have-compress={YES|NO}
zlib压缩库是否能为MySQL服务器所用。
当其值为NO时,COMPRESS()和UNCOMPRESS()函数均不可用。
have_crypt={YES|NO}
crypt()系统调用是否可为MySQL服务器所用。
当其值为NO时,ENCRYPT()函数则不可用。
have_csv={YES|NO}
mysqld支持CSV引擎时为YES,否则为NO。
have_dynamic_loading={YES|NO}
mysqld支持动态加载插件时为YES,否则为NO。
have_geometry={YES|NO}
mysqld支持空间数据类型时为YES,否则为NO。
have_innodb={YES|NO}
mysqld支持InnoDB存储引擎时为YES,否则为NO。
have_openssl={YES|NO}
此为have_ssl选项的别名;
have_ssl={YES|NO}
mysqld支持SSL连接时为YES,否则为NO。
DISABLED表示mysqld编译时启用了对SSL的支持,但在启动mysqld时没能使用正确的ssl-xxx类(如ssl_cert)的选项。
have_partitioning={YES|NO}
mysqld是否支持partitioning,此选项已经基本废弃,且在MySQL-5.6中已经移除,使用SHOWENGINES可获取此相关信息。
have_profiling={YES|NO}
mysqld支持语句性能分析时则为YES,否则为NO。
如果支持profiling功能,则--profiling变量则用于控制是否启动此功能。
have_query_cache={YES|NO}
mysqld支持查询缓存则为YES,否则为NO。
have_rtree_keys={YES|NO}
mysqld支持RTREE索引则为YES,否则为NO。
RTREE索引用于MyISAM表的空间索引。
have_symlink={YES|NO}
mysqld支持符号链接则为YES,否则为NO。
在Unix主机上,此功能对数据目录和索引目录有用。
hostname=STRING
mysqld服务器启动时将主机名称赋值给此变量。
作用范围为全局,属非动态变量。
identity
last_insert_id变量的同义词,其存在的主要目的是为了兼容其它数据库系统。
会话级别的变量。
init_connect=STRING
设定在每个客户端与mysqld建立连接时事先执行的一个或多个(彼此间用分号隔开)SQL语句,但对于具有SUPER权限的用户来说,此功能无效。
例如,在5.5.8之前的MySQL中尚未出现autocommit变量,此时若要为每位用户默认禁用autocommit功能,就可以在mysqld的配置文件中使用init_connect='SETautocommit=0'来实现,当然也可以使用SETGLOBALinit_connect='SETautocommit=0';命令完成。
作用范围为全局级别,可用于配置文件,属动态变量。
init-file=/PATH/TO/SOMEFILE
定义在mysqld启动时使用的初始化文件,此文件每行包含一个单独的SQL语句(不能有注释,不需要且不能使用语句结束符),并会在mysqld启动时逐个执行。
insert_id
为某表中设定了AUTO_INCREMENT的字段执行INSERT或ALTER_TABLE语句时将使用此变量的值。
主要为二进制日志所用。
interactive_timeout=#
mysqld进程等待一个已经建立连接的交互式客户端的后续命令之前所经过的秒数,默认为28800。
作用范围为全局或会话级别,用于配置文件,属动态变量。
join_buffer_size=#
mysqld用于平面索引扫描(plainindexscans)、范围索引扫描或不使用索引的全表扫描时所能够使用的最小缓冲。
正常情况下,添加索引是加快连接执行速度的有效手段,而无法添加索引时,增大join_buffer_size的值可以加快完全连接的执行速度。
两表之间的每个完全连接会使用一个单独的joinbuffer,多表之间的非基于索引的复杂完全连接则有可能使用多个joinbuffer。
将此变量值设定的大过每个匹配的行的大小等并不能带来太多的益处,因此,不应该在全局范围内将此值设定的过大。
建议使用较小的全局设定,只为需要的会话中使用较大连接时设定较大值。
其最大值取决平台,如32bit平台上的最大值为4G。
keep_files_on_create={ON|OFF}
此项默认值为OFF。
创建MyISAM类型的表时,mysqld会在数据目录中为其创建一个.MYD文件和一个.MYI文件,如果数据目录中已经存在一个同名的文件,默认设定为覆盖操作,当设定此变量为OFF时,则会返回一个错误信息。
作用范围为全局或会话级别,可用于配置文件,属动态变量。
key_buffer_size=#
所有线程共享的、用于MyISAM表的索引缓冲空间大小,其也通常被称作keycache。
在32位平台上其最大值为4G,64位平台上允许使用更大的值,但较为有效的值取决于可用物理RAM资源的大小和每进程可用RAM大小的限制。
mysqld启动时会尽可能分配接近于指定大小的RAM空间给key_buffer_size,而非一定是指定大小。
增大此值可以加速读写操作时对索引的处理速度,因此,在一个以MyISAM为主要表类型的应用场景中可以将此值设定到物理内存空间的25%,然而,比此者再大的值则反而可能引起系统性能下降了,比如设定到物理内容间的50%时则可能带来严重的性能问题。
更何况,还需要考虑其它类型存储引擎对内存的需要。
当向表中同时插入多行数据时,使用LOCKTABLES会加速其执行过程。
当然,也可以观察SHOWSTATUS命令输出中的Key_read_requests,Key_reads,Key_write_requests和Key_writes值也判定mysqld的性能表现。
正常情况下,Key_reads/Key_read_requests的比值应该小于0.01,而Key_writes/Key_write_requests的比值通常会接近于1,不过在启用了DELAY_KEY_WRITE选项的场景中,这个比值可能会更小。
key_cache_block_size=#
MyISAM存储引擎的索引存放于“.MYI”文件中,每个“.MYI”文件由文件头和实际的索引数据共同组成。
在“.MYI”的相关概念中,其逻辑上表现为多个IndexBlock,但并非物理结构。
在物理上,索引是以文件块(FileBlock)的形式来存放在磁盘上面的。
在KeyCache中缓存的索引信息是以缓存块(CacheBlock)的形式组织存放的,缓存块是一组相同大小的存储空间,和“.MYI”文件物理存储的Block(FileBlock)类似。
在一条查询语句通过索引检索表数据的时候,首先会检查索引缓存(key_buffer_cache)中是否已经存储了需要的索引信息,如果没有,则会读取“.MYI”文件,将相应的索引数据读入KeyCache中的内存空间中,并存储为缓存块格式。
此时,如果整个KeyCache中已经没有空闲的缓存块空间可以使用的话,mysqld将会通过LRU算法将某些缓存块予以清除。
key_cache_block_size参数则用于设定cacheblock的大小,默认为1024。
作用范围为全局级别,可用于配置文件,属动态变量。
key_cache_division_limit=#
实际上,在MySQL的KeyCache中所使用的LRU算法并不像传统的算法一样仅仅只是通过访问频率以及最后访问时间来通过一个唯一的链表实现,而是将其分成了两部分。
一部分用来存放使用比较频繁的HotCacheLock(HotChain),被称作HotArea,另外一部分则用来存放使用不太频繁的WarmCacheBlock(WarmChain),也被称作WarmArea。
这样做的目的主要是为了保护使用比较频繁的CacheBlock更不容易被换出。
而key_cache_division_limit参数则正是用于告诉MySQL该如何划分整个CacheChain划分为HotChain和WarmChain两部分,参数值为WarmChain占整个Chain的百分比值。
设置范围1~100,系统默认为100,也就是只有WarmChain。
key_cache_age_threshold=#
控制HotArea中的CacheBlock何时该被降级到WarmArea中。
系统默认值为300,最小可以设置为100。
值越小,被降级的可能性越大。
large_files_support={YES|NO}
mysqld是否在编译时的编译选项中指定了支持大文件。
其作用域为全局,为非动态变量。
large_pages={YES|NO}
Linux平台上专用的参数,用于设定mysqld是否支持使用大内存页。
使用大内存而可以提高TLB的命中率,进行提高系统性能。
其作用域为全局,可以用于配置文件中,为非动态变量。
large_page_size=#
Linux平台上专用的参数,用于设定mysqld使用的大内存页的大小,一般为4MB,在其它平台上此参数的值为0,即为禁用。
其作用域为全局,为非动态变量。
last_insert_id
此参数的值由LAST_INSERT_ID()函数返回,在更新表的语句中使用LAST_INSERT_ID()时其对应的确切值会存储于二进制日志中。
lc_messages=STRING
错误信息的区域设定(即语言区域),mysqld将此值转换为语言名称,并结合lc_messages_dir参数指定的路径中的区域相关的语言文件来返回错误信息。
作用范围为全局或会话级别,可用于配置文件,属动态变量。
lc_messages_dir=/PATH/TO/SOME_DIR
错误信息的存储目录,通过与lc_messages参数设定的语言区域来返回错误信息。
作用范围为全局或会话级别,可用于配置文件,属动态变量。
lc_time_names=STRING
设定基于语言区域来显示日、月及其简写方式等日期信息的语言区域,其值如en_US等,但与系统的locale无关。
此设定将影响DATE_FORMAT(),DAYNAME()和MONTHNAME()函数的输出结果。
作用范围为全局或会话级别,属动态变量。
local_infile={YES|NO}
设定mysqld是否支持使用LOADDATAINFILE语句。
默认为ON。
作用范围为全局级别,属动态变量。
local_wait_timeout=#
以秒为单位设定所有SQL语句等待获取元数据锁(metadatalock)的超时时长,默认为31536000(1年),有效取值范围为0-31536000。
其影响的SQL语句包括用于表、视图、存储过程和存储函数的DML和DDL语句,以及LOCKTABLES、FLUSHTABLESWITHREADLOCK和HANDLER语句等。
但其作用的所有对象不包括mysql数据库中的系统表及用于记录日志的表上的GRANT或REVOKE语句,但包括SELECT或UPDATE语句。
另外,此超时时长分别应用于每个元数据锁,因此,一个语句可能会持有多个元数据锁,那么其最后的生效超时时长有可能会长时这个设定值。
作用范围为全局或会话级别,可用于配置文件,属动态变量。
locked_in_memory={YES|NO}
mysqld是否使用--memlock选项锁定在了内存中。
作用范围为全局级别,属非动态变量。
log={YES|NO}
是否启用记录所有语句的日志信息于一般查询日志(generalquerylog)中,默认通常为OFF。
MySQL5.6已经弃用此选项。
log-bin={YES|NO}
是否启用二进制日志,如果为mysqld设定了--log-bin选项,则其值为ON,否则则为OFF。
其仅用于显示是否启用了二进制日志,并不反应log-bin的设定值。
作用范围为全局级别,属非动态变量。
log_bin_trust_function_creators={TRUE|FALSE}
此参数仅在启用二进制日志时有效,用于控制创建存储函数时如果会导致不安全的事件记录二进制日志条件下是否禁止创建存储函数。
默认值为0,表示除非用户除了CREATEROUTING或ALTERROUTINE权限外还有SUPER权限,否则将禁止创建或修改存储函数,同时,还要求在创建函数时必需为之使用DETERMINISTIC属性,再不然就是附带READSSQLDATA或NOSQL属性。
设置其值为1时则不启用这些限制。
作用范围为全局级别,可用于配置文件,属动态变量。
log_error=/PATH/TO/ERROR_LOG_FILENAME
定义错误日志文件。
作用范围为全局或会话级别,可用于配置文件,属非动态变量。
log_output={TABLE|FILE|NONE}
定义一般查询日志和慢查询日志的保存方式,可以是TABLE、FILE、NONE,也可以是TABLE及FILE的组合(用逗号隔开),默认为TABLE。
如果组合中出现了NONE,那么其它设定都将失效,同时,无论是否启用日志功能,也不会记录任何相关的日志信息。
作用范围为全局级别,可用于配置文件,属动态变量。
log_query_not_using_indexes={ON|OFF}
设定是否将没有使用索引的查询操作记录到慢查询日志。
作用范围为全局级别,可用于配置文件,属动态变量。
log_slave_updates
用于设定复制场景中的从服务器是否将从主服务器收到的更新操作记录进本机的二进制日志中。
本参数设定的生效需要在从服务器上启用二进制日志功能。
log_slow_queries={YES|NO}
是否记录慢查询日志。
慢查询是指查询的执行时间超出long_query_time参数所设定时长的事件。
MySQL5.6将此参数修改为了slow_query_log。
作用范围为全局级别,可用于配置文件,属动态变量。
log_warnings=#
设定是否将警告信息记录进错误日志。
默认设定为1,表示启用;可以将其设置为0以禁用;而其值为大于1的数值时表示将新发起连接时产生的“失败的连接”和“拒绝访问”类的错误信息也记录进错误日志。
long_query_time=#
设定区别慢查询与一般查询的语句执行时间长度。
这里的语句执行时长为实际的执行时间,而非在CPU上的执行时长,因此,负载较重的服务器上更容易产生慢查询。
其最小值为0,默认值为10,单位是秒钟。
它也支持毫秒级的解析度。
作用范围为全局或会话级别,可用于配置文件,属动态变量。
low_priority_updates={TRUE|FALSE}
设定是否降低更新操作的优先级,仅对只支持表级别锁的存储引擎有效,如MyISAM、MEMORY或MERGE。
其值为1则表示所有的INSERT、UPDATE、DELETE或LOCKTABLEWRITE语句只能在没有等待执行的SELECT或LOCKTABLEREAD语句时才能执行。
作用范围为全局或会话级别,可用于配置文件,属动态变量。
lower_case_file_system={ON|OFF}
用于描述数据目录所在的文件系统是否区分文件名称字符大小写,OFF表示区分大小写,ON表示不区分大小写。
此变量是只读的,其是否区分大小写取决于文件系统。
lower_case_table_name={0|1|2}