您的位置:首页 > 数据库 > MySQL

MySQL参考手册第5章:服务器管理-系统参数、变量与状态

2014-06-04 15:57 381 查看
服务器管理有几方面,1 命令行及配置文件的选项 2 系统变量 3 系统状态。如果对这3方面能很熟悉,则即可以对MySQL进行较好的调整和监控。然而难点也在于此,这此选项、变量、状态值众多,动辄数百个,需要花费较多的心思才能掌握。
本节不准备进行完整的所有参数、选项、变量、状态等的介绍,只对每个部分最为重点的部分进行介绍。
语法上,命令行选项形如--word-of-param,而配置文件和系统变量则形如word_of_param。

1 Server命令行及配置选项
选项可以通过命令行及配置文件的方式进行传递,这里只介绍选项名称及作用。选项中若有路径相关的指定,可以为绝对路径,若为相对路径,则基于数据库的data路径。
1.1 常用选项
名称
值类型
含义
--ansi
使用ANSI SQL语法,更精细的控制最好使用sql-mode来控制
--basedir=path
str
指定mysql的安装目录,如果默认从源安装,则为/usr/local/mysql
其下有bin data docs man lib scripts等目录
--big-tables
若所有表均大,此选项可令所有查询时使用的临时表均使用磁盘而不是内存
--binlog-format
{row|statement|mixed}
设定binlog日志格式,默认基于statement的。
在mix情况下,系统会根据事件类型自动切换记录方式。
基于statement日志中记录的是SQL语句。
基于row日志中记录行的变更,服务器会自行对语句进行合并。
--character-set-dir=path
str
指定字符集路径
--character-set-filesystem
str
指定文件系统的字符集,默认为binary
--character-set-server
str
指定服务的默认字符集,默认为latin1
--collation-server
str
指定服务的默认collation,默认为latin1_swedish_ci
--chroot=path
指定chroot的根目录,此设置会对与本地文件系统交换的SQL语句产生影响
--core-file
是否生成coredump
--datadir=path
指定数据存放路径,通常为/var/lib/mysql
--default-storage-engine
指定库的初始存储引擎,默认值为innodb
--default-file=path
指定配置文件路径,若未指定则会搜索/etc/my.cnf ~/my.cnf等
(--skip)--event-shceduler
{ON|OFF|DISABLE}
用于开启关闭event线程
(--skip)--external-locking
使用或关闭MyISAM锁,只在多个服务器实例时才启用
--flush
每次执行后均同步刷新数据到磁盘,但数据写盘将由操作系统控制
--ignore-db-dir=dir
忽略data-dir下的某个目录,show database时将看不到
--log-output=type
指定日志输出的方式,可以file/table
--general-log
{ON|OFF}
设置是否打印日志,此日志会记录所有的sql语句
--general_log_file=file
设置普通日志的输出文件
--slow-query-log
{0|1}
打开或关闭慢查询日志
--slow-query-log-file=name
记录慢查询日志到文件
--log-queries-not-using-indexes
ON|OFF
打开用来记录索引没有生效的查询到慢查询日志中
--log-slow-admin-statements
记录执行慢的管理性SQL语句,如alter create index等
--log-error=file
设置输出错误日志文件,若不指定为host.err
--log-short-format
以简略格式记录日志,默认false
--log-warning=level
记录日志级别0表示禁用,默认为1
--low-priority-updates
设置更新为低优先级
--memlock=ON|OFF
设置mysqld的进程内存不会被切换到磁盘上
--myisam-block-size=N
设置MyISAM索引页大小
--open-file-limit=N
设置同时打开文件个数,服务器会自动根据日志文件进行调整
(--skip)--partition=ON|OFF
设置打开或关闭用户自定义表分区
--pid-file=path
设置pid文件路径
--plugin-load=name-list
需要加载的plugin
--print-defaults
打印所有从配置文件中获得的选项
--secure-file-priv=path
当和本地文件系统交互时的目录
--skip-grant-table
不加载授权表
--skip-innodb
关闭innodb引擎
--skip-host-cache
不使用本地hosts文件的名称解析,只能使用DNS
--skip-name-resolve
当客户端连接时,关闭dns解析
--skip-networking
不打开网络,只使用UNIX域或共享内存
(--skip)--symbolic-links
在使用链接时,可以在创建表时指定其他目录的将myisam索引文件和数据文件
--socket=path
设置sock文件路径,默认为/tmp/mysql.sock
--transaction-isolation
read-uncommited|
read-commited|
repeatable-read|
serializable
设置服务器的默认隔离级别
--transaction-read-only
{ON|OFF}
声明事务只读,默认为读/写的,对于只读型应用将提升性能
--tmpdir=path
数据库创建临时文件、表的位置
2 数据库系统变量
有大量的系统变量以表示服务器的配置情况,这些配置可以通过配置文件,命令行参数来设置,大部分命令可以通过SET来动态设置。可以通过mysqld --verbose --help来查看。

2.1 系统变量简表
下表列出了常用的系统变量,含义如果与上一节的系统配置相同,则不再详细解释,对于在最新版本中已经删除的选项,不再给出。
名称
值类型含义
autocommit = 0|1
为真时,每次执行将自动提交,否则将根据COMMIT才提交
back_log=N
若为-1则系统自动调整,正值表示固定的值,等待连接队列的最大值
basedir=path
安装路径
big_tables
character_set_server
str
服务器的默认字符集
character_set_database
指定数据库的字符集
character_set_filesystem
本地文件系统文件所使用的字符集
character_set_client
当不能确定客户端所使用的字符集时,使用此设置
character_set_connection
character_set_result
返回给客户的结果的字符集
collation_*
和字符集相关的排序规则的设定
character_set_dir
current_insert
0|1|2
用于控制MyISAM表的并发0表示不并发,1表示自动,2表示总是
datadir
default_storage_engine
event_scheduler
显示事件线程状态
expire_log_days=N
0-99
自动清除日志的天数,0表示不自动清除
flush
foreign_key_checks
1|0
对于INNODB是否启用外键检查
ft_max_word_len
全文检索最大词长
ft_min_word_len
ft_stopword_file
全文索引的stop词的文件地址
general_log
genral_log_file
have_xxx
xxx功能是否可用
如innodb,openssl,partitioning,profiling,query_cache,have_rtree_keys,have_symlink
hostname
主机名
host_cache_size
DNS查询缓存,-1为自动调整
identity
与last_insert_id变量同,记录了可用的下一个插入ID
ignore_db_dirs
init_connect=sql
每个客户端连接建立时,执行的命令
init_file=file
启动SERVER时将执行的文件
insert_id
在key自增时,下一个将要使用id
join_buffer_size
256K
用于不使用索引时的联表操作的缓冲区。
此值建议全局值设置小,而在某些大表连接时的会话上设置较大的值
每个连接独占内存。
key_buffer_size
MyISAM表索引的缓冲区,为所有线程共享。
此值不要非常大,若导致数据需要文件系统交换,则会导致性能变差
与此值相关的状态可能用key%过滤出
key_cache_block_size
每个key_buffer中block的大小,默认为1024
large_files_support
编译时是否支持大文件
large_pages
是否支持大页面
last_insert_id
上次插入的ID
local_infile
是否支持Load data local
lock_wait_timeout
获取元数据锁的等待超时秒数
locked_in_memeory
是否锁定于内存
log_error=file
错误日志路径
log_output
file|
table
log_queries_not_using_index
log_slow_admin_statements
slow_query_log
是否打开慢查询日志
slow_query_log_file
慢查询日志位置
long_query_time
慢查询日志记录的时间
log_warning
long_query_time
low_priority_updates
lower_case_file_system
说明数据所在目录的文件系统是否大小写敏感
low_case_table_names
是否用小写表名保存到硬盘
max_allowed_packet
网络传输中,一次传输最大包大小
max_connect_errors
主机在重复连接失败指定次数后将被服务器block
除非用flush hosts来解锁
max_connections
最大允许连接数
max_join_size
不执行单个表检查超过过大行或多个表联合超过过大行
这样防止误操作导致过长的SELECT查询
max_prepared_stmt_count
限制最多可执行的prepare语句
max_relay_log_size
指定从库relay日志的最大长度
max_sort_length
排序时只取前N长度参加排序
max_user_connections
单个用户最多连接数
net_buffer_length
16K
每个客户连接线程的数据接收和发送缓存大小
net_read_timeout30s
读取网络字节超时
net_retry_count
10
读取网络重试次数
net_write_timeout
60s
open_files_limit
自动计算当前系统允许打开的文件个数
optimizer_prune_level
0|1
是否支持启发式裁剪算法
optimizer_search_depth
N
优化器查询的最大深度,0表示系统自动
optimizer_switch
SET
优化项集合
pid_file
plugin_dir
profiling
是否打开性能计数,show profiles可查看
query_cache_limit=N
查询缓存存储的结果集大小限制,大于N的请求结果将不会被缓存
query_cache_size=NM
设置查询缓存的大小
query_cache_type
0|1|2
默认为1,缓存所有,除非查询时指明SQL_NO_CACHE
0表示不缓存,2表示只缓存SQL_CACHE的结果
read_buffer_size
线程连续扫描MyISAM表时为每个表分配的读缓存区大小
若进行多次扫描,需要增加此值。为每连接独占
read_only
打开时只允许用户读,除非权限为SUPER
read_rnd_buffer_size
当需要排序输出时,则输出于此缓冲区,以改善ORDER BY性能
此值将为每个客户端分配,全局值设置小,而大查询的客户端应设置大
relay_log_purge
1|0
在不需要reley日志时,自动清理之
relay_log_space_limit
0
所有relay log的最大空间大小
server_id=#
在复制时,用于标识每个实例
skip_extenal_locking
skip_name_resolve
skip_netwoking
socket
sort_buffer_size
256K
每个排序线程分配的缓存大小,为每个连接独占
report_*
在主从同步时,从向主发送的认证用户信息
包含host/user/password/port
sql_select_limit
设置select可返回的最大行数
storage_engine
显示存储引擎
table_open_cache
对于所有线程可以打开的表数
thread_cache_size
线程池线程数
thread_pool_size
16
thread_handling=mode
线程使用方式,one-thread-per-connection或 dynamically-loaded
tmp_table_size
16M
内存临时表大小,超过此值,数据会写入磁盘
tmp_dir
tx_isolation
显示当前的事务级别
tx_read_only
unique_checks
是否支持INNODB的第二索引的检查
version
wait_timeout
客户端闲置的秒数后关闭连接
2.2 使用系统变量
在使用命令行选项时,其支持后缀如M,G,K,但运行时不支持,运行时必须为表达式,如1*1024*1024;另外,命令行或配置文件选项必须为数字,如1或0,但在运行时则必须为ON|OFF;不合适的语法会导致收到一个错误。

系统变量分为两类,全局变量和会话变量。会话变量只对当前连接有效,保持到连接结束,且对其他客户端连接不可见。若动态的改变全局变量,则只有新连接的客户端可见,不会影响已有连接的会话变量。

系统变量可以通过show golbal|session variable来查看,也可以通过select @@global|session.variable来查看。但并不是所有的变量都支持SELECT方式查看。如果没有加g/s限定,则为会话级别的。

可以使用用SET来修改变量的值,全局变量的修改必须有SUPER权限,而会话变量的修改不需要特殊权限。

3 服务器状态变量
Status状态变量看起来比较多,但是除去com_xxx之后,数量基本少了一半。这些变量统计了数据库运行的方方面面的计数器信息,对于分析查询性能等非常有帮忙。下面列出对于性能分析比较有用的状态变量。
开源社区有一些脚本通过分析状态变量给出一些配置或索引优化的建议,比如mysqlreport及percona-toolkit中的工具。

名称
含义
binlog_cache_disk_use
因日志文件过小导致事务日志必须写磁盘文件的大小
binlog_cache_use
binlog cache使用
com_xxx
SQL的语句执行的次数,执行一个com_XX语句可能会导致handler_XX计数增加多次
connections
服务器接受的连接计数
create_tmp_disk_tables
创建的磁盘表的数量
create_tmp_file
创建的临时文件的数量
create_tmp_table
创建临时表的数量
handler_delete
表里删除行数
handler_read_first
读取索引第一项的次数,此值过大,说明执行的索引扫描较多
handler_read_key
基于主键读取行的次数,此值大说明索引效率高
handler_read_last
读取索引最后一项的次数
handler_read_next
以键序读取下一行的次数,此值大说明执行的范围索引较多
handler_read_prev
以键序读取上一行的次数,此值大说明执行的倒序排序较多
handler_read_rnd
在表文件中round才能获得一行的次数
此值大说明需要扫描整个表的查询较多
handler_read_rnd_next
同上,此值大说明表索引不佳或者有查询没有利用索引
handler_update/write
表中更新及插入的行数
Innodb_buffer_pool_read_request
IDB完成的读请求数
Innodb_buffer_pool_reads
不在BUFF而IDB必须访问磁盘才能完成的访问数
此值大说明BUF较小,热数据不能常驻内存
Innodb_buffer_pool_wait_free
访问时必须等待空页的次数swap
Innodb_buffer_pool_write_requests
完成的写次数
Innodb_data_read/written
读取/写入的数据字节数
Innodb_data_reads/writes
读取/写入的次数
Innodb_num_open_files
当前打开的文件数
Innodb_row_lock_time_avg
行锁使用平均时间,毫秒
Innodb_row_lock_waits
等待行锁次数
Innodb_row_inserted/deleted/read/updated
key_blocks_used/unused
MyISAM的key块使用情况
key_read_requests
读key块次数
key_reads
读key块未命中,必须访问硬盘的次数,过多说明key cache过小
key_write_request/key_writes
Last_query_const
上次查询消耗,此值可以用来比较不同的查询方案
Max_used_connections
最大并发连接数
Open_files
当前打开的文件数
Open_table_definitions
当前打开的.frm文件数
Open_tables
当前打开的表数
Opened_xxx
已经打开的XXX的次数
此值过大,说明相应的cache过小
导致XX不能被缓存,使用完被关闭,而在后面现次打开及关闭
Qcache_hits
命中Qcache的次数,若此值过小,说明Qcache作用不大
Qcache_insert
缓存入Qcache中的次数
Qcache_lowmem_prunes因Qcache内存过低而导致数据被清除的次数
此值过大,说明cache过小
Qcache_not_cached
未走缓存的查询数
Qcache_queries_in_cache
当前缓存到Qcache的数量
Queries
执行的语句数,不包含存储过程
Questions
执行的语句数,包含存储过程
Select_full_join
因不能使用索引而进行全表扫描的联结数
若不为0,则需要优化索引
Select_full_range_join
在引用的表中,使用范围搜索的联结数量
Select_range
在第一张表上使用范围进行联结的数量
这个不是关键问题,可以比较大
Select_range_check
若此值较大,需要检查索引
Select_scan
对第一个表进行完全扫描的联结数量
Slow_queries
慢查询个数
Sort_merge_passes
排序算法执行合并操作的次数
此值较大需要增加sort_buffer_size
Sort_range
使用范围进行排序的次数
Sort_rows
排序的行数
Sort_scan
通过扫描表进行排序的次数
Table_locks_immediate
立即获得表锁的次数
Table_locks_waited
等待表锁的次数
Threads_cached
缓存的线程数
Threads_created
因缓存不足而创建的线程数
Threads_running
当前运行线程数
Uptime
运行时间
Uptime_since_flush_status
刷新状态后的运行时间
4 SQL模式支持
MySQL使用sql_mode变量来改变不同的模式,以支持不同的SQL语法。目前支持ANSI/PL/MS/ORACLE等等。目前默认没有模式。

5 插件

可以使用show plugins查看插件信息。或者访问information_schema.plugin表。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: