5.3. mysqld:MySQL服务器
- 5.3.1. mysqld命令行选项
- 5.3.2. SQL服务器模式
- 5.3.3. 服务器系统变量
- 5.3.4. 服务器状态变量
·服务器支持的启动选项
·如何设置服务器SQL模式
·服务器系统变量
·服务器状态变量
5.3.1. mysqld命令行选项
当启动mysqld服务器时,你可以使用4.3节,“指定程序选项”中描述的方法指定程序选项。最常用的方法是在选项文件中或在命令行提供选项。但是,在大多数情况下,希望服务器每次运行时使用相同的选项。最好的方法是确保将它们列在选项文件中。参见4.3.2节,“使用选项文件”。
mysqld从[mysqld]和[server]组读取选项。mysqld_safe从[mysqld]、[server]、[mysqld_safe]和[safe_mysqld]组读取选项。mysql.server从 [mysqld]和[mysql.server]组读取选项。嵌入式MySQL服务器通常从[server]、[embedded]和[xxxxx_SERVER]组读取选项,其中xxxxx是服务器嵌入的应用程序名。
mysqld接受许多命令行选项。执行mysqld --help可以简单列出来。要想看全部列表列,使用命令mysqld --verbose --help。
下面列出了一些最常用的服务器选项。其它的选项在其它地方描述:
·影响安全的选项:参见5.6.3节,“Mysqld安全相关启动选项”。
·SSL-相关选项:参见5.8.7.6节,“SSL命令行选项”。
·二进制日志控制选项:参见5.11.3节,“二进制日志”。
·复制相关选项:参见6.8节,“复制启动选项”。
·特定存储引擎相关选项:参见15.1.1节,“MyISAM启动选项”、15.5.3节,“BDB启动选项”和15.2.4节,“InnoDB启动选项”。
你还可以将变量名作为一个选项,设置服务器系统变量的值,如本节后面所述。
·--help,-?
显示简短的帮助消息并退出。使用--verbose和--help选项来看全部内容。
·--allow-suspicious-udfs
该选项控制是否用户定义的函数只有一个xxx符,用作可载入的主函数。默认情况下,该选项被关闭,只有至少有一个附属符的UDF 可以载入。这样可以防止从未包含合法UDF的共享文件装载函数。参见27.2.3.6节,“用户定义函数安全注意事项”。
·--ansi
使用标准(ANSI)SQL语法代替MySQL语法。参见1.8.3节,“在ANSI模式下运行MySQL”。使用--sql-mode选项可以更精确控制服务器SQL模式。
·--basedir=path, -bpath
MySQL安装目录的路径。通常所有路径根据该路径来解析。
·--bind-address=IP
待绑定的IP地址。
·--bootstrap
mysql_install_db脚本使用该选项来创建MySQL授权表,不需要启动MySQL服务器。
·--console
将错误日志消息写入stderr和stdout,即使指定了--log-error。在Windows中,如果使用该选项,mysqld不关闭控制台窗口。
·--character-sets-dir=path
字符集安装的目录。参见5.10.1节,“数据和排序用字符集”。
·--chroot=path
通过chroot()系统调用在启动过程中将mysqld服务器放入一个封闭环境中。这是推荐的一个安全措施。请注意使用该选项可以 限制LOAD DATA INFILE和SELECT ... INTO OUTFILE。
·--character-set-server=charset
使用charset作为默认服务器字符集。参见5.10.1节,“数据和排序用字符集”。
·--core-file
如果mysqld终止,写内核文件。在某些系统中,你还必须为mysqld_safe指定--core-file-size选项。参见5.1.3节,“mysqld_safe:MySQL服务器启动脚本”。请注意对于一些系统,例如Solaris,如果你使用--user选项不会获得内核文件。
·--collation-server=collation
使用collation作为默认服务器校对规则。参见5.10.1节,“数据和排序用字符集”。
·--datadir=path, -hpath
数据目录的路径。
·--debug[=debug_options],-# [debug_options]
如果MySQL配置了--with-debug,你可以使用该选项来获得一个跟踪文件,跟踪mysqld正进行的操作。debug_options字符串通常为'd:t:o,file_name'。参见E.1.2节,“创建跟踪文件”。
·(DEPRECATED)--default-character-set=charset
使用char设置作为默认字符集。由于--character-set-server,反对使用该选项。参见5.10.1节,“数据和排序用字符集”。
·--default-collation=collation
使用collation作为默认校对规则。由于--collation-server,反对使用该选项。参见5.10.1节,“数据和排序用字符集”。
·--default-storage-engine=type
该选项为--default-table-type的同义词。
·--default-table-type=type
设置表的默认类型。参见第15章:存储引擎和表类型。
·--default-time-zone=type
设置默认服务器时区。该选项设置全局time_zone系统变量。如果未给出该选项,默认时区与系统时区相同(用system_time_zone系统变量值给定)。
·--delay-key-write[= OFF | ON | ALL]
如何使用DELAYED KEYS选项。键写入延迟会造成再次写MyISAM表时键缓冲区不能被清空。OFF禁用延迟的键写入。ON启用用DELAYED KEYS选项创建的表的延迟的键写入。ALL延迟所有MyISAM表的键写入。参见7.5.2节,“调节服务器参数”。参见15.1.1节,“MyISAM启动选项”。
注释:如果你将该变量设置为ALL,你不应从另一个正使用MyISAM表的程序中使用MyISAM表(例如从另一个MySQL服务器或用myisamchk)。这样操作会导致索引破坏。
·--des-key-file=file_name
从该文件读DES_ENCRYPT()和DES_DECRYPT()使用的默认键。
·--enable-named-pipe
启用命名管道支持。该选项只适用Windows NT、2000、XP和2003系统,并且只适用支持命名管道连接的mysqld-nt和mysqld-max-nt服务器。
·--exit-info[=flags],-T [flags]
这是不同标志的一个位掩码,你可以用来调试mysqld服务器。不要使用该选项,除非你确切知道它在做什么!
·--external-locking
启用系统锁定。请注意如果你在lockd不能完全工作的系统上使用该选项(例如在Linux中),mysqld容易死锁。该选项以前叫--enable-locking。
注释:如果你在许多MySQL进程中使用该选项来更新MyISAM表,你必须确保满足下述条件:
o使用正被另一个进程更新的表的查询的缓存不可使用。
o不应在共享表中使用--delay-key-write=ALL或DELAY_KEY_WRITE=1。
最简单的方法是结合使用--external-locking和--delay-key-write=OFF --query-cache-size=0。
(默认不能实现,因为在许多设置中,结合使用上述选项很有用)。
·--flush
执行SQL语句后向硬盘上清空更改。一般情况执行SQL语句后 MySQL向硬盘写入所有更改,让操作系统处理与硬盘的同步。参见A.4.2节,“如果MySQL依然崩溃,应作些什么”。
·--init-file=file
启动时从该文件读SQL语句。每个语句必须在同一行中并且不应包括注释。
·--language=lang_name, -L lang_name
用给定语言给出客户端错误消息。lang_name可以为语言名或语言文件安装目录的全路径名。参见5.10.2节,“设置错误消息语言”。
·--large-pages
一些硬件/操作系统架构支持大于默认值(通常4 KB)的内存页。实际支持取决于使用的硬件和OS。大量访问内存的应用程序通过使用较大的页,降低了Translation Lookaside Buffer (TLB)损失,可以改善性能。
目前,MySQL只在Linux中支持大页面(在Linux中被称作HugeTLB)。我们已经计划将该支持扩展到FreeBSD、Solaris和其它可能的平台。
在Linux中可以使用大页面前,需要配置HugeTLB内存池。参考Linux内核源码中的hugetlbpage.txt文件。
默认情况下该选项被禁用。
·---log[=file],-l [file]
日志连接和对文件的查询。参见5.11.2节,“通用查询日志”。如果你不指定文件名,MySQL使用host_name.log作为文件名。
·--log-bin=[file]
二进制日志文件。将更改数据的所有查询记入该文件。用于备份和复制。参见5.11.3节,“二进制日志”。建议指定一个文件名(原因参见A.8.1节,“MySQL中的打开事宜”),否则MySQL使用host_name-bin作为日志文件基本名。
·--log-bin-index[=file]
二进制日志文件名的索引文件。参见5.11.3节,“二进制日志”。如果你不指定文件名,并且如果你没有在--log-bin中指定,MySQL使用host_name-bin.index作为文件名。
·--log-bin-trust-routine-creators[={0|1}]
没有参数或参数为1,该选项将系统变量log_bin_trust_routine_creators设置为1。为参数 0时,该选项将系统变量设置为0。log_bin_trust_routine_creators影响MySQL如何对保存的程序的创建强加限制。参见20.4节,“存储子程序和触发程序的二进制日志功能”。
·--log-error[=file]
该文件的日志错误和启动消息。参见5.11.1节,“错误日志”。如果你不指定文件名,MySQL使用host_name.err作为文件名。如果文件名没有扩展名,则加上.err扩展名。
·--log-isam[=file]
将所有MyISAM更改记入该文件(只有调试MyISAM时才使用)。
·(DEPRECATED)--log-long-format
记录激活的更新日志、二进制更新日志、和慢查询日志的大量信息。例如,所有查询的用户名和时间戳将记录下来。不赞成选用该选项,因为它现在代表默认记录行为。(参见--log-short-format描述)。--log-queries-not-using-indexes选项适合将未使用索引的查询记录到慢查询日志中。
·--log-queries-not-using-indexes
如果你结合--log-slow-queries使用该选项,未使用索引的查询也被记录到慢查询日志中。参见5.11.4节,“慢速查询日志”。
·--log-short-format
记录激活的更新日志、二进制更新日志、和慢查询日志的少量信息。例如,用户名和时间戳不记录下来。
·---log-slow-admin-statements
将慢管理语句例如OPTIMIZE TABLE、ANALYZE TABLE和ALTER TABLE记入慢查询日志。
·--log-slow-queries[=file]
将所有执行时间超过long_query_time秒的查询记入该文件。参见5.11.4节,“慢速查询日志”。详细信息参见--log-long-format和--log-short-format选项描述。
·--log-warnings,-W
将警告例如Aborted connection...打印到错误日志。建议启用该选项,例如,如果你使用复制 (你可以得到关于所发生事情的详细信息,例如关于网络故障和重新连接的消息)。默认情况下启用该选项;要想禁用它,使用--skip-log-warnings。中断的连接不会记入错误日志,除非值大于1。参见A.2.10节,“通信错误和失效连接”。
·--low-priority-updates
表修改(INSERT,REPLACE,DELETE,UPDATE)比选择的优先级要低。也可以通过{INSERT | REPLACE | DELETE | UPDATE} LOW_PRIORITY ...来降低某个查询的优先级来实现,或通过SET LOW_PRIORITY_UPDATES=1来更改一个线程的优先级。参见7.3.2节,“表锁定事宜”。
· --memlock
将mysqld进程锁定在内存中。在支持mlockall()系统调用的系统上有效,例如Solaris。如果操作系统使mysqld在硬盘上交换时出现问题,可以为你提供帮助。请注意使用该选项时需要以root运行服务器,但从安全考虑并不是一个好注意。
·--myisam-recover [=option[,option...]]]
将存储引擎MyISAM设置为恢复模式。该选项值是DEFAULT、BACKUP、FORCE或QUICK值的任何组合。如果你指定多个值,用逗号间隔开。你还可以使用""值来禁用该选项。使用如果该选项,当mysqld打开MyISAM表时,检查是否表标记为崩溃或没有正确关闭。(只有用--skip-external-lockingare运行时,最后的选项才工作)。如果是这种情况,mysqld则检查 表。如果表被破坏,mysqld试图维护它。
下面的选项影响维护工作:
选项 | 描述 |
DEFAULT | 与没有使用--myisam-recover选项相同。 |
BACKUP | 如果在恢复过程中,数据文件被更改了,将tbl_name.MYD文件备份为tbl_name-datetime.BAK。 |
FORCE | 即使.MYD文件将丢掉多个行也进行恢复。 |
QUICK | 如果没有删除块,不要检查表中的行。 |
在表自动修复前,MySQL错误日志添加一条注解。如果你不想用户干涉干涉大多数问题,你应使用BACKUP,FORCE选项。该选项强制维护表,即使一些行将会被删除也不例外,但它保持旧的数据文件做为备份,以便你可以在后来进行检查。
·--ndb-connectstring=connect_string
当使用NDB存储引擎时,可以指出通过设置连接字符串选项来分发群集配置的管理服务器。相关语法参见17.4.4.2节,“MySQL簇连接字符串”。
·--ndbcluster
如果二进制支持NDB CLUSTER存储引擎,使用该选项可以代替禁用MySQL Cluster支持的默认设置。参见第17章:MySQL簇。
·--old-passwords
强制服务器为新密码生成短(4.1前)密码哈希。如果服务器必须支持旧客户端程序,为保证兼容性这很有用。参见5.7.9节,“MySQL 4.1中的密码哈希处理”。
·--one-thread
只使用一个线程(用于在Linux中调试)。只有服务器启用了调试,该选项才可用。参见E.1节,“调试MySQL服务器”。
·--open-files-limit=count
用来更改mysqld文件描述符的数量。如果没有设置或设置为0,则mysqld通过setrlimit()使用该值来保存文件描述符。如果该值为0,则mysqld保存max_connections*5或max_connections + table_cache*2(取较大者)个文件。如果mysqld给出你错误"打开的文件太多。",你应试试增加该值。
·--pid-file=path
mysqld_safe使用的进程ID文件的路径。
·--port=port_num, -Pport_num
帧听TCP/IP连接时使用的端口号。
·--safe-mode
跳过一些优化阶段。
·(DEPRECATED)--safe-show-database
参见5.7.3节,“MySQL提供的权限”。
·--safe-user-create
启用后如果用户没有mysql.user表或表中列的INSERT权限,则用户不能用GRANT语句创建新用户。
·--secure-auth
不允许使用旧(4.1之前)密码的账户进行鉴定。
·--shared-memory
启用本地客户端的共享内存连接。该选项只用于Windows。
·--shared-memory-base-name=name
共享内存连接名。该选项只用于Windows。
·--skip-bdb
禁用BDB存储引擎。这样可以节省内存,并可能加速某些操作。如果你需要BDB表则不要使用该选项。
·--skip-concurrent-insert
关闭在同一时间在MyISAM表中选择和插入的能力。(只有你发现缺陷时才使用该选项)。
·--skip-external-locking
不要使用系统锁定。要想使用myisamchk,你必须关闭服务器。(参见1.4.3节,“MySQL稳定性”)。 要避免该需求,使用MySQL Monitor中的CHECK TABLE和REPAIR TABLE来检查并维护MyISAM表。
·--skip-grant-tables
该选项使服务器不使用权限系统。该权限允许访问服务器的用户不受限制地访问所有数据库。你可以从系统外壳命令行执行mysqladmin flush-privileges或mysqladmin reload命令,或执行MySQL FLUSH PRIVILEGES语句让运行的服务器重新开始使用授权表。
·--skip-host-cache
为了更快地在名称-IP之间进行解析,不要使用内部主机名缓存。相反,每次客户端连接时查询DNS服务器。参见7.5.6节,“MySQL如何使用DNS”。
·--skip-innodb
禁用InnoDB存储引擎。这样可以节省内存,并可能加速某些操作。如果你需要BDB表则不要使用该选项。
·--skip-name-resolve
不要解析正检查客户端连接的主机名。只使用IP号。如果你使用该项,授权表中的所有Host列值必须为IP号或localhost。参见7.5.6节,“MySQL如何使用DNS”。
·--skip-ndbcluster
禁用NDB CLUSTER存储引擎。这是支持NDB CLUSTER存储引擎的二进制的默认设置,说明只有用--ndbcluster选项显式覆盖--skip-ndbcluster选项时,系统才为该存储引擎分配内存和其它资源。使用示例参见17.4.3节,“MySQL簇的快速测试设置”。
·--skip-networking
不帧听TCP/IP连接。必须通过命名管道或共享内存(在Windows中)或Unix套接字文件(在Unix中)完成mysqld的相互操作。对于只允许本地客户端的系统,大力推荐该选项。参见7.5.6节,“MySQL如何使用DNS”。
·--standalone
只适合基于Windows-NT的系统;指导MySQL服务器不做为服务来运行。
·--symbolic-links,--skip-symbolic-links
启用或禁用符号链接支持。在Windows和Unix中,该选项的作用是不同的:
o在Windows中,启用符号链接,你可以通过创建包含实际目录路径的directory.sym文件来建立数据库目录的符号链接。参见7.6.1.3节,“在Windows平台上使用关于数据库的符号链接”。
在Unix中,启用符号链接表示你可以用CREATE TABLE语句的INDEX DIRECTORY或DATA DIRECTORY选项将MyISAM索引文件或数据文件链接到另一个目录。如果你删除或重新命名表,符号链接所指的文件也被删除或重新命名。参见13.1.5节,“CREATE TABLE语法”。
·--skip-safemalloc
如果MySQL配置了--with-debug=full,所有MySQL程序在内存分配和释放时检查内存是否溢出。检查很慢,因此如果你不需要你可以用--skip-safemalloc选项来避免。
·--skip-show-database
使用该选项,只允许具有SHOW DATABASES权限的用户执行SHOW DATABASES语句,该语句显示所有数据库名。不使用该选项,允许所有用户执行SHOW DATABASES,但只向具有SHOW DATABASES权限或部分数据库权限的用户显示每个数据库名。请注意全局权限为数据库的一种权限。
·--skip-stack-trace
不跟踪写堆栈。当调试运行mysqld时该选项有用。在一些系统中,你还必须使用该选项来获得内核文件。参见E.1节,“调试MySQL服务器”。
·--skip-thread-priority
在快速响应中禁用线程优先级。
·--socket=path
在Unix中,该选项指定用于本地连接的Unix套接字文件。默认值是/tmp/mysql.sock。在Windows中,该选项指定本地连接所使用的管道名。默认值是MySQL。
·--sql-mode=value[,value[,value...]]
将MySQL设置为SQL模式。参见5.3.2节,“SQL服务器模式”。
·--temp-pool
该选项使服务器创建的大多数临时文件使用一系列文件名,而不是每个新文件使用唯一的文件名。这样解决了在Linux内核中用 不同的名创建许多新文件的问题。在以前,Linux似乎“泄漏”内存,因为它被直接分配到directory entry缓存而不是硬盘缓存。
·--transaction-isolation=level
设置默认事务隔离级别,可以READ-UNCOMMITTED、READ-COMMITTEE、REPEATABLE-READ或SERIALIZABLE。参见13.4.6节,“SET TRANSACTION语法”。
·--tmpdir=path, -tpath
创建临时文件的目录路径。默认/tmp目录在太小不能容纳临时表的分区时该选项很有用。该选项接受round-robin模式的几个路径。在Unix中路径应用冒号(‘:’)间隔开,在Windows、NetWare和OS/2中用分号(‘;’)间隔开。如果MySQL服务器为复制从机,你不应让--tmpdir指向基于内存的文件系统中的目录或服务器主机重启时会清除的目录。复制从机需要临时文件,机器重启时可以复制临时表或执行LOAD DATA INFILE操作。如果服务器重启时临时文件目录中的文件丢失,复制失败。
·--user={user_name |user_id}, -u {user_name | user_id}
用user_name或数字用户ID user_id运行mysqld服务器。(“用户”指系统登录账户,而不是授权表中所列的MySQL用户)。
用root启动mysqld时强制使用该选项。服务器在启动序列中更改用户ID,让它做为具体用户而不是root运行。参见5.6.1节,“通用安全指南”。
要避免用户在my.cnf文件中添加--user=root选项(使服务器用root运行)时可能出现的安全漏洞,mysqld只使用指定的第1个--user选项,如果有多个--user选项则会出现警告。在命令行选项前处理/etc/my.cnf和$MYSQL_HOME/my.cnf中的选项,因此建议你在/etc/my.cnf中放一个--user选项,并指定root之外的其它值。在其它--user选项前先找到/etc/my.cnf中的选项,确保服务器用其它用户运行,如果找到其它--user选项则会出现警告。
·--version,-V
显示版本信息并退出。
你可以使用--var_name=value形式的选项为服务器系统变量。例如,--key_buffer_size=32M将变量key_buffer_size设为32MB。
请注意设置变量时,MySQL可以自动将它纠正到某个给定范围内,或如果只允许某个值,则将设置值调节到最接近允许的值。
还可以通过--set-variable=var_name=value或-Ovar_name=value语法来设置变量。但是,现在不赞成使用该语法。
5.3.3节,“服务器系统变量”完全描述了全部系统变量。调节服务器参数部分包括如何对他们进行优化。参见7.5.2节,“调节服务器参数”。
你可以用SET语句更改大多数服务器系统变量的值。参见13.5.3节,“SET语法”。
如果你想用SET 限制启动项可设的最大值,你可以使用--maximum-var_name命令行选项来定义。
5.3.2. SQL服务器模式
MySQL服务器可以以不同的SQL模式来操作,并且可以为不同客户端应用不同模式。这样每个应用程序可以根据自己的需求来定制服务器的操作模式。
模式定义MySQL应支持哪些SQL语法,以及应执行哪种数据验证检查。这样可以更容易地在不同的环境中使用MySQL,并结合其它数据库服务器使用MySQL。
你可以用--sql-mode="modes"选项启动mysqld来设置默认SQL模式。如果你想要重设,该值还可以为空(--sql-mode ="")。
你还可以在启动后用SET [SESSION|GLOBAL] sql_mode='modes'语句设置sql_mode变量来更改SQL模式。设置 GLOBAL变量时需要拥有SUPER权限,并且会影响从那时起连接的所有客户端的操作。设置SESSION变量只影响当前的客户端。任何客户端可以随时更改自己的会话 sql_mode值。
Modesis是用逗号(‘,’)间隔开的一系列不同的模式。你可以用SELECT @@sql_mode语句查询当前的模式。默认值是空(没有设置任何模式)。
主要重要sql_mode值为:
·ANSI
更改语法和行为,使其更符合标准SQL。
·STRICT_TRANS_TABLES
如果不能将给定的值插入到事务表中,则放弃该语句。对于非事务表,如果值出现在单行语句或多行语句的第1行,则放弃该语句。本节后面给出了更详细的描述。
·TRADITIONAL
Make MySQL的行为象“传统”SQL数据库系统。该模式的简单描述是当在列中插入不正确的值时“给出错误而不是警告”。注释:一旦发现错误立即放弃INSERT/UPDATE。如果你使用非事务存储引擎,这种方式不是你想要的,因为出现错误前进行的数据更改不会“滚动”,结果是更新“只进行了一部分”。
本手册指“严格模式”,表示至少STRICT _TRANS_TABLES或STRICT _ALL_TABLES被启用的模式。
下面描述了支持的所有模式:
·ALLOW_INVALID_DATES
在严格模式下不要检查全部日期。只检查1到12之间的月份和1到31之间的日。这在Web应用程序中,当你从三个不同的字段获取年、月、日,并且想要确切保存用户插入的内容(不进行日期验证)时很重要。该模式适用于DATE和DATETIME列。不适合TIMESTAMP列,TIMESTAMP列需要验证日期。
启用严格模式后,服务器需要合法的月和日,不仅仅是分别在1到12和1到31范围内。例如,禁用严格模式时'2004-04-31'是合法的,但启用严格模式后是非法的。要想在严格模式允许遮掩固定日期,还应启用ALLOW_INVALID_DATES。
·ANSI_QUOTES
将‘"’视为识别符引号(‘`’引号字符),不要视为字符串的引号字符。在ANSI模式,你可以仍然使用‘`’来引用识别符。启用ANSI_QUOTES后,你不能用双引号来引用字符串,因为它被解释为识别符。
·ERROR_FOR_DIVISION_BY_ZERO
在严格模式,在INSERT或UPDATE过程中,如果被零除(或MOD(X,0)),则产生错误(否则为警告)。如果未给出该模式,被零除时MySQL返回NULL。如果用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作结果为NULL。
·HIGH_NOT_PRECEDENCE
NOT操作符的优先顺序是表达式例如NOT a BETWEEN b AND c被解释为NOT (a BETWEEN b AND c)。在一些旧版本MySQL中, 表达式被解释为(NOT a) BETWEEN b AND c。启用HIGH_NOT_PRECEDENCESQL模式,可以获得以前的更高优先级的结果。
mysql> SET sql_mode = '';
mysql> SELECT NOT 1 BETWEEN -5 AND 5;
-> 0
mysql> SET sql_mode = 'broken_not';
mysql> SELECT NOT 1 BETWEEN -5 AND 5;
-> 1
·IGNORE_SPACE
允许函数名和‘(’之间有空格。强制将所有函数名视为保存的字。结果是,如果你想要访问保存为字的数据库、表或列名,你必须引用它。例如,因为有USER()函数,mysql数据库中的user表名和该表内的User列被保存下来,因此你必须引用它们:
SELECT "User" FROM mysql."user";
·NO_AUTO_CREATE_USER
防止GRANT自动创建新用户,除非还指定了密码。
·NO_AUTO_VALUE_ON_ZERO
NO_AUTO_VALUE_ON_ZERO影响AUTO_INCREMENT列的处理。一般情况,你可以向该列插入NULL或0生成下一个序列号。NO_AUTO_VALUE_ON_ZERO禁用0,因此只有NULL可以生成下一个序列号。
如果将0保存到表的AUTO_INCREMENT列,该模式会很有用。(不推荐采用该惯例)。例如,如果你用mysqldump转储表并重载,MySQL遇到0值一般会生成新的序列号,生成的表的内容与转储的表不同。重载转储文件前启用NO_AUTO_VALUE_ON_ZERO可以解决该问题。mysqldump在输出中自动包括启用NO_AUTO_VALUE_ON_ZERO的语句。
·NO_BACKSLASH_ESCAPES
禁用反斜线字符(‘\’)做为字符串内的退出字符。启用该模式,反斜线则成为普通字符。
·NO_DIR_IN_CREATE
创建表时,忽视所有INDEX DIRECTORY和DATA DIRECTORY指令。该选项对从复制服务器有用。
·NO_ENGINE_SUBSTITUTION
如果需要的存储引擎被禁用或未编译,可以防止自动替换存储引擎。
·NO_FIELD_OPTIONS
不要在SHOW CREATE TABLE的输出中打印MySQL专用列选项。该模式在可移植模式(portability mode)下用于mysqldump。
·NO_KEY_OPTIONS
不要在SHOW CREATE TABLE的输出中打印MySQL专用索引选项。该模式在可移植模式(portability mode)下用于mysqldump。
·NO_TABLE_OPTIONS
不要在SHOW CREATE TABLE的输出中打印MySQL专用表选项(例如ENGINE)。该模式在可移植模式(portability mode)下用于mysqldump。
·NO_UNSIGNED_SUBTRACTION
在减运算中,如果某个操作数没有符号,不要将结果标记为UNSIGNED。请注意这样使UNSIGNED BIGINT不能100%用于上下文中。参见12.8节,“Cast函数和操作符”。
·NO_ZERO_DATE
在严格模式,不要将 '0000-00-00'做为合法日期。你仍然可以用IGNORE选项插入零日期。在非严格模式,可以接受该日期,但会生成警告。
·NO_ZERO_IN_DATE
在严格模式,不接受月或日部分为0的日期。如果使用IGNORE选项,我们为类似的日期插入'0000-00-00'。在非严格模式,可以接受该日期,但会生成警告。
·ONLY_FULL_GROUP_BY
不要让GROUP BY部分中的查询指向未选择的列。
·PIPES_AS_CONCAT
将||视为字符串连接操作符(+)(同CONCAT()),而不视为OR。
·REAL_AS_FLOAT
将REAL视为FLOAT的同义词,而不是DOUBLE的同义词。
·STRICT_TRANS_TABLES
为所有存储引擎启用严格模式。非法数据值被拒绝。后面有详细说明。
·STRICT_TRANS_TABLES
为事务存储引擎启用严格模式,也可能为非事务存储引擎启用严格模式。后面有详细说明。
严格模式控制MySQL如何处理非法或丢失的输入值。有几种原因可以使一个值为非法。例如,数据类型错误,不适合列,或超出范围。当新插入的行不包含某列的没有显示定义DEFAULT子句的值,则该值被丢失。
对于事务表,当启用STRICT_ALL_TABLES或STRICT_TRANS_TABLES模式时,如果语句中有非法或丢失值,则会出现错误。语句被放弃并滚动。
对于非事务表,如果插入或更新的第1行出现坏值,两种模式的行为相同。语句被放弃,表保持不变。如果语句插入或修改多行,并且坏值出现在第2或后面的行,结果取决于启用了哪个严格选项:
·对于STRICT_ALL_TABLES,MySQL返回错误并忽视剩余的行。但是,在这种情况下,前面的行已经被插入或更新。这说明你可以部分更新,这可能不是你想要的。要避免这点,最好使用单行语句,因为这样可以不更改表即可以放弃。
·对于STRICT_TRANS_TABLES,MySQL将非法值转换为最接近该列的合法值并插入调整后的值。如果值丢失,MySQL在列中插入隐式默认值。在任何情况下,MySQL都会生成警告而不是给出错误并继续执行语句。13.1.5节,“CREATE TABLE语法”描述了隐式默认值。
严格模式不允许非法日期,例如'2004-04-31'。它不允许禁止日期使用“零”部分,例如'2004-04-00'或“零”日期。要想禁止,应在严格模式基础上,启用NO_ZERO_IN_DATE和NO_ZERO_DATE SQL模式。
如果你不使用严格模式(即不启用STRICT_TRANS_TABLES或STRICT_ALL_TABLES模式),对于非法或丢失的值,MySQL将插入调整后的值并给出警告。在严格模式,你可以通过INSERT IGNORE或UPDATE IGNORE来实现。参见13.5.4.22节,“SHOW WARNINGS语法”。
下面的特殊模式快速组合了前面所列的模式。
其中包括大多数最新版本MySQL中的所有模式值。旧版本中,组合模式不包括新版本中没有的不适用的具体模式值。
·ANSI
等同REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE。参见1.8.3节,“在ANSI模式下运行MySQL”。
·DB2
等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS。
·MAXDB
等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、 NO_AUTO_CREATE_USER。
·MSSQL
等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、 NO_FIELD_OPTIONS。
·MYSQL323
等同NO_FIELD_OPTIONS、HIGH_NOT_PRECEDENCE。
·MYSQL40
等同NO_FIELD_OPTIONS、HIGH_NOT_PRECEDENCE。
·ORACLE
等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER。
·POSTGRESQL
等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS。
·TRADITIONAL
等同STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER。
5.3.3. 服务器系统变量
- 5.3.3.1. 动态系统变量
服务器将维护许多表示其配置的系统变量。所有变量均有默认值。可以在命令行中或选项文件设置选项在服务器启动时对它们进行设置。大多数可以在运行时使用SET语句来设置。
mysqld服务器维护两种变量。全局变量影响服务器的全局操作。会话变量影响具体客户端连接相关操作。
服务器启动时,将所有全局变量初始化为默认值。可以在选项文件或命令行中指定的选项来更改这些默认值。服务器启动后,通过连接服务器并执行SET GLOBAL var_name语句可以更改动态全局变量。要想更改全局变量,必须具有SUPER权限。
服务器还为每个客户端连接维护会话变量。连接时使用相应全局变量的当前值对客户端会话变量进行初始化。客户可以通过SET SESSION var_name语句来更改动态会话变量。设置会话变量不需要特殊权限,但客户可以只更改自己的会话变量,而不更改其它客户的会话变量。
任何访问全局变量的客户端都可以看见对全局变量的更改。但是,它只影响在更改后连接的从该全局变量初始化相应会话变量的客户端。它不会影响已经连接上的客户端的会话变量(甚至是执行SET GLOBAL语句的客户端)。
当使用启动选项设置变量时,变量值可以使用后缀K、M或G分别表示千字节、兆字节或gigabytes。例如,下面的命令启动服务器时的键值缓冲区大小为16 megabytes:
mysqld --key_buffer_size=16M
后缀的大小写美关系;16M和16m是同样的。
运行时,使用SET语句来设置系统变量。此时,不能使用后缀,但值可以采取下列表达式:
mysql> SET sort_buffer_size = 10 * 1024 * 1024;
要想显式指定是否设置全局或会话变量,使用GLOBAL或SESSION选项:
mysql> SET GLOBAL sort_buffer_size = 10 * 1024 * 1024;
mysql> SET SESSION sort_buffer_size = 10 * 1024 * 1024;
两个选项均没有,则语句设置会话变量。
5.3.3.1节,“动态系统变量”中列出了可以在运行时设置的变量。
如果你想用SET语句限制系统变量可设的最大值,可以在服务器启动时通过--maximum-var_name形式的选项来指定。例如,要想防止query_cache_size的值运行时超过32MB,使用选项--maximum-query_cache_size=32M。
你可以通过SHOW VARIABLES语句查看系统变量及其值。详细信息参见9.4节,“系统变量”。
mysql> SHOW VARIABLES;+---------------------------------+-------------------------------------------+| Variable_name | Value |+---------------------------------+-------------------------------------------+| auto_increment_increment| 1 || auto_increment_offset | 1 || automatic_sp_privileges | ON|| back_log| 50|| basedir | /home/jon/bin/mysql/ || binlog_cache_size | 32768 || bulk_insert_buffer_size | 8388608 || character_set_client | latin1 || character_set_connection| latin1 || character_set_database | latin1 || character_set_results | latin1 || character_set_server | latin1 || character_set_system | utf8 || character_sets_dir | /home/jon/bin/mysql/share/mysql/charsets/ || collation_connection | latin1_swedish_ci || collation_database | latin1_swedish_ci || collation_server| latin1_swedish_ci || completion_type | 0 || concurrent_insert | 1 || connect_timeout | 5 || datadir | /home/jon/bin/mysql/var/ || date_format | %Y-%m-%d || datetime_format | %Y-%m-%d %H:%i:%s || default_week_format | 0 || delay_key_write | ON|| delayed_insert_limit | 100 || delayed_insert_timeout | 300 || delayed_queue_size | 1000 || div_precision_increment | 4 || engine_condition_pushdown | OFF || expire_logs_days| 0 || flush | OFF || flush_time | 0 || ft_boolean_syntax | + -><()~*:""&| || ft_max_word_len | 84|| ft_min_word_len | 4 || ft_query_expansion_limit| 20|| ft_stopword_file| (built-in)|| group_concat_max_len | 1024 || have_archive | YES || have_bdb| NO|| have_blackhole_engine | YES || have_compress | YES || have_crypt | YES || have_csv| YES || have_example_engine | NO|| have_federated_engine | NO|| have_geometry | YES || have_innodb | YES || have_isam | NO|| have_ndbcluster | DISABLED || have_openssl | NO|| have_partition_engine | YES || have_query_cache| YES || have_raid | NO|| have_rtree_keys | YES || have_symlink | YES || init_connect | || init_file | || init_slave | || innodb_additional_mem_pool_size | 1048576 || innodb_autoextend_increment | 8 || innodb_buffer_pool_awe_mem_mb | 0 || innodb_buffer_pool_size | 8388608 || innodb_checksums| ON|| innodb_commit_concurrency | 0 || innodb_concurrency_tickets | 500 || innodb_data_file_path | ibdata1:10M:autoextend || innodb_data_home_dir | || innodb_doublewrite | ON|| innodb_fast_shutdown | 1 || innodb_file_io_threads | 4 || innodb_file_per_table | OFF || innodb_flush_log_at_trx_commit | 1 || innodb_flush_method | || innodb_force_recovery | 0 || innodb_lock_wait_timeout| 50|| innodb_locks_unsafe_for_binlog | OFF || innodb_log_arch_dir | || innodb_log_archive | OFF || innodb_log_buffer_size | 1048576 || innodb_log_file_size | 5242880 || innodb_log_files_in_group | 2 || innodb_log_group_home_dir | ./|| innodb_max_dirty_pages_pct | 90|| innodb_max_purge_lag | 0 || innodb_mirrored_log_groups | 1 || innodb_open_files | 300 || innodb_support_xa | ON|| innodb_sync_spin_loops | 20|| innodb_table_locks | ON|| innodb_thread_concurrency | 20|| innodb_thread_sleep_delay | 10000 || interactive_timeout | 28800 || join_buffer_size| 131072 || key_buffer_size | 8388600 || key_cache_age_threshold | 300 || key_cache_block_size | 1024 || key_cache_division_limit| 100 || language| /home/jon/bin/mysql/share/mysql/english/ || large_files_support | ON|| large_page_size | 0 || large_pages | OFF || license | GPL || local_infile | ON|| locked_in_memory| OFF || log | ON|| log_bin | ON|| log_bin_trust_routine_creators | OFF || log_error | /home/jon/bin/mysql/var/master1.err || log_slave_updates | OFF || log_slow_queries| OFF || log_warnings | 1 || long_query_time | 10|| low_priority_updates | OFF || lower_case_file_system | OFF || lower_case_table_names | 0 || max_allowed_packet | 1048576 || max_binlog_cache_size | 4294967295|| max_binlog_size | 1073741824|| max_connect_errors | 10|| max_connections | 100 || max_delayed_threads | 20|| max_error_count | 64|| max_heap_table_size | 16777216 || max_insert_delayed_threads | 20|| max_join_size | 4294967295|| max_length_for_sort_data| 1024 || max_relay_log_size | 0 || max_seeks_for_key | 4294967295|| max_sort_length | 1024 || max_tmp_tables | 32|| max_user_connections | 0 || max_write_lock_count | 4294967295|| multi_range_count | 256 || myisam_data_pointer_size| 6 || myisam_max_sort_file_size | 2147483647|| myisam_recover_options | OFF || myisam_repair_threads | 1 || myisam_sort_buffer_size | 8388608 || ndb_autoincrement_prefetch_sz | 32|| ndb_cache_check_time | 0 || ndb_force_send | ON|| ndb_index_stat_cache_entries | 32|| ndb_index_stat_enable | ON|| ndb_index_stat_update_freq | 20|| ndb_use_exact_count | ON|| ndb_use_transactions | ON|| net_buffer_length | 16384 || net_read_timeout| 30|| net_retry_count | 10|| net_write_timeout | 60|| new | OFF || old_alter_table | OFF || old_passwords | OFF || open_files_limit| 1024 || optimizer_prune_level | 1 || optimizer_search_depth | 62|| pid_file| /home/jon/bin/mysql/var/hostname.pid1 || port | 3306 || preload_buffer_size | 32768 || protocol_version| 10|| query_alloc_block_size | 8192 || query_cache_limit | 1048576 || query_cache_min_res_unit| 4096 || query_cache_size| 0 || query_cache_type| ON|| query_cache_wlock_invalidate | OFF || query_prealloc_size | 8192 || range_alloc_block_size | 2048 || read_buffer_size| 131072 || read_only | OFF || read_rnd_buffer_size | 262144 || relay_log_purge | ON|| relay_log_space_limit | 0 || rpl_recovery_rank | 0 || secure_auth | OFF || server_id | 1 || skip_external_locking | ON|| skip_networking | OFF || skip_show_database | OFF || slave_compressed_protocol | OFF || slave_load_tmpdir | /tmp/ || slave_net_timeout | 3600 || slave_skip_errors | OFF || slave_transaction_retries | 10|| slow_launch_time| 2 || socket | /tmp/mysql.sock || sort_buffer_size| 2097144 || sql_mode| || sql_notes | ON|| sql_warnings | ON|| storage_engine | MyISAM || sync_binlog | 0 || sync_frm| ON|| sync_replication| 0 || sync_replication_slave_id | 0 || sync_replication_timeout| 10|| system_time_zone| EST || table_cache | 64|| table_lock_wait_timeout | 50|| table_type | MyISAM || thread_cache_size | 0 || thread_stack | 196608 || time_format | %H:%i:%s || time_zone | SYSTEM || timed_mutexes | OFF || tmp_table_size | 33554432 || tmpdir | || transaction_alloc_block_size | 8192 || transaction_prealloc_size | 4096 || tx_isolation | REPEATABLE-READ || updatable_views_with_limit | YES || version | 5.1.2-alpha-log || version_comment | Source distribution || version_compile_machine | i686 || version_compile_os | suse-linux|| wait_timeout | 28800 |+---------------------------------+-------------------------------------------+218 rows in set (0.03 sec)
此处描述了大多数系统变量。没有版本的变量在所有MySQL 5.1 发布中适用。关于其使用历史信息,请参见MySQL 5.0参考指南和MySQL 4.1参考指南。InnoDB系统变量列于 15.2.4节,“InnoDB启动选项”。
若没有另行规定,缓冲区大小、长度和堆栈大小的单位均为字节。
关于这些变量的调节信息参见7.5.2节,“调节服务器参数”。
·auto_increment_increment
auto_increment_increment和auto_increment_offset用于主服务器-主服务器(master-to-master)复制,并可以用来控制AUTO_INCREMENT列的操作。两个变量均可以设置为全局或局部变量,并且假定每个值都可以为1到65,535之间的整数值。将其中一个变量设置为0会使该变量为1。如果试图将这些变量设置为大于65,535或小于0的值,则会将该值设置为65,535。如果向将auto_increment_increment或auto_increment_offset设置为非整数值,则会给出错误,并且变量的实际值在这种情况下保持不变。
这两个变量影响AUTO_INCREMENT列的方式:
oauto_increment_increment控制列中的值的增量值。例如:
o mysql> SHOW VARIABLES LIKE 'auto_inc%';
o +--------------------------+-------+
o | Variable_name | Value |
o +--------------------------+-------+
o | auto_increment_increment | 1 |
o | auto_increment_offset | 1 |
o +--------------------------+-------+
o 2 rows in set (0.00 sec)
o
o mysql> CREATE TABLE autoinc1 (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
o Query OK, 0 rows affected (0.04 sec)
o
o mysql> SET @auto_increment_increment=10;
o Query OK, 0 rows affected (0.00 sec)
o
o mysql> SHOW VARIABLES LIKE 'auto_inc%';
o +--------------------------+-------+
o | Variable_name | Value |
o +--------------------------+-------+
o | auto_increment_increment | 10 |
o | auto_increment_offset | 1 |
o +--------------------------+-------+
o 2 rows in set (0.01 sec)
o
o mysql> INSERT INTO autoinc1 VALUES (NULL, (NULL), (NULL), (NULL);
o Query OK, 4 rows affected (0.00 sec)
o Records: 4 Duplicates: 0 Warnings: 0
o
o mysql> SELECT col FROM autoinc1;
o +-----+
o | col |
o +-----+
o | 1 |
o | 11 |
o | 21 |
o | 31 |
o +-----+
o 4 rows in set (0.00 sec)
(注明如何使用SHOW VARIABLES来获取这些变量的当前值)。
oauto_increment_offset确定AUTO_INCREMENT列值的起点。假定在与前面的例子的相同的会话中执行下面的命令:
o mysql> SET @auto_increment_offset=5;
o Query OK, 0 rows affected (0.00 sec)
o
o mysql> SHOW VARIABLES LIKE 'auto_inc%';
o +--------------------------+-------+
o | Variable_name | Value |
o +--------------------------+-------+
o | auto_increment_increment | 10 |
o | auto_increment_offset | 5 |
o +--------------------------+-------+
o 2 rows in set (0.00 sec)
o
o mysql> CREATE TABLE autoinc2 (col INT NOT NULL AUTO_INCREMENT PRIMARY KEY);
o Query OK, 0 rows affected (0.06 sec)
o
o mysql> INSERT INTO autoinc2 VALUES (NULL, (NULL), (NULL), (NULL);
o Query OK, 4 rows affected (0.00 sec)
o Records: 4 Duplicates: 0 Warnings: 0
o
o mysql> SELECT col FROM autoinc2;
o +-----+
o | col |
o +-----+
o | 5 |
o | 15 |
o | 25 |
o | 35 |
o +-----+
o 4 rows in set (0.02 sec)
o
如果auto_increment_offset的值大于auto_increment_increment的值,则auto_increment_offset的值被忽略。
如果其中一个或两个变量被更改了,然后更改插入到包含AUTO_INCREMENT列的表中的新行,结果可能看上去有问题,由于计算AUTO_INCREMENT系列值时没有考虑列内已经存在的值,并且插入的下一个值是列内最小的值,大于AUTO_INCREMENT列内已有的最大值。换句话说,数值的计算方法为:
auto_increment_offset+ N * auto_increment_increment
其中N为系列内的正整数值[1,2,3,...]。例如:
mysql> SHOW VARIABLES LIKE 'auto_inc%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 10 |
| auto_increment_offset | 5 |
+--------------------------+-------+
2 rows in set (0.00 sec)
mysql> SELECT col FROM autoinc1;
+-----+
| col |
+-----+
| 1 |
| 11 |
| 21 |
| 31 |
+-----+
4 rows in set (0.00 sec)
mysql> INSERT INTO autoinc1 VALUES (NULL, (NULL), (NULL), (NULL);
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> SELECT col FROM autoinc1;
+-----+
| col |
+-----+
| 1 |
| 11 |
| 21 |
| 31 |
| 35 |
| 45 |
| 55 |
| 65 |
+-----+
8 rows in set (0.00 sec)
auto_increment_increment和auto_increment_offset所示的值可以生成系列5 + N * 10,即,[5,15,25,35,45,...]。在INSERT前col列内最大的值为31,AUTO_INCREMENT数列的下一个值为35,因此col中插入的值从该点开始,结果如SELECT查询所示。
一定要记住不可能将这两个变量的结果限制到一个表中,因此不会替代其它数据库管理系统提供的序列;这些变量控制MySQL服务器上all表AUTO_INCREMENT列的所有行为。如果某个变量设为全局变量,则只有通过局部设置将全局值更改和覆盖后或mysqld重启后其作用方可改变;如果局部设置,则新值影响所有表的AUTO_INCREMENT列,在这个会话期间当前用户在这些表中插入了新行,除非在会话期间更改了这些值。
auto_increment_increment的默认值为1。参见6.12节,“多服务器复制中的Auto-Increment”。
·auto_increment_offset
该变量的默认值为1。详见auto_increment_increment的描述。
·back_log
MySQL有的主要连接请求的数量。当主MySQL线程在短时间内得到许多连接请求时发挥作用。主线程需要花一些时间(尽管很少)来检查连接并启动一个新线程。back_log值说明MySQL临时停止响应新请求前在短时间内可以堆起多少请求。如果你需要在短时间内允许大量连接,可以增加该数值。
换句话说,该值为“进”TCP/IP连接帧听队列的大小。操作系统有该队列自己的限制值。本手册中Unixlisten()系统调用页应有更详细的信息。该变量最大值请查阅OS文档。企图将back_log设置为高于你的操作系统限值是徒劳无益的。
·basedir
MySQL安装基准目录。可以用--basedir选项设置该变量。
·bdb_cache_size
为BDB表缓存索引和行分配的缓冲区的大小。如果你不使用BDB表,你应用--skip-bdb启动mysqld以便不浪费该缓存。
·bdb_home
BDB表基准目录。应与datadir变量的值相同。
·bdb_log_buffer_size
为BDB表缓存索引和行分配的缓冲区的大小。如果你不使用BDB表,你应将该值设置为0或用--skip-bdb启动mysqld以便不浪费该缓存。
·bdb_logdir
BDB存储引擎写它日志文件的目录。可以用--bdb-logdir选项设置该变量。
·bdb_max_lock
在BDB表下可以激活的最大锁数(默认为10,000)。如果当你执行长事务或当mysqld必须检查许多行来计算查询时出现下面的错误,你应增加该值:
bdb: Lock table is out of available locks
Got error 12 from ...
·bdb_shared_data
如果你正使用--bdb-shared-data应为ON。
·bdb_tmpdir
--bdb-tmpdir选项的值。
·binlog_cache_size
在事务过程中容纳二进制日志SQL语句的缓存大小。二进制日志缓存是服务器支持事务存储引擎并且服务器启用了二进制日志(--log-bin选项)的前提下为每个客户端分配的内存。如果你经常使用大的,多语句事务,你可以增加该值以获得更有的性能。Binlog_cache_use和Binlog_cache_disk_use状态变量可以用来调整该变量的大小。参见5.11.3节,“二进制日志”。
·bulk_insert_buffer_size
MyISAM使用专用树状缓存来使INSERT ... SELECT、INSERT ... VALUES (NULL,FORCE)。参见5.3.1节,“mysqld命令行选项”和15.1.1节,“MyISAM启动选项”。
请注意--external-locking不为使用延迟键写入的表提供索引破坏保护。
·delayed_insert_limit
插入delayed_insert_limit延迟行后,INSERT DELAYED 处理器线程检查是否有挂起的SELECT语句。如果有,在继续插入延迟的行之前,允许它们先执行。
·delayed_insert_timeout
INSERT DELAYED处理器线程终止前应等待INSERT语句的时间。
·delayed_queue_size
这是各个表中处理INSERT DELAYED语句时队列中行的数量限制。如果队列满了,执行INSERT DELAYED语句的客户端应等待直到队列内再有空间。
·div_precision_increment
该变量说明用/操作符执行除操作的结果可增加的精确度的位数。默认值是4。最小和最大值分别为0和30。下面的示例说明了增加默认值的结果。
mysql> SELECT 1/7;
+--------+
| 1/7 |
+--------+
| 0.1429 |
+--------+
mysql> SET div_precision_increment = 12;
mysql> SELECT 1/7;
+----------------+
| 1/7 |
+----------------+
| 0.142857142857 |
+----------------+
·engine_condition_pushdown
该变量适用于NDB。默认值为0(OFF):如果你执行类似查询SELECT * FROM t WHERE mycol = 42,其中mycol为没有索引的列,当满了的表扫描每个NDB节点时,执行该查询。每个节点使用WHERE条件将每一行发送给MySQL服务器。如果engine_condition_pushdown被设置为1(ON),该条件“pushed down”给存储引擎并发送给NDB节点。每个节点都执行扫描,并只向MySQL服务器发送回匹配条件的行。
·expire_logs_days
二进制日志自动删除的天数。默认值为0,表示“没有自动删除”。启动时和二进制日志循环时可能删除。
·flush
如果用--flush选项启动mysqld该值为ON。
·flush_time
如果设为非零值,每隔flush_time秒则关闭所有表以释放硬盘资源并同步未清空的数据。我们建议只在Windows 9x或Me,或有最小资源的系统中使用该选项。
·ft_boolean_syntax
使用IN BOOLEAN MODE执行的布尔全文搜索支持的操作符系列。参见12.7.1节,“布尔全文搜索”。
默认变量值为 '+ -><()~*:""&|'。更改这些值的规则是:
o操作符函数由其在字符串内的位置决定。
o替换值必须是14个字符。
o每个字符必须为ASCII码非文字数字字符。
o第1个或第2个字符必须为空格。
o除非语句在第11个字符和第12个字符处引用了操作符,否则不允许复制。这两个字符可以不相同,但这是唯一可能的两个。
o位置10、13和14(默认设置为‘:’、‘&’和‘|’)保留用于将来扩展。
·ft_max_word_len
FULLTEXT索引中所包含的字的最大长度。
注释:更改该变量后必须重建FULLTEXT索引。应使用REPAIR TABLE tbl_name QUICK。
·ft_min_word_len
FULLTEXT索引中所包含的字的最小长度。
注释:更改该变量后必须重建FULLTEXT索引。应使用REPAIR TABLE tbl_name QUICK。
·ft_query_expansion_limit
使用WITH QUERY EXPANSION进行全文搜索的最大匹配数。
·ft_stopword_file
用于读取全文搜索的停止字清单的文件。该文件中的所有字都会用到;注释不重要。默认情况下,使用内嵌式停止字清单(如myisam/ft_static.c文件中所定义)。将该变量设置为空字符串('')则禁用停止字过滤。
注释:更改该变量或停止字文件的内容后必须重建FULLTEXT索引。应使用REPAIR TABLE tbl_name QUICK。
·group_concat_max_len
允许的GROUP_CONCAT()函数结果的最大长度。
·have_archive
如果mysqld支持ARCHIVE表则为YES,否则为NO。
·have_bdb
如果mysqld支持BDB表则为YES。如果使用--skip-bdb则为DISABLED。
·have_blackhole_engine
如果mysqld支持BLACKHOLE表则为YES,否则为NO。
·have_compress
是否zlib压缩库适合该服务器。如果不适合,不能使用COMPRESS()和UNCOMPRESS()函数。
·have_crypt
是否crypt()系统调用适合该服务器。如果不适合,不能使用CRYPT()函数。
·have_csv
如果mysqld支持ARCHIVE表则为YES,否则为NO。
·have_example_engine
如果mysqld支持EXAMPLE表则为YES,否则为NO。
have_federated_engine
如果mysqld支持FEDERATED表则为YES,否则为NO。
·have_geometry
是否服务器支持空间数据类型。
·have_innodb
如果mysqld支持InnoDB表则为YES。如果使用--skip-innodb则为DISABLED。
·have_isam
在MySQL 5.1中,只是为了向后兼容显示该值,并且总是NO,因为不再支持ISAM表。
·have_ndbcluster
如果mysqld支持NDB CLUSTER表则为YES。如果使用了--skip-ndbcluster则为DISABLED。
·have_partition_engine
如果mysqld支持分区则为YES。在MySQL 5.1.1中加入。
·have_openssl
如果mysqld支持客户端/服务器协议的SSL(加密)则为YES。
·have_query_cache
如果mysqld支持查询缓存则为YES。
·have_raid
如果mysqld支持RAID选项则为YES。
·have_rtree_keys
RTREE索引是否可用。(用于MyISAM表的空间索引)。
·have_symlink
是否启用符号链接支持。在Unix中需要用于支持DATA DIRECTORY和INDEX DIRECTORY表选项。
·init_connect
服务器为每个连接的客户端执行的字符串。字符串由一个或多个SQL语句组成。要想指定多个语句,用分号间隔开。例如,每个客户端开始时默认启用autocommit模式。没有全局服务器变量可以规定autocommit默认情况下应禁用,但可以用init_connect来获得相同的效果:
SET GLOBAL init_connect='SET AUTOCOMMIT=0';
还可以在命令行或选项文件中设置该变量。要想使用选项文件设置变量,应包括下述行:
[mysqld]
init_connect='SET AUTOCOMMIT=0'
请注意init_connect的内容并不为拥有SUPER权限的用户执行;实际是内容设置错误(包含错误查询,例如语法错误),这样使所有连接失败。不为SUPER用户执行,使SUPER用户可以打开连接并固定init_connect。
·init_file
启动服务器时用--init-file选项指定的文件名。文件中包含服务器启动时要执行的SQL语句。每个语句必须在同一行中并且不能包括注释。
·init_slave
该变量类似init_connect,但是每次SQL线程启动时从服务器应执行该字符串。该字符串的格式与init_connect变量相同。
·innodb_xxx
InnoDB系统变量列入15.2.4节,“InnoDB启动选项”。
·interactive_timeout
服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。又见wait_timeout。
·join_buffer_size
用于完全联接的缓冲区的大小(当不使用索引的时候使用联接操作)。一般情况获得快速联接的最好方法是添加索引。当增加索引时不可能通过增加join_buffer_size值来获得快速完全联接。将为两个表之间的每个完全联接分配联接缓冲区。对于多个表之间不使用索引的复杂联接,需要多联接缓冲区。
·key_buffer_size
MyISAM表的索引块分配了缓冲区,由所有线程共享。key_buffer_size是索引块缓冲区的大小。键值缓冲区即为键值缓存。
key_buffer_size的最大允许设定值为4GB。有效最大值可以更小,取决于可用物理RAM和操作系统或硬件平台强加的每个进程的RAM限制。
增加该值,达到你可以提供的更好的索引处理(所有读和多个写操作)。通常为主要运行MySQL的机器内存的25%。但是,如果你将该值设得过大(例如,大于总内存的50%),系统将转换为页并变得极慢。MySQL依赖操作系统来执行数据读取时的文件系统缓存,因此你必须为文件系统缓存留一些空间。
同时写多行时要想速度更快,应使用LOCK TABLES。参见13.4.5节,“LOCK TABLES和UNLOCK TABLES语法”。
你可以通过执行SHOW STATUS语句并检查Key_read_requests、Key_reads、Key_write_requests和Key_writes状态变量来检查键值缓冲区的性能。参见13.5.4节,“SHOW语法”。
Key_reads/Key_read_requests比例一般应小于0.01。如果你使用更新和删除,Key_writes/Key_write_requests比例通常接近1,但如果你更新时会同时影响到多行或如果你正使用DELAY_KEY_WRITE表选项,可能小得多。
用key_buffer_size结合Key_blocks_unused状态变量和缓冲区块大小,可以确定使用的键值缓冲区的比例。从key_cache_block_size服务器变量可以获得缓冲区块大小。使用的缓冲区的比例为:
1 - ((Key_blocks_unused * key_cache_block_size) / key_buffer_size)
该值为约数,因为键值缓冲区的部分空间被分配用作内部管理结构。
可以创建多个MyISAM键值缓存。4GB限制可以适合每个缓存,而不是一个组。参见7.4.6节,“MyISAM键高速缓冲”。
·key_cache_age_threshold
该值控制将缓冲区从键值缓存热子链(sub-chain)降级到温子链(sub-chain)。如果值更低,则降级更快。最小值为100。默认值是300。参见7.4.6节,“MyISAM键高速缓冲”。
·key_cache_block_size
键值缓存内块的字节大小。默认值是1024。参见7.4.6节,“MyISAM键高速缓冲”。
·key_cache_division_limit
键值缓存缓冲区链热子链和温子链的划分点。该值为缓冲区链用于温子链的百分比。允许的值的范围为1到100。默认值是100。参见7.4.6节,“MyISAM键高速缓冲”。
·language
错误消息所用语言。
· large_file_support
mysqld编译时是否使用了大文件支持选项。
·large_pages
说明是否启用了大页面支持。
·license
服务器的许可类型。
·local_infile
是否LOCAL支持LOAD DATA INFILE语句。
·locked_in_memory
是否用–memlock将mysqld锁在内存中。
·log
是否启用将所有查询记录到常规查询日志中。参见5.11.2节,“通用查询日志”。
·log_bin
是否启用二进制日志。参见5.11.3节,“二进制日志”。
·log_bin_trust_routine_creators
若启用了二进制记录,则该变量适用。它控制是否可以信任保存的程序的作者不会创建向二进制日志写入不安全事件的程序。如果设置为0(默认情况),不允许用户创建或修改保存的程序,除非他们不仅拥有CREATE ROUTINE或ALTER ROUTINE权限还拥有SUPER权限。
设置为0还强制限制,程序必须用DETERMINISTIC特征或用READS SQL DATA或NO SQL特征声明。如果变量设置为1,MySQL不对保存程序的创建强加限制。
参见20.4节,“存储子程序和触发程序的二进制日志功能”。
·log_error
错误日志的位置。
·log_slave_updates
是否从服务器从主服务器收到的更新应记入从服务器自己的二进制日志。要想生效,必须启用从服务器的二进制记录。参见6.8节,“复制启动选项”。
·log_slow_queries
是否记录慢查询。用long_query_time变量的值来确定“慢查询”。参见5.11.4节,“慢速查询日志”。
·log_warnings
是否产生其它警告消息。默认情况下启用。放弃的连接不记入错误日志,除非值大于1。
·long_query_time
如果查询时间超过该值,则增加Slow_queries状态变量。如果你正使用--log-slow-queries选项,则查询记入慢查询日志文件。用实际时间测量该值,而不是CPU时间,因此低于轻负载系统阈值的查询可能超过重负载系统的阈值。参见5.11.4节,“慢速查询日志”。
·low_priority_updates
如果设置为1,所有INSERT、UPDATE、DELETE和LOCK TABLE WRITE语句将等待直到受影响的表没有挂起的SELECT或LOCK TABLE READ。该变量以前叫做sql_low_priority_updates。
·lower_case_file_system
该变量说明是否数据目录所在的文件系统对文件名的大小写敏感。ON说明对文件名的大小写不敏感,OFF表示敏感。
· lower_case_table_names
如果设置为1,表名用小写保存到硬盘上,并且表名比较时不对大小写敏感。如果设置为2,按照指定的保存表名,但按照小写来比较。该选项还适合数据库名和表的别名。参见9.2.2节,“识别符大小写敏感性”。
如果你正使用InnoDB表,你应在所有平台上将该变量设置为1,强制将名字转换为小写。
如果运行MySQL的系统对文件名的大小写不敏感(例如Windows或Mac OS X),你不应将该变量设置为0。如果启动时没有设置该变量,并且数据目录所在文件系统对文件名的大小写不敏感,MySQL自动将lower_case_table_names设置为2。
·max_allowed_packet
包或任何生成的/中间字符串的最大大小。
包消息缓冲区初始化为net_buffer_length字节,但需要时可以增长到max_allowed_packet字节。该值默认很小,以捕获大的(可能是错误的)数据包。
如果你使用大的BLOB列或长字符串,你必须增加该值。应同你想要使用的最大的BLOB一样大。max_allowed_packet的协议限制为1GB。
·max_binlog_cache_size
如果多语句事务需要更大的内存,你会得到错误Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage。
·max_binlog_size
如果二进制日志写入的内容超出给定值,日志就会发生滚动。你不能将该变量设置为大于1GB或小于4096字节。默认值是1GB。
请注意如果你正使用事务:事务以一个块写入二进制日志,因此不不能被几个二进制日志拆分。因此,如果你有大的事务,二进制日志可能会大于max_binlog_size。
如果max_relay_log_size为0,max_binlog_size的值也适用于中继日志。
·max_connect_errors
如果中断的与主机的连接超过该数目,该主机则阻塞后面的连接。你可以用 FLUSH HOSTS语句解锁锁定的主机。
·max_connections
允许的并行客户端连接数目。增大该值则增加mysqld需要的文件描述符的数量。关于文件描述符限制的注释参见7.4.9节,“MySQL如何打开和关闭表”。还可参见A.2.6节,“连接数过多”。
·max_delayed_threads
不要启动大于该数目的线程来处理INSERT DELAYED语句。如果所有INSERT DELAYED线程已经在使用,你想在新表中插入数据,行 插入时好像未指定DELAYED属性。如果你将该值设置为0,MySQL不会创建线程来处理DELAYED行;其结果是完全禁用了DELAYED。
·max_error_count
保存由SHOW ERRORS或SHOW WARNINGS显示的错误、警告和注解的最大数目。
·max_heap_table_size
该变量设置MEMORY (HEAP)表可以增长到的最大空间大小。该变量用来计算MEMORY表的MAX_ROWS值。在已有的MEMORY表上设置该变量没有效果,除非用CREATE TABLE或TRUNCATE TABLE等语句重新创建表。
·max_insert_delayed_threads
该变量为max_delayed_threads的同义词。
·max_join_size
不允许可能需要检查多于max_join_size行(为单个表语句)或行组合(为多个表语句)或可能执行大于max_join_size次硬盘查询的SELECT语句。通过设置该值,你可以捕获键使用不正确并可能花很长时间的SELECT语句。如果用户想要执行没有WHERE子句的花较长时间或返回数百万行的联接,则设置它。
将该变量设置为DEFAULT之外的值,将SQL_BIG_SELECTS的值重设为0。如果你重新设置SQL_BIG_SELECTS值,max_join_size变量被忽略。
如果查询结果位于查询缓存中,则不检查结果大小,因为前面已经计算了结果,不会要求服务器将它发送给客户端。
该变量以前叫做sql_max_join_size。
·max_length_for_sort_data
确定使用的filesort算法的索引值大小的限值。参见7.2.12节,“MySQL如何优化ORDER BY”。
·max_relay_log_size
如果复制从服务器写入中继日志时超出给定值,则滚动中继日志。通过该变量你可以对中继日志和二进制日志设置不同的限制。但是,将该变量设置为0,MySQL可以对二进制日志和中继日志使用max_binlog_size。max_relay_log_size必须设置在4096字节和1GB(包括)之间,或为0。默认值是0。参见6.3节,“复制实施细节”。
·max_seeks_for_key
限制根据键值寻找行时的最大搜索数。MySQL优化器假定当用扫描键在表内搜索匹配的行时,不需要超过该数量的键值搜索,而不管键的实际基数是什么(参见13.5.4.11节,“SHOW INDEX语法”)。将该值设置为较低的值(100?),你可以强制MySQL选择键值而不选择表扫描。
·max_sort_length
当排序BLOB或TEXT值时使用的字节数。只使用每个值的前max_sort_length字节;其它的被忽略。
·max_tmp_tables
客户端可以同时打开的临时表的最大数。(但该选项还未生效)。
·max_user_connections
任何给定的MySQL账户允许的最大同时连接数。0值表示“没有限制”。
该变量具有全局范围和(只读)会话范围。会话变量的的值与全局变量的值相同,除非当前账户具有非零MAX_USER_CONNECTIONS资源限制。在这种情况下,会话值反应了账户限制。
·max_write_lock_count
超过写锁定限制后,允许部分读锁定。
·myisam_data_pointer_size
默认指针大小,单位是字节,当未指定MAX_ROWS选项时,CREATE TABLE使用该变量创建MyISAM表。该变量不能小于2或大于7。 默认值是6。参见A.2.11节,“表已满”。
·(DEPRECATED)myisam_max_extra_sort_file_size
注释:MySQL 5.1不支持该变量。详细信息参见MySQL 5.0 参考手册。
·myisam_max_sort_file_size
重建MyISAM索引(在REPAIR TABLE、ALTER TABLE或LOAD DATA INFILE过程中)时,允许MySQL使用的临时文件的最大空间大小。如果文件的大小超过该值,则使用键值缓存创建索引,要慢得多。该值的单位为字节。
·myisam_recover_options
--myisam-recover选项的值。
·myisam_repair_threads
如果该值大于1,在Repair by sorting过程中并行创建MyISAM表索引(每个索引在自己的线程内)。默认值是1。注释:多线程维护仍然是alpha编码。
·myisam_sort_buffer_size
当在REPAIR TABLE或用CREATE INDEX创建索引或ALTER TABLE过程中排序 MyISAM索引分配的缓冲区。
·myisam_stats_method
当为MyISAM表搜集关于索引值分发的统计信息时服务器如何处理NULL值。该变量有两个可能的值,nulls_equal和nulls_unequal。对于nulls_equal,认为所有NULL索引值时相等的,并形成一个数值组,其空间大小等于NULL值的数。对于nulls_unequal,NULL值认为是不相等的,每个NULL形成一个数值组,大小为1。
方法用于生成表统计信息,影响优化器如何选择索引来执行查询,详细描述见7.4.7节,“MyISAM索引统计集合”。
·multi_read_range
指定范围选择过程中发送到存储引擎的范围的最大值。默认值是256。向引擎发送多个范围可以大大改进某些选择的性能,特别是对NDBCLUSTER。该引擎需要向所有节点发送范围请求,同时发送许多请求可以大大降低通信成本。
·named_pipe
(只适用Windows)说明服务器是否支持命名管道连接。
·net_buffer_length
在查询之间将通信缓冲区重设为该值。一般情况不应改变,但如果内存很小,可以将它设置为期望的客户端发送的SQL语句的长度。如果语句超出该长度,缓冲区自动扩大,直到max_allowed_packet字节。
·net_read_timeout
中断读前等待连接的其它数据的秒数。当服务器从客户端读数时,net_read_timeout指控制何时中断的超时值。当服务器向客户端写时,net_write_timeout指控制何时中断的超时值。又见slave_net_timeout。
·net_retry_count
如果某个通信端口的读操作中断了,在放弃前重试多次。在FreeBSD中该值应设得很高,因为内部中断将发送至所有线程。
·net_write_timeout
中断写之前等待块写入连接的秒数。又见net_read_timeout。
·new
在MySQL 4.0中使用该变量来打开4.1中的一些行为,并用于向后兼容性。在MySQL 5.1中,它的值一直是OFF.
·old_passwords
是否服务器应为MySQL用户账户使用pre-4.1-style密码。参见A.2.3节,“客户端不支持鉴定协议”。
·one_shot
这不是一个变量,但当设置变量是可以使用它。其描述见13.5.3节,“SET语法”。
·one_shot
这不是一个变量,但当设置变量是可以使用它。其描述见13.5.3节,“SET语法”。
·open_files_limit
操作系统允许mysqld打开的文件的数量。这是系统允许的实际值,可能与你在启动选项中赋给mysqld的值不同。若在系统中MySQL不能更改打开的文件的数量,则该值为0。
·optimizer_prune_level
在查询优化从优化器搜索空间裁减低希望局部计划中使用的控制方法。0值禁用该方法,以便优化器进行穷举搜索。值为1使优化器根据中间方案中得出的行数来裁减方案。
·optimizer_search_depth
查询优化器进行的搜索的最大深度。如果值大于查询中的关系数则查询方案比较佳,但生成查询执行方案需要的时间更长。值大于查询中的关系数则返回的执行方案更快,但方案远没有优化。如果设置为0,系统自动选择合理的值。如果设置为查询中使用的表的最大数加2,优化器转换为MySQL 5.0.0(和以前的版本)中使用的算法并搜索。
·pid_file
进程ID (PID)文件的路径名。可以用--pid-file选项设置该变量。
·plugin_dir
插件目录的路径。在MySQL 5.1.2中加入了该变量。
·port
服务器帧听TCP/IP连接所用端口。可以用--port选项设置该变量。
·preload_buffer_size
重载索引时分配的缓冲区大小。
·protocol_version
MySQL服务器使用的客户端/服务器协议的版本。
·query_alloc_block_size
为查询分析和执行过程中创建的对象分配的内存块大小。如果内存分段过程中遇到问题,将该变量增加一位会有帮助。
·query_cache_limit
不要缓存大于该值的结果。默认值是1048576(1MB)。
·query_cache_min_res_unit
查询缓存分配的最小块的大小(字节)。默认值是4096(4KB)。关于该变量的调节信息参见5.13.3节,“查询高速缓冲配置”。
·query_cache_size
为缓存查询结果分配的内存的数量。默认值是0,即禁用查询缓存。请注意即使query_cache_type设置为0也将分配此数量的内存。详细信息参见5.13.3节,“查询高速缓冲配置”。
·query_cache_type
设置查询缓存类型。设置GLOBAL值可以设置后面的所有客户端连接的类型。客户端可以设置SESSION值以影响他们自己对查询缓存的使用。下面的表显示了可能的值:
选项 | 描述 |
0或OFF | 不要缓存或查询结果。请注意这样不会取消分配的查询缓存区。要想取消,你应将query_cache_size设置为0。 |
1或ON | 缓存除了以SELECT SQL_NO_CACHE开头的所有查询结果。 |
2或DEMAND | 只缓存以SELECT SQL_NO_CACHE开头的查询结果。 |
该变量默认设为ON。
·query_cache_wlock_invalidate
一般情况,当客户端对MyISAM表进行WRITE锁定时,如果查询结果位于查询缓存中,则其它客户端未被锁定,可以对该表进行查询。将该变量设置为1,则可以对表进行WRITE锁定,使查询缓存内所有对该表进行的查询变得非法。这样当锁定生效时,可以强制其它试图访问表的客户端来等待。
·query_prealloc_size
用于查询分析和执行的固定缓冲区的大小。在查询之间该缓冲区不释放。如果你执行复杂查询,分配更大的query_prealloc_size值可以帮助提高性能,因为它可以降低查询过程中服务器分配内存的需求。
·range_alloc_block_size
范围优化时分配的块的大小。
·read_buffer_size
每个线程连续扫描时为扫描的每个表分配的缓冲区的大小(字节)。如果进行多次连续扫描,可能需要增加该值,默认值为131072。
·read_only
当变量对复制从服务器设置为ON时,从服务器不允许更新,除非通过从服务器的线程或用户拥有SUPER权限。可以确保从服务器不接受客户端的更新命令。
·relay_log_purge
当不再需要中继日志时禁用或启用自动清空中继日志。默认值是1(启用)。
·read_rnd_buffer_size
当排序后按排序后的顺序读取行时,则通过该缓冲区读取行,避免搜索硬盘。将该变量设置为较大的值可以大大改进ORDER BY的性能。但是,这是为每个客户端分配的缓冲区,因此你不应将全局变量设置为较大的值。相反,只为需要运行大查询的客户端更改会话变量。
·secure_auth
如果用--secure-auth选项启动了MySQL服务器,它将阻塞有旧格式(4.1之前)密码的所有账户所发起的连接。在这种情况下,该变量的值为ON,否则为OFF。
如果你想要防止使用旧格式的密码(致使网络通信不安全),你应启用该选项。
如果启用该选项并且授权表为pre-4.1格式,服务器启动失败并且会出现错误。参见A.2.3节,“客户端不支持鉴定协议”。
当用于客户端选项时,如果服务器需要该客户端账户的旧格式的密码,则客户端拒绝连接该服务器。
·server_id
--server-id选项的值。用于主复制服务器和从复制服务器。
·shared_memory
(只用于Windows)服务器是否允许共享内存连接。
·shared_memory_base_name
(只用于Windows)说明服务器是否允许共享内存连接,并为共享内存设置识别符。当在单台机器上运行多个MySQL实例时很有用。
·skip_external_locking
如果mysqld使用外部锁定,该值为OFF。
·skip_networking
如果服务器只允许本地(非TCP/IP)连接,该值为ON。在Unix中,本地连接使用Unix套接字文件。在Windows中,本地连接使用命名管道或共享内存。在NetWare中,只支持TCP/IP连接,因此不要将该变量设置为ON。
·skip_show_database
防止不具有SHOW DATABASES权限的人们使用SHOW DATABASES语句。如果你担心用户能够看见属于其它用户的数据库,这样设置可以提高安全性。其效果取决于SHOW DATABASES权限:如果变量值为ON,只允许具有SHOW DATABASES权限的人们使用SHOW DATABASES 语句,并且该语句将显示所有数据库名。如果值为OFF,允许所有用户执行SHOW DATABASES,但只显示用户具有SHOW DATABASES或其它权限的数据库的名称。
·slave_compressed_protocol
如果主、从服务器均支持,确定是否使用从/主压缩协议。
·slave_load_tmpdir
从服务器为复制LOAD DATA INFILE语句创建临时文件的目录名。
·slave_net_timeout
放弃读操作前等待主/从连接的更多数据的等待秒数。
·slave_skip_errors
从服务器应跳过(忽视)的复制错误。
·slave_transaction_retries
如果由于ofInnoDB死锁或超过InnoDB的innodb_lock_wait_timeout或NDBCLUSTER的TransactionDeadlockDetectionTimeout或TransactionInactiveTimeout,复制从服务器SQL线程未能执行事务,在提示错误并停止前它自动重复slave_transaction_retries次。默认值是10。
·slow_launch_time
如果创建线程的时间超过该秒数,服务器增加Slow_launch_threads状态变量。
·socket
Unix平台:用于本地客户端连接的套接字文件。默认为/var/lib/mysql/mysql.sock。
Windows:用于本地客户端连接的命名管道名。默认为mysql。
·sort_buffer_size
每个排序线程分配的缓冲区的大小。增加该值可以加快ORDER BY或GROUP BY操作。参见A.4.4节,“MySQL将临时文件储存在哪里”。
·sql_mode
当前的服务器SQL模式,可以动态设置。参见5.3.2节,“SQL服务器模式”。
·sql_slave_skip_counter
从服务器应跳过的来自主服务器的事件数。
·storage_engine
该变量是table_typeis的同义词。在MySQL 5.1中,首选storage_engine。
·sync_binlog
如果为正,当每个sync_binlog'th写入该二进制日志后,MySQL服务器将它的二进制日志同步到硬盘上(fdatasync())。请注意如果在autocommit模式,每执行一个语句向二进制日志写入一次,否则每个事务写入一次。默认值是0,不与硬盘同步。值为1是最安全的选择,因为崩溃时,你最多丢掉二进制日志中的一个语句/事务;但是,这是最慢的选择(除非硬盘有电池备份缓存,从而使同步工作较快)。
·sync_frm
如果该变量设为1,当创建非临时表时它的.frm文件被同步到硬盘上(fdatasync());这样较慢但出现崩溃时较安全。默认值为1。
·system_time_zone
服务器系统时区。当 服务器开始执行时,它继承机器默认时区设置值,可以由运行服务器的账户或在启动脚本中进行修改。该值用来设置system_time_zone。典型情况用TZ环境变量来指定时区。还可以用mysqld_safe脚本的--timez选项来指定。
·table_cache
所有线程打开的表的数目。增大该值可以增加mysqld需要的文件描述符的数量。你可以检查Opened_tables状态变量来检查你是否需要增加表缓存。参见5.3.4节,“服务器状态变量”。如果Opened_tables值较大,并且多次执行FLUSH TABLES(只是强制关闭所有表并重新),则应增加table_cache变量的值。
关于表缓存的详细信息,参见7.4.9节,“MySQL如何打开和关闭表”。
·table_type
默认表类型(存储引擎)。要想在服务器启动时设置表类型,使用--default-table-type选项。参见5.3.1节,“mysqld命令行选项”。
·thread_cache_size
服务器应缓存多少线程以便重新使用。当客户端断开连接时,如果线程少于thread_cache_size,则客户端的线程被放入缓存。当请求线程时如果允许可以从缓存中重新利用线程,并且只有当缓存空了时才会创建新线程。如果新连接很多,可以增加该变量以提高性能。(一般情况,如果线程执行得很好,性能提高不明显)。检查Connections和Threads_created状态变量的差(详见5.3.4节,“服务器状态变量”),你可以看见线程缓存的效率。
·thread_concurrency
在Solaris中,mysqld用该值调用thr_setconcurrency()。该函数使应用程序向线程系统提供需要同时运行的期望的线程数目的提示。
·thread_stack
每个线程的堆栈大小。用crash-me测试检测出的许多限制取决于该值。默认值足够大,可以满足普通操作。参见7.1.4节,“MySQL基准套件”。
·time_format
该变量为使用。
·time_zone
当前的时区。初使值是'SYSTEM'(使用system_time_zone的值),但可以用--default-time-zone选项在服务器启动时显式指定。
·tmp_table_size
如果内存内的临时表超过该值,MySQL自动将它转换为硬盘上的MyISAM表。如果你执行许多高级GROUP BY查询并且有大量内存,则可以增加tmp_table_size的值。
·tmpdir
保存临时文件和临时表的目录。该变量可以设置为几个路径,按round-robin模式使用。在Unix中应该用冒号(‘:’)间隔开路径,在Windows、NetWare和OS/2中用分号(‘;’)。
用来将负荷分散到几个物理硬盘上。如果MySQL服务器为复制从服务器,你不应将tmpdir设置为指向基于内存的文件系统上的目录或当服务器主机重启时声明的目录。复制从服务器需要部分临时文件来在机器重启后仍可用,以便它可以复制临时表或执行LOAD DATA INFILE操作。如果服务器重启时临时文件夹中的文件丢失了,则复制失败。但是,如果你使用MySQL 4.0.0或更新版本,你可以使用 slave_load_tmpdir变量设置从服务器的临时目录。在这种情况下,从服务器不再使用常规tmpdir,说明你可以将tmpdir设置到一个非固定位置。
·transaction_alloc_block_size
为保存将保存到二进制日志中的事务的查询而分配的内存块的大小(字节)。
·transaction_prealloc_size
为transaction_alloc_blocks分配的固定缓冲区的大小(字节),在两次查询之间不会释放。使该值足够大,将所有查询固定到一个事务中,可以避免多次malloc()调用。
·tx_isolation
默认事务隔离级别。默认值为REPEATABLE-READ。
·updatable_views_with_limit
该变量控制如果更新包含LIMIT子句,是否可以在当前表中使用不包含主关键字的视图进行更新。(通常用GUI工具生成这类更新)。更新指UPDATE或DELETE语句。这儿主关键字指PRIMARY KEY,或一个UNIQUE索引,其中任何列不可以包含NULL。
该变量有两个值:
o1或YES:只发出警告(没有错误消息)。这是默认值。
o0或NO:禁止更新。
·version
服务器版本号。
·version_bdb
BDB存储引擎版本。
·version_comment
configure脚本有一个--with-comment选项,当构建MySQL时可以进行注释。该变量包含注释值。
·version_compile_machine
MySQL构建的机器或架构的类型。
·version_compile_os
MySQL构建的操作系统的类型。
·wait_timeout
服务器关闭非交互连接之前等待活动的秒数。
在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。又见interactive_timeout。
5.3.3.1. 动态系统变量
许多服务器系统变量是动态的,可以使用SET GLOBAL或SET SESSION在运行时设置。你还可以使用SELECT获得它们的值。参见9.4节,“系统变量”。
下面的表列出了所有动态系统变量。最后1列说明每个变量是否适用GLOBAL或SESSION(或二者)。
变量名 | 值类型 | 类型 |
autocommit | boolean | SESSION |
big_tables | boolean | SESSION |
binlog_cache_size | numeric | GLOBAL |
bulk_insert_buffer_size | numeric | GLOBAL | SESSION |
character_set_client | string | GLOBAL | SESSION |
character_set_connection | string | GLOBAL | SESSION |
character_set_results | string | GLOBAL | SESSION |
character_set_server | string | GLOBAL | SESSION |
collation_connection | string | GLOBAL | SESSION |
collation_server | string | GLOBAL | SESSION |
completion_type | numeric | GLOBAL | SESSION |
concurrent_insert | boolean | GLOBAL |
connect_timeout | numeric | GLOBAL |
convert_character_set | string | GLOBAL | SESSION |
default_week_format | numeric | GLOBAL | SESSION |
delay_key_write | OFF | ON |ALL | GLOBAL |
delayed_insert_limit | numeric | GLOBAL |
delayed_insert_timeout | numeric | GLOBAL |
delayed_queue_size | numeric | GLOBAL |
div_precision_increment | numeric | GLOBAL | SESSION |
engine_condition_pushdown | boolean | GLOBAL | SESSION |
error_count | numeric | SESSION |
expire_logs_days | numeric | GLOBAL |
flush | boolean | GLOBAL |
flush_time | numeric | GLOBAL |
foreign_key_checks | boolean | SESSION |
ft_boolean_syntax | numeric | GLOBAL |
group_concat_max_len | numeric | GLOBAL | SESSION |
identity | numeric | SESSION |
innodb_autoextend_increment | numeric | GLOBAL |
innodb_concurrency_tickets | numeric | GLOBAL |
innodb_max_dirty_pages_pct | numeric | GLOBAL |
innodb_max_purge_lag | numeric | GLOBAL |
innodb_support_xa | boolean | GLOBAL | SESSION |
innodb_sync_spin_loops | numeric | GLOBAL |
innodb_table_locks | boolean | GLOBAL | SESSION |
innodb_thread_concurrency | numeric GLOBAL | |
innodb_thread_sleep_delay | numeric GLOBAL | |
insert_id | boolean | SESSION |
interactive_timeout | numeric | GLOBAL | SESSION |
join_buffer_size | numeric | GLOBAL | SESSION |
key_buffer_size | numeric | GLOBAL |
last_insert_id | numeric | SESSION |
local_infile | boolean | GLOBAL |
log_warnings | numeric | GLOBAL |
long_query_time | numeric | GLOBAL | SESSION |
low_priority_updates | boolean | GLOBAL | SESSION |
max_allowed_packet | numeric | GLOBAL | SESSION |
max_binlog_cache_size | numeric | GLOBAL |
max_binlog_size | numeric | GLOBAL |
max_connect_errors | numeric | GLOBAL |
max_connections | numeric | GLOBAL |
max_delayed_threads | numeric | GLOBAL |
max_error_count | numeric | GLOBAL | SESSION |
max_heap_table_size | numeric | GLOBAL | SESSION |
max_insert_delayed_threads | numeric | GLOBAL |
max_join_size | numeric | GLOBAL | SESSION |
max_relay_log_size | numeric | GLOBAL |
max_seeks_for_key | numeric | GLOBAL | SESSION |
max_sort_length | numeric | GLOBAL | SESSION |
max_tmp_tables | numeric | GLOBAL | SESSION |
max_user_connections | numeric | GLOBAL |
max_write_lock_count | numeric | GLOBAL |
myisam_stats_method | enum | GLOBAL | SESSION |
multi_read_range | numeric | GLOBAL | SESSION |
myisam_data_pointer_size | numeric | GLOBAL |
log_bin_trust_routine_creators | boolean | GLOBAL |
myisam_max_sort_file_size | numeric | GLOBAL | SESSION |
myisam_repair_threads | numeric | GLOBAL | SESSION |
myisam_sort_buffer_size | numeric | GLOBAL | SESSION |
net_buffer_length | numeric | GLOBAL | SESSION |
net_read_timeout | numeric | GLOBAL | SESSION |
net_retry_count | numeric | GLOBAL | SESSION |
net_write_timeout | numeric | GLOBAL | SESSION |
old_passwords | numeric | GLOBAL | SESSION |
optimizer_prune_level | numeric | GLOBAL | SESSION |
optimizer_search_depth | numeric | GLOBAL | SESSION |
preload_buffer_size | numeric | GLOBAL | SESSION |
query_alloc_block_size | numeric | GLOBAL | SESSION |
query_cache_limit | numeric | GLOBAL |
query_cache_size | numeric | GLOBAL |
query_cache_type | enumeration | GLOBAL | SESSION |
query_cache_wlock_invalidate | boolean | GLOBAL | SESSION |
query_prealloc_size | numeric | GLOBAL | SESSION |
range_alloc_block_size | numeric | GLOBAL | SESSION |
read_buffer_size | numeric | GLOBAL | SESSION |
read_only | numeric | GLOBAL |
read_rnd_buffer_size | numeric | GLOBAL | SESSION |
rpl_recovery_rank | numeric | GLOBAL |
safe_show_database | boolean | GLOBAL |
secure_auth | boolean | GLOBAL |
server_id | numeric | GLOBAL |
slave_compressed_protocol | boolean | GLOBAL |
slave_net_timeout | numeric | GLOBAL |
slave_transaction_retries | numeric | GLOBAL |
slow_launch_time | numeric | GLOBAL |
sort_buffer_size | numeric | GLOBAL | SESSION |
sql_auto_is_null | boolean | SESSION |
sql_big_selects | boolean | SESSION |
sql_big_tables | boolean | SESSION |
sql_buffer_result | boolean | SESSION |
sql_log_bin | boolean | SESSION |
sql_log_off | boolean | SESSION |
sql_log_update | boolean | SESSION |
sql_low_priority_updates | boolean | GLOBAL | SESSION |
sql_max_join_size | numeric | GLOBAL | SESSION |
sql_mode | enumeration | GLOBAL | SESSION |
sql_notes | boolean | SESSION |
sql_quote_show_create | boolean | SESSION |
sql_safe_updates | boolean | SESSION |
sql_select_limit | numeric | SESSION |
sql_slave_skip_counter | numeric | GLOBAL |
updatable_views_with_limit | enumeration | GLOBAL | SESSION |
sql_warnings | boolean | SESSION |
sync_binlog | numeric | GLOBAL |
sync_frm | boolean | GLOBAL |
storage_engine | enumeration | GLOBAL | SESSION |
table_cache | numeric | GLOBAL |
table_type | enumeration | GLOBAL | SESSION |
thread_cache_size | numeric | GLOBAL |
time_zone | string | GLOBAL | SESSION |
timestamp | boolean | SESSION |
tmp_table_size | enumeration | GLOBAL | SESSION |
transaction_alloc_block_size | numeric | GLOBAL | SESSION |
transaction_prealloc_size | numeric | GLOBAL | SESSION |
tx_isolation | enumeration | GLOBAL | SESSION |
unique_checks | boolean | SESSION |
wait_timeout | numeric | GLOBAL | SESSION |
warning_count | numeric | SESSION |
标记为string的变量采用字符串值。标记为numeric的变量采用数字值。标记为boolean的变量可以设置为0、1、ON或OFF。标记为enumeration的变量一般情况应设置为该变量的某个可用值,但还可以设置为对应期望的枚举值的数字。对于枚举系统变量,第1个枚举值应对应0。这不同于ENUM列,第1个枚举值对应1。
5.3.4. 服务器状态变量
服务器维护许多提供操作相关信息的状态变量。你可以通过SHOW STATUS语句查看这些变量和它们的值:
mysql> SHOW STATUS;
+-----------------------------------+------------+
| Variable_name | Value |
+-----------------------------------+------------+
| Aborted_clients | 0 |
| Aborted_connects | 0 |
| Bytes_received | 155372598 |
| Bytes_sent| 1176560426 |
…
| Connections | 30023 |
| Created_tmp_disk_tables | 0 |
| Created_tmp_files | 3 |
| Created_tmp_tables| 2 |
…
| Threads_created | 217|
| Threads_running | 88 |
| Uptime | 1389872 |
+-----------------------------------+------------+
用FLUSH STATUS语句可以将许多状态变量重设为0。
状态变量有以下含义。没有指示版本的变量在MySQL 5.1之前已经出现。关于它们的使用历史,参见MySQL 5.0参考手册。
·Aborted_clients
由于客户端没有正确关闭连接导致客户端终止而中断的连接数。参见A.2.10节,“通信错误和失效连接”。
·Aborted_connects
试图连接到MySQL服务器而失败的连接数。参见A.2.10节,“通信错误和失效连接”。
·Binlog_cache_disk_use
使用临时二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量。
·Binlog_cache_use
使用临时二进制日志缓存的事务数量。
·Bytes_received
从所有客户端接收到的字节数。
·Bytes_sent
发送给所有客户端的字节数。
·Com_xxx
Com_xxx语句计数变量表示每个xxx语句执行的次数。每类语句有一个状态变量。例如,Com_delete和Com_insert分别统计DELETE和INSERT语句执行的次数。
Com_stmt_xxx状态变量为:
oCom_stmt_prepare
oCom_stmt_execute
oCom_stmt_fetch
oCom_stmt_send_long_data
oCom_stmt_reset
oCom_stmt_close
这些变量代表准备好的语句命令。它们的名字对应网络层使用的COM_xxx命令系列;换句话说:当准备好的语句API调用如mysql_stmt_prepare()、mysql_stmt_执行()并执行时,它们的值增加。但是,当执行下面的SQL语句时,Com_stmt_prepare,Com_stmt_execute和Com_stmt_close也增加:PREPARE、EXECUTE或DEALLOCATE PREPARE。此外,旧(从MySQL 4.1.3起可用)语句计数变量Com_prepare_sql、Com_execute_sql和Com_dealloc_sql的值也随PREPARE、EXECUTE和DEALLOCATE PREPARE语句增加。Com_stmt_fetch代表通过光标获取的网络round-trips的总数量。
所有Com_stmt_xxx变量将增加,即使语句参数未知或执行过程中出现错误。换句话说,它们的值对应发出的请求数,而不是成功完成的请求数。
·Connections
试图连接到(不管是否成功)MySQL服务器的连接数。
·Created_tmp_disk_tables
服务器执行语句时在硬盘上自动创建的临时表的数量。
·Created_tmp_files
mysqld已经创建的临时文件的数量。
·Created_tmp_files
服务器执行语句时自动创建的内存中的临时表的数量。如果Created_tmp_disk_tables较大,你可能要增加tmp_table_size值使临时 表基于内存而不基于硬盘。
·Delayed_errors
用INSERT DELAYED写的出现错误的行数(可能为duplicate key)。
·Delayed_insert_threads
使用的INSERT DELAYED处理器线程数。
·Delayed_writes
写入的INSERT DELAYED行数。
·Flush_commands
执行的FLUSH语句数。
·Handler_commit
内部提交语句数。
·Handler_discover
MySQL服务器可以问NDB CLUSTER存储引擎是否知道某一名字的表。这被称作发现。Handler_discover说明通过该方法发现的次数。
·Handler_delete
行从表中删除的次数。
·Handler_read_first
索引中第一条被读的次数。如果较高,它建议服务器正执行大量全索引扫描;例如,SELECT col1 FROM foo,假定col1有索引。
·Handler_read_key
根据键读一行的请求数。如果较高,说明查询和表的索引正确。
·Handler_read_next
按照键顺序读下一行的请求数。如果你用范围约束或如果执行索引扫描来查询索引列,该值增加。
·Handler_read_prev
按照键顺序读前一行的请求数。该读方法主要用于优化ORDER BY ... DESC。
·Handler_read_rnd
根据固定位置读一行的请求数。如果你正执行大量查询并需要对结果进行排序该值较高。你可能使用了大量需要MySQL扫描整个表的查询或你的连接没有正确使用键。
·Handler_read_rnd_next
在数据文件中读下一行的请求数。如果你正进行大量的表扫描,该值较高。通常说明你的表索引不正确或写入的查询没有利用索引。
·Handler_rollback
内部ROLLBACK语句的数量。
·Handler_update
在表内更新一行的请求数。
·Handler_write
在表内插入一行的请求数。
·Innodb_buffer_pool_pages_data
包含数据的页数(脏或干净)。
·Innodb_buffer_pool_pages_dirty
当前的脏页数。
·Innodb_buffer_pool_pages_flushed
要求清空的缓冲池页数。
·Innodb_buffer_pool_pages_free
空页数。
·Innodb_buffer_pool_pages_latched
在InnoDB缓冲池中锁定的页数。这是当前正读或写或由于其它原因不能清空或删除的页数。
· Innodb_buffer_pool_pages_misc
忙的页数,因为它们已经被分配优先用作管理,例如行锁定或适用的哈希索引。该值还可以计算为Innodb_buffer_pool_pages_total - Innodb_buffer_pool_pages_free - Innodb_buffer_pool_pages_data。
·Innodb_buffer_pool_pages_total
缓冲池总大小(页数)。
·Innodb_buffer_pool_read_ahead_rnd
InnoDB初始化的“随机”read-aheads数。当查询以随机顺序扫描表的一大部分时发生。
·Innodb_buffer_pool_read_ahead_seq
InnoDB初始化的顺序read-aheads数。当InnoDB执行顺序全表扫描时发生。
·Innodb_buffer_pool_read_requests
InnoDB已经完成的逻辑读请求数。
·Innodb_buffer_pool_reads
不能满足InnoDB必须单页读取的缓冲池中的逻辑读数量。
·Innodb_buffer_pool_wait_free
一般情况,通过后台向InnoDB缓冲池写。但是,如果需要读或创建页,并且没有干净的页可用,则它还需要先等待页面清空。该计数器对等待实例进行记数。如果已经适当设置缓冲池大小,该值应小。
·Innodb_buffer_pool_write_requests
向InnoDB缓冲池的写数量。
·Innodb_data_fsyncs
fsync()操作数。
·Innodb_data_pending_fsyncs
当前挂起的fsync()操作数。
·Innodb_data_pending_reads
当前挂起的读数。
·Innodb_data_pending_writes
当前挂起的写数。
·Innodb_data_read
至此已经读取的数据数量(字节)。
·Innodb_data_reads
数据读总数量。
·Innodb_data_writes
数据写总数量。
·Innodb_data_written
至此已经写入的数据量(字节)。
·Innodb_dblwr_writes, Innodb_dblwr_pages_written
已经执行的双写操作数量和为此目的已经写好的页数。参见15.2.14.1节,“磁盘I/O”。
·Innodb_log_waits
我们必须等待的时间,因为日志缓冲区太小,我们在继续前必须先等待对它清空。
·Innodb_log_write_requests
日志写请求数。
·Innodb_log_writes
向日志文件的物理写数量。
·Innodb_os_log_fsyncs
向日志文件完成的fsync()写数量。
·Innodb_os_log_pending_fsyncs
挂起的日志文件fsync()操作数量。
·Innodb_os_log_pending_writes
挂起的日志文件写操作。
·Innodb_os_log_written
写入日志文件的字节数。
·Innodb_page_size
编译的InnoDB页大小(默认16KB)。许多值用页来记数;页的大小很容易转换为字节。
·Innodb_pages_created
创建的页数。
·Innodb_pages_read
读取的页数。
·Innodb_pages_written
写入的页数。
·Innodb_row_lock_current_waits
当前等待的待锁定的行数。
·Innodb_row_lock_time
行锁定花费的总时间,单位毫秒。
·Innodb_row_lock_time_avg
行锁定的平均时间,单位毫秒。
·Innodb_row_lock_time_max
行锁定的最长时间,单位毫秒。
·Innodb_row_lock_waits
一行锁定必须等待的时间数。
·Innodb_rows_deleted
从InnoDB表删除的行数。
·Innodb_rows_inserted
插入到InnoDB表的行数。
·Innodb_rows_read
从InnoDB表读取的行数。
·Innodb_rows_updated
InnoDB表内更新的行数。
·Key_blocks_not_flushed
键缓存内已经更改但还没有清空到硬盘上的键的数据块数量。
·Key_blocks_unused
键缓存内未使用的块数量。你可以使用该值来确定使用了多少键缓存;参见5.3.3节,“服务器系统变量”中Key_buffer_size的讨论。
·Key_blocks_used
键缓存内使用的块数量。该值为高水平线标记,说明已经同时最多使用了多少块。
·Key_read_requests
从缓存读键的数据块的请求数。
·Key_reads
从硬盘读取键的数据块的次数。如果Key_reads较大,则Key_buffer_size值可能太小。可以用Key_reads/Key_read_requests计算缓存损失率。
·Key_write_requests
将键的数据块写入缓存的请求数。
·Key_writes
向硬盘写入将键的数据块的物理写操作的次数。
·Last_query_cost
用查询优化器计算的最后编译的查询的总成本。用于对比同一查询的不同查询方案的成本。默认值0表示还没有编译查询。默认值是0。Last_query_cost具有会话范围。
·Max_used_connections
服务器启动后已经同时使用的连接的最大数量。
·Not_flushed_delayed_rows
等待写入INSERT DELAY队列的行数。
·Open_files
打开的文件的数目。
·Open_streams
打开的流的数量(主要用于记录)。
·Open_tables
当前打开的表的数量。
·Opened_tables
已经打开的表的数量。如果Opened_tables较大,table_cache值可能太小。
·QCACHE_free_blocks
查询缓存内自由内存块的数量。
·QCACHE_free_memory
用于查询缓存的自由内存的数量。
·QCACHE_hits
查询缓存被访问的次数。
·QCACHE_inserts
加入到缓存的查询数量。
·QCACHE_lowmem_prunes
由于内存较少从缓存删除的查询数量。
·QCACHE_not_cached
非缓存查询数(不可缓存,或由于query_cache_type设定值未缓存)。
·Qcache_queries_in_cache
登记到缓存内的查询的数量。
·Qcache_total_blocks
查询缓存内的总块数。
·Questions
已经发送给服务器的查询的个数。
·Rpl_status
失败安全复制状态(还未使用)。
·Select_full_join
没有使用索引的联接的数量。如果该值不为0,你应仔细检查表的索引。
·Select_full_range_join
在引用的表中使用范围搜索的联接的数量。
·Select_range
在第一个表中使用范围的联接的数量。一般情况不是关键问题,即使该值相当大。
·Select_range_check
在每一行数据后对键值进行检查的不带键值的联接的数量。如果不为0,你应仔细检查表的索引。
·Select_scan
对第一个表进行完全扫描的联接的数量。
·Slave_open_temp_tables
当前由从SQL线程打开的临时表的数量。
·Slave_running
如果该服务器是连接到主服务器的从服务器,则该值为ON。
·Slave_retried_transactions
启动后复制从服务器SQL线程尝试事务的总次数。
·Slow_launch_threads
创建时间超过slow_launch_time秒的线程数。
·Slow_queries
查询时间超过long_query_time秒的查询的个数。参见5.11.4节,“慢速查询日志”。
·Sort_merge_passes
排序算法已经执行的合并的数量。如果这个变量值较大,应考虑增加sort_buffer_size系统变量的值。
·Sort_range
在范围内执行的排序的数量。
·Sort_rows
已经排序的行数。
·Sort_scan
通过扫描表完成的排序的数量。
·Ssl_xxx
用于SSL连接的变量。
·Table_locks_immediate
立即获得的表的锁的次数。
·Table_locks_waited
不能立即获得的表的锁的次数。如果该值较高,并且有性能问题,你应首先优化查询,然后拆分表或使用复制。
·Threads_cached
线程缓存内的线程的数量。
·Threads_connected
当前打开的连接的数量。
·Threads_created
创建用来处理连接的线程数。如果Threads_created较大,你可能要增加thread_cache_size值。缓存访问率的计算方法Threads_created/Connections。
· Threads_running
激活的(非睡眠状态)线程数。
·Uptime
服务器已经运行的时间(以秒为单位)。