本文转自:http://blog.chinaunix.net/uid-20607558-id-1916088.html
mysqld服务器维护两种变量。全局变量影响服务器的全局操作。会话变量影响具体客户端连接相关操作。
可以在选项文件或命令行中设置全局变量。
用Set命令设置会话变量,当然它也可以设置全局变量。
就像oracle里面的初始化参数文件一样。下面是一些常用的选项说明,MySQL的管方文档上也有。
如
mysql> SET GLOBAL sort_buffer_size = 10 * 1024 * 1024;
mysql> SET SESSION sort_buffer_size = 10 * 1024 * 1024;
如果你想用SET语句限制系统变量可设的最大值,可以在服务器启动时通过--maximum-var_name形式的选项来指定。
例如,要想防止query_cache_size的值运行时超过32MB,使用选项--maximum-query_cache_size=32M。
mysqld_safe选项
--basedir=path
MySQL安装目录的路径。
--core-file-size
mysqld能够创建的内核文件的大小。选项值传递给ulimit -c。
--datadir=path
数据目录的路径。
--defaults-file=path
读取的代替通用选项文件的选项文件名。如果给出,必须首选该选项。
--log-error=path
将错误日志写入给定的文件。
-nice=priority
使用nice程序根据给定值来设置服务器的调度优先级。
--open-files-limit=count
mysqld能够打开的文件的数量。选项值传递给 ulimit -n。请注意你需要用root启动mysqld_safe来保证正确工作!
--pid-file=path
进程ID文件的路径。
--port=port_num
用来帧听TCP/IP连接的端口号。端口号必须为1024或更大值,除非MySQL以root系统用户运行。
每个mysqld的Unix套接字文件和TCP/IP端口号必须不同。
--ledir=path
包含mysqld程序的目录的路径。使用该选项来显式表示服务器位置。
--no-defaults
不要读任何选项文件。如果给出,必须首选该选项。
--skip-character-set-client-handshake
忽略客户端发送的字符集信息,使用服务器的默认字符集。
--socket=path
用于本地连接的Unix套接字文件。
每个mysqld的Unix套接字文件和TCP/IP端口号必须不同。
--timezone=zone
为给定的选项值设置TZ时区环境变量。
--user={user_name | user_id}
以用户名user_name或数字用户ID user_id运行mysqld服务器。
该"用户"指系统登录账户,而不是 授权表中的MySQL用户。
mysqld命令行选项
mysqld从[mysqld]和[server]组读取选项
--ansi
使用标准(ANSI)SQL语法代替MySQL语法。
--basedir=path, -b path
MySQL安装目录的路径。通常所有路径根据该路径来解析。
--bootstrap
mysql_install_db脚本使用该选项来创建MySQL授权表,不需要启动MySQL服务器
--console
将错误日志消息写入stderr和stdout,即使指定了--log-error。
--character_sets_dir=path
字符集安装的目录。
--chroot=path
通过chroot()系统调用在启动过程中将mysqld服务器放入一个封闭环境中。这是推荐的一个安全措施。请注意使用该选项可以 限制LOAD DATA INFILE和SELECT ... INTO OUTFILE。
--character_set_server=charset
使用charset作为 默认服务器字符集。
--core_file
如果mysqld终止,写内核文件。
--datadir=path, -h path
数据目录的路径。
--default_table_type=type
设置表的默认类型。
--debug[=debug_options], -# [debug_options]
如果MySQL配置了--with-debug,你可以使用该选项来获得一个跟踪文件,跟踪mysqld正进行的操作。debug_options字符串通常为'd:t:o,file_name'。
--default_time_zone=type
设置默认服务器时区。该选项设置全局time_zone系统变量。默认时区与系统时区相同(用system_time_zone系统变量值给定)
--delay_key_write[= OFF | ON | ALL]
如何使用DELAYED KEYS选项。键写入延迟会造成再次写MyISAM表时键缓冲区不能被清空。该选项只适用MyISAM表。
OFF DELAY_KEY_WRITE被忽略。
ON MySQL在CREATE TABLE中用DELAY_KEY_WRITE选项。这是 默认值。
ALL 用启用DELAY_KEY_WRITE选项创建表的相同方法对所有新打开表的进行处理。
如果启用了DELAY_KEY_WRITE,说明使用该项的表的键缓冲区在每次更新索引时不被清空,只有关闭表时才清空。
但如果你使用该特性,你应用--myisam_recover选项启动服务器,为所有MyISAM表添加自动检查。
--external_locking
用系统锁定。请注意如果你在lockd不能完全工作的系统上使用该选项(例如在Linux中),mysqld容易死锁。
如果你在许多MySQL进程中使用该选项来更新MyISAM表,你必须确保满足下述条件:
使用正被另一个进程更新的表的查询的缓存不可使用。
不应在共享表中使用--delay-key-write=ALL或DELAY_KEY_WRITE=1。
最简单的方法是结合使用--external-locking和--delay-key-write=OFF --query-cache-size=0。
(默认不能实现,因为在许多设置中,结合使用上述选项很有用)。
--flush
执行SQL语句后向硬盘上清空更改。一般情况执行SQL语句后 MySQL向硬盘写入所有更改,让操作系统处理与硬盘的同步。
--init_file=file
启动时从该文件读SQL语句。每个语句必须在同一行中并且不应包括注释。
--language=lang_name, -L lang_name
用给定语言给出客户端错误消息。默认情况下,mysqld用英语给出错误消息。
--large_pages
一些硬件/操作系统架构支持大于 默认值(通常4 KB)的内存页。实际支持取决于使用的硬件和OS。
大量访问内存的应用程序通过 使用较大的页,降低了Translation Lookaside Buffer (TLB)损失,可以改善性能。
默认情况下该选项被禁用。
---log[=file], -l [file]
如果你想要知道mysqld内部发生了什么,你应该用--log[=file_name]或-l [file_name]选项启动它。如果没有给定file_name的值, 默认名是host_name.log。所有连接和语句被记录到日志文件。当你怀疑在客户端发生了错误并想确切地知道该客户端发送给mysqld的语句时,该日志可能非常有用。
mysqld按照它接收的顺序记录语句到查询日志。这可能与执行的顺序不同。
--log_bin=[file]
二进制日志文件。将更改数据的所有查询记入该文件。用于备份和复制。
建议指定一个文件名,否则MySQL使用host_name-bin作为日志文件基本名。
运行服务器时若启用二进制日志则性能大约慢1%。
--binlog_do_db=db_name
告诉主服务器,如果当前的数据库(即USE选定的数据库)是db_name,应将更新记录到二进制日志中。
--binlog_ignore_db=db_name
告诉主服务器,如果当前的数据库(即USE选定的数据库)是db_name,不应将更新保存到二进制日志中。
--log_error[=file]
该文件的日志错误和启动消息.
如果你不指定文件名,MySQL使用host_name.err作为文件名。如果文件名没有扩展名,则加上.err扩展名。
--log_isam[=file]
将所有MyISAM更改记入该文件
--log_slow_queries[=file]
将所有执行时间超过long_query_time 秒的查询记入该文件。
--log_warnings, -W
将警告例如Aborted connection...打印到错误日志。建议启用该选项,默认也是启用的。
--memlock
将mysqld 进程锁定在内存中。请注意使用该选项时需要以root运行服务器,但从安全考虑并不是一个好注意。
--myisam_recover [=option[,option...]]]
存储引擎MyISAM设置为恢复模式。该选项值是DEFAULT、BACKUP、FORCE或QUICK值的任何组合。
如果你指定多个值,用逗号间隔开。
使用如果该选项,当mysqld打开MyISAM表时,检查是否表标记为崩溃或没有正确关闭。
如果是这种情况,mysqld则检查 表。如果表被破坏,mysqld试图维护它。
DEFAULT 与没有使用--myisam-recover选项相同。
BACKUP 如果在恢复过程中,数据文件被更改了,将tbl_name.MYD文件备份为tbl_name-datetime.BAK。
FORCE 即使.MYD文件将丢掉多个行也进行恢复。
QUICK 如果没有删除块,不要检查表中的行。
--open_files_limit=count
用来更改mysqld文件描述符的数量。
--pid_file=path
mysqld_safe使用的进程ID文件的路径。
--port=port_num, -P port_num
帧听TCP/IP连接时使用的端口号。
--safe_mode
跳过一些优化阶段。
--skip_bdb
禁用BDB存储引擎。这样可以节省内存,并可能加速某些操作。如果你需要BDB表则不要使用该选项。
--skip_concurrent_insert
关闭在同一时间在MyISAM表中选择和插入的能力。(只有你发现缺陷时才使用该选项)。
--skip_grant_tables
该选项使服务器不使用权限系统。该权限允许访问服务器的用户不受限制地访问所有数据库
--skip_external_locking
不要使用系统锁定。
--skip_host_cache
为了更快地在名称-IP之间进行解析,不要使用内部主机名缓存。相反,每次客户端连接时查询DNS服务器。
--skip_innodb
禁用InnoDB存储引擎。这样可以节省内存,并可能加速某些操作。
--skip_networking
不帧听TCP/IP连接。必须通过命名管道或共享内存(在Windows中)或Unix套接字文件(在Unix中)完成mysqld的相互操作。
对于只允许本地客户端的系统,大力推荐该选项。
--socket=path
在Unix中,该选项指定用于本地连接的Unix套接字文件。
--skip_safemalloc
如果MySQL配置了--with-debug=full,所有MySQL程序在内存分配和释放时检查内存是否溢出。
检查很慢,因此如果你不需要你可以用--skip-safemalloc选项来避免。
--transaction_isolation=level
设置默认事务隔离级别,可以READ-UNCOMMITTED、READ-COMMITTEE、REPEATABLE-READ或SERIALIZABLE。
默认为REPEATABLE-READ。
--tmpdir=path, -t path
创建临时文件的目录路径。
--temp_pool
该选项使服务器创建的大多数临时文件使用一系列文件名,而不是每个新文件使用唯一的文件名。
--bdb_cache_size
为BDB表缓存索引和行分配的缓冲区的大小。如果你不使用BDB表,你应用--skip-bdb启动mysqld以便不浪费该缓存。
--bdb_home
BDB表基准目录。应与datadir变量的值相同。
--bdb_log_buffer_size
为BDB表缓存索引和行分配的缓冲区的大小。
-- bdb_logdir
BDB存储引擎写它日志文件的目录。
--bdb_max_lock
在BDB表下可以激活的最大锁数(默认为10,000)。
-- binlog_cache_size
在事务过程中容纳二进制日志SQL语句的缓存大小。
二进制日志缓存是服务器支持事务存储引擎并且服务器启用了二进制日志(--log-bin选项)的前提下为每个客户端分配的内存。
--bulk_insert_buffer_size
MyISAM 使用专用树状缓存来使INSERT ... SELECT、INSERT ... VALUES (...)、(...)、 ...和LOAD DATA INFILE的大块插
入更快。注释:只有向非空表添加数据时才使用该缓存。 默认值是8MB。
--character_set_client
来自客户端的语句的字符集。
--character_set_database
默认数据库使用的字符集。当默认数据库更改时,服务器则设置该变量。
如果没有默认数据库,变量的同character_set_server。
--character_set_results
用于向客户端返回查询结果的字符集。
--character_sets_dir
字符集安装目录。
--completion_type
事务结束类型:
如果该值为0(默认),COMMIT和ROLLBACK不受影响。
如果该值为1,COMMIT和ROLLBACK分别等同于COMMIT AND CHAIN和ROLLBACK AND CHAIN。
(新事务用刚刚结束的事务相同的间隔等级立即启动)。
如果该值为2,COMMIT和ROLLBACK分别等同于COMMIT RELEASE和ROLLBACK RELEASE。(事务终止后,服务器断开)。
--concurrent_insert
如果为ON(默认值),MySQL允许INSERT和SELECT语句在中间没有空数据块的MyISAM表中并行运行。
0 关
1 (默认)在没有空数据块的MyISAM表中启用并行插入
2 为所有MyISAM表启用并行插入。如果表有空记录或正被另一线程使用,新行将插入到表的最后。
如果表未使用,MySQL将进行普通读锁定并将新行插入空记录。
-- 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。
-- expire_logs_days
二进制日志自动删除的天数。默认值为0,表示“没有自动删除”。启动时和二进制日志循环时可能删除。
--flush_time
如果设为非零值,每隔flush_time秒则关闭所有表以释放硬盘资源并同步未清空的数据。
我们建议只在Windows 9x或Me,或有最小资源的系统中使用该选项。
--init_connect
服务器为每个连接的客户端执行的字符串。字符串由一个或多个SQL语句组成。要想指定多个语句,用分号间隔开。
例如:[mysqld]
init_connect='SET AUTOCOMMIT=0'
-- join_buffer_size
用于完全联接的缓冲区的大小(当不使用索引的时候使用联接操作)。
--key_buffer_size
MyISAM表的索引块分配了缓冲区,由所有线程共享。key_buffer_size是索引块缓冲区的大小。键值缓冲区即为键值缓存。
key_buffer_size的最大允许设定值为4GB。通常为主要运行MySQL的机器内存的25%。
以通过执行SHOW STATUS语句并检查Key_read_requests、Key_reads、Key_write_requests和Key_writes状态变量来检查键值缓冲区的性能。
Key_reads/Key_read_requests比例一般应小于0.01。如果你使用更新和删除,Key_writes/Key_write_requests比例通常接近1,但如果你更新时会同时影响到多行或如果你正使用DELAY_KEY_WRITE表选项,可能小得多。
1 - ((Key_blocks_unused * key_cache_block_size) / key_buffer_size)
该值为约数,因为键值缓冲区的部分空间被分配用作内部管理结构。
-- key_cache_block_size
键值缓存内块的字节大小。默认值是1024。
-- locked_in_memory
是否用-memlock将mysqld锁在内存中。
-- lower_case_file_system
该变量说明是否数据目录所在的文件系统对文件名的大小写敏感。ON说明对文件名的大小写不敏感,OFF表示敏感。
-- lower_case_table_names
如果设置为1,表名用小写保存到硬盘上,并且表名比较时不对大小写敏感。
如果设置为2,按照指定的保存表名,但按照小写来比较。
数据库中的每个表至少对应数据库目录中的一个文件(也可能是多个,取决于存储引擎)。
因此,所使用操作系统的大小写敏感性决定了数据库名和表名的大小写敏感性。
这说明在大多数Unix中数据库名和表名对大小写敏感,而在Windows中对大小写不敏感。
-- 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_connect_errors
如果中断的与主机的连接超过该数目,该主机则阻塞后面的连接。你可以用 FLUSH HOSTS语句解锁锁定的主机。
-- max_connections
允许的并行客户端连接数目。
-- 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_join_size
不允许可能需要检查多于max_join_size行(为单个表语句)或行组合(为多个表语句)或可能执行大于max_join_size次硬盘查询的SELECT语句。通过设置该值,你可以捕获键使用不正确并可能花很长时间的SELECT语句。
将该变量设置为DEFAULT之外的值,将SQL_BIG_SELECTS的值重设为0。
-- max_length_for_sort_data
确定使用的filesort算法的索引值大小的限值。
-- max_relay_log_size
如果复制从服务器写入中继日志时超出给定值,则滚动中继日志。通过该变量你可以对中继日志和二进制日志设置不同的限制。但是,将该变量设置为0,MySQL可以对二进制日志和中继日志使用max_binlog_size。max_relay_log_size必须设置在4096字节和1GB(包括)之间,或为0。 默认值是0。
--- max_seeks_for_key
限制根据键值寻找行时的最大搜索数。MySQL优化器假定当用扫描键在表内搜索匹配的行时,不需要超过该数量的键值搜索,而不管键的实际基数是什么。将该值设置为较低的值(100?),你可以强制MySQL选择键值而不选择表扫描。
---Max_sort_length
当排序BLOB或TEXT值时使用的字节数。只使用每个值的前max_sort_length字节;其它的被忽略。
--max_tmp_tables
客户端可以同时打开的临时表的最大数。
--- max_user_connections
任何给定的MySQL账户允许的最大同时连接数。0值表示“没有限制”。
--- max_write_lock_count
超过写锁定限制后,允许部分读锁定。
-- max_allowed_packet
包或任何生成的/中间字符串的最大大小。
包消息缓冲区初始化为net_buffer_length字节,但需要时可以增长到max_allowed_packet字节。
该值默认很小,以捕获大的(可能是错误的)数据包。
如果你使用大的BLOB 列或长字符串,你必须增加该值。应同你想要使用的最大的BLOB一样大。
max_allowed_packet的协议限制为1GB。
---myisam_data_pointer_size
默认指针大小,单位是字节,当未指定MAX_ROWS选项时,CREATE TABLE使用该变量创建MyISAM表。
该变量不能小于2或大于7。 默认值是6。
--- myisam_sort_buffer_size
当在REPAIR TABLE或用CREATE INDEX创建索引或ALTER TABLE过程中排序 MyISAM索引分配的缓冲区。
--- myisam_max_sort_file_size
重建MyISAM索引(在REPAIR TABLE、ALTER TABLE或LOAD DATA INFILE过程中)时,允许MySQL使用的临时文件的最大空间大小。
如果文件的大小超过该值,则使用键值缓存创建索引,要慢得多。该值的单位为字节。
---myisam_stats_method
当为MyISAM表搜集关于索引值分发的统计信息时服务器如何处理NULL值。
该变量有两个可能的值,nulls_equal和nulls_unequal。
nulls_equal表示所有的null值是相同的,nulls_unequal表示把每个null值都当成一个不同的值。
-- net_buffer_length
在查询之间将通信缓冲区重设为该值。一般情况不应改变,但如果内存很小,
可以将它设置为期望的客户端发送的SQL语句的长度。如果语句超出该长度,缓冲区自动扩大,直到max_allowed_packet字节。
--- query_cache_limit
不要缓存大于该值的结果。默认值是1048576(1MB)。
---query_cache_min_res_unit
查询缓存分配的最小块的大小(字节)。 默认值是4096(4KB)。
--- query_cache_size
为缓存查询结果分配的内存的数量。默认值是0,即禁用查询缓存。
--- query_cache_type
设置查询缓存类型。该变量默认设为ON。
0或OFF 不要缓存或查询结果。请注意这样不会取消分配的查询缓存区。要想取消,你应将query_cache_size设置为0。
1或ON 缓存除了以SELECT SQL_NO_CACHE开头的所有查询结果。
2或DEMAND 只缓存以SELECT SQL_NO_CACHE开头的查询结果。
--- query_cache_wlock_invalidate
一般情况,当客户端对MyISAM表进行WRITE锁定时,如果查询结果位于查询缓存中,则其它客户端未被锁定,
可以对该表进行查询。将该变量设置为1,则可以对表进行WRITE锁定,使查询缓存内所有对该表进行的查询变得非法。
这样当锁定生效时,可以强制其它试图访问表的客户端来等待。
--- query_prealloc_size
用于查询分析和执行的固定缓冲区的大小。在查询之间该缓冲区不释放。如果你执行复杂查询,
分配更大的query_prealloc_size值可以帮助提高性能,因为它可以降低查询过程中服务器分配内存的需求。
--- read_buffer_size
每个线程连续扫描时为扫描的每个表分配的缓冲区的大小(字节)。如果进行多次连续扫描,可能需要增加该值,
默认值为131072。
--- read_only
当变量对复制从服务器设置为ON时,从服务器不允许更新,除非通过从服务器的线程或用户拥有SUPER权限。
--- relay_log_purge
当不再需要中继日志时禁用或启用自动清空中继日志。默认值是1(启用)。
--read_rnd_buffer_size
当排序后按排序后的顺序读取行时,则通过该缓冲区读取行,避免搜索硬盘。将该变量设置为较大的值可以大大改进ORDER BY的性能。但是,这是为每个客户端分配的缓冲区,因此你不应将全局变量设置为较大的值。相反,只为需要运行大查询的客户端更改会话变量。
--- skip_networking
如果服务器只允许本地(非TCP/IP)连接,该值为ON。在Unix中,本地连接使用Unix套接字文件。
在Windows中,本地连接使用命名管道或共享内存
---sort_buffer_size
每个排序线程分配的缓冲区的大小。增加该值可以加快ORDER BY或GROUP BY操作。
---sync_binlog
如果为正,当每个sync_binlog'th写入该二进制日志后,MySQL服务器将它的二进制日志同步到硬盘上(fdatasync())。
请注意如果在autocommit模式,每执行一个语句向二进制日志写入一次,否则每个事务写入一次。
---sync_frm
如果该变量设为1,当创建非临时表时它的.frm文件被同步到硬盘上(fdatasync());这样较慢但出现崩溃时较安全。
默认值为1。
--- table_cache
所有线程打开的表的数目。增大该值可以增加mysqld需要的文件描述符的数量。
你可以检查Opened_tables状态变量来检查你是否需要增加表缓存。
---thread_cache_size
服务器应缓存多少线程以便重新使用。当客户端断开连接时,如果线程少于thread_cache_size,则客户端的线程被放入缓存。当请求线程时如果允许可以从缓存中重新利用线程,并且只有当缓存空了时才会创建新线程。如果新连接很多,可以增加该变量以提高性能。(一般情况,如果线程执行得很好,性能提高不明显)。检查Connections和Threads_created状态变量的差,可以看见线程缓存的效率。