mysql动态系统变量简介
当启动选项设置变量时,变量值可以后缀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语句查看系统变量及其值。
此处描述了大多数系统变量。没有版本的变量在所有MySQL 5.1 发布中适用。关于其使用历史信息,若没有另行规定,缓冲区大小、长度和堆栈大小的单位均为字节。
· 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列的方式:
o auto_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来获取这些变量的当前值)。
o auto_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。
· auto_increment_offset
该变量的默认值为1。详见auto_increment_increment的描述。
· back_log
MySQL有的主要连接请求的数量。当主MySQL线程在短时间内得到许多连接请求时发挥作用。主线程需要花一些时间(尽管很少)来检查连接并启
动一个新线程。back_log值说明MySQL临时停止响应新请求前在短时间内可以堆起多少请求。如果你需要在短时间内允许大量连接,可以增加该
数值。
换句话说,该值为“进”TCP/IP连接帧听队列的大小。操作系统有该队列自己的限制值。本手册中Unix listen()系统调用页应有更详细的信息。该
变量最大值请查阅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
状态变量可以用来调整该变量的大小。
· bulk_insert_buffer_size
MyISAM 使用专用树状缓存来使INSERT ... SELECT、INSERT ... VALUES (...)、(...)、 ...和LOAD DATA INFILE的大块插入更快。该变量用每线程的
字节数限制缓存树的大小。将它设置为0禁用优化。注释:只有向非空表添加数据时才使用该缓存。 默认值是8MB。
· character_set_client
来自客户端的语句的字符集。
· character_set_connection
用于没有字符集导入符的文字和数字-字符串转换。
· character_set_database
默认数据库使用的字符集。当默认数据库更改时,服务器则设置该变量。如果没有默认数据库,变量的值同character_set_server。
· character_set_results
用于向客户端返回查询结果的字符集。
· character_set_ server
服务器的默认字符集。
· character_set_system
服务器用来保存识别符的字符集。该值一定是utf8。
· character_sets_dir
字符集安装目录。
· collation_connection
连接字符集的校对规则。
· collation_database
默认数据库使用的校对规则。当默认数据库改变时服务器则设置该变量。如果没有默认数据库,变量的值同collation_server。
· collation_server
服务器的默认校对规则。
· completion_type
事务结束类型:
o 如果该值为0(默认),COMMIT和ROLLBACK不受影响。
o 如果该值为1,COMMIT和ROLLBACK分别等同于COMMIT AND CHAIN和ROLLBACK AND CHAIN。(新事务用刚刚结束的事务
相同的间隔等级立即启动)。
o 如果该值为2,COMMIT和ROLLBACK分别等同于COMM它RELEASE和ROLLBACK RELEASE。(事务终止后,服务器断开)。
· concurrent_insert
如果为ON(默认值),MySQL允许INSERT和SELECT语句在中间没有空数据块的MyISAM表中并行运行。你可以用--safe或--skip-new启动mysqld关闭
该选项。
该变量为整数,有3个值:
值描述
0 关
1 (默认)在没有空数据块的MyISAM表中启用并行插入
2
为所有MyISAM表启用并行插入。如果表有空记录或正被另一线程使用,新行将插入到表的最后。如果表未使用,MySQL将进行普通
读锁定并将新行插入空记录。
· connect_timeout
mysqld服务器用Bad handshake响应前等待连接包的秒数。
· datadir
MySQL数据目录。可以用--datadir选项设置该变量。
· date_format
该变量未使用。
· datetime_format
该变量未使用。
· default_week_format
WEEK() 函数使用的默认模式。
· delay_key_write
该选项只适用MyISAM表。它具有下述值可以影响CREATE TABLE语句使用的DELAY_KEY_WRITE表选项的处理。
选项描述
OFF DELAY_KEY_WRITE被忽略。
ON MySQL在CREATE TABLE中用DELAY_KEY_WRITE选项。这是 默认值。
ALL 用启用DELAY_KEY_WRITE选项创建表的相同方法对所有新打开表的进行处理。
如果启用了DELAY_KEY_WRITE,说明使用该项的表的键缓冲区在每次更新索引时不被清空,只有关闭表时才清空。遮掩盖可以大大加快键的写操
作,但如果你使用该特性,你应用--myisam-recover选项启动服务器,为所有MyISAM表添加自动检查(例如,--myisam-recover=BACKUP,FORCE)。
请注意--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执行的布尔全文搜索支持的操作符系列。
默认变量值为 '+ -><()~*:""&|'。更改这些值的规则是:
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
- 最新评论