MySQL参考手册第5章:服务器管理-系统参数、变量与状态
2014-06-04 15:57
381 查看
服务器管理有几方面,1 命令行及配置文件的选项 2 系统变量 3 系统状态。如果对这3方面能很熟悉,则即可以对MySQL进行较好的调整和监控。然而难点也在于此,这此选项、变量、状态值众多,动辄数百个,需要花费较多的心思才能掌握。
本节不准备进行完整的所有参数、选项、变量、状态等的介绍,只对每个部分最为重点的部分进行介绍。
语法上,命令行选项形如--word-of-param,而配置文件和系统变量则形如word_of_param。
1 Server命令行及配置选项
选项可以通过命令行及配置文件的方式进行传递,这里只介绍选项名称及作用。选项中若有路径相关的指定,可以为绝对路径,若为相对路径,则基于数据库的data路径。
1.1 常用选项
2 数据库系统变量
有大量的系统变量以表示服务器的配置情况,这些配置可以通过配置文件,命令行参数来设置,大部分命令可以通过SET来动态设置。可以通过mysqld --verbose --help来查看。
2.1 系统变量简表
下表列出了常用的系统变量,含义如果与上一节的系统配置相同,则不再详细解释,对于在最新版本中已经删除的选项,不再给出。
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中的工具。
4 SQL模式支持
MySQL使用sql_mode变量来改变不同的模式,以支持不同的SQL语法。目前支持ANSI/PL/MS/ORACLE等等。目前默认没有模式。
5 插件
可以使用show plugins查看插件信息。或者访问information_schema.plugin表。
本节不准备进行完整的所有参数、选项、变量、状态等的介绍,只对每个部分最为重点的部分进行介绍。
语法上,命令行选项形如--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 | 数据库创建临时文件、表的位置 |
有大量的系统变量以表示服务器的配置情况,这些配置可以通过配置文件,命令行参数来设置,大部分命令可以通过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_timeout | 30s | 读取网络字节超时 |
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 | 客户端闲置的秒数后关闭连接 |
在使用命令行选项时,其支持后缀如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 | 刷新状态后的运行时间 |
MySQL使用sql_mode变量来改变不同的模式,以支持不同的SQL语法。目前支持ANSI/PL/MS/ORACLE等等。目前默认没有模式。
5 插件
可以使用show plugins查看插件信息。或者访问information_schema.plugin表。
相关文章推荐
- MySQL - 翻译 - 5.1 Reference Manual参考手册 - 5.1.3 Server System Variables服务器系统变量 - max_heap_table_size
- MySQL数据库服务器逐渐变慢分析与解决(8) 根据mysql状态调整系统参数
- MySQL 系统变量和系统状态参数详解
- MySQL - 5. 数据库管理 - 5.3. mysqld:MySQL服务器 - 5.3.3. 服务器系统变量 - max_allowed_packet
- MySQL数据库服务器逐渐变慢分析与解决(7) 根据mysql状态调整系统参数
- MySQL参考手册第5章:日志管理
- mysql 系统管理参考手册
- 【Linux系统和服务管理】MySQL服务器安装与配置(一)
- MySQL中文参考手册7(MySQL 存取权限系统) grant 设置
- 开源运维服务器信息管理系统 - 安装手册
- 【Linux系统和服务管理】MySQL服务器安装与配置(一)
- 中文参考手册---9MySQL服务器功能
- 管理类应用系统参数配置管理统一解决方法(含代码参考)
- mysql管理----状态参数释义
- mysql服务器变量的管理及其SQL模型浅谈
- mysql权限管理+mysql数据类型+系统变量的查看与修改
- Mysql 系统参数 系统变量 状态变量
- Mysql:命令选项、配置选项、(全局、会话)系统变量、状态变量:状态变量
- 管理类应用系统参数配置管理统一解决方法(含代码参考)
- 管理类应用系统参数配置管理统一解决方法(含代码参考)