Bootstrap

mysql初始化命令 mysqld --initialize 参数说明

 可配置变量:

        mysqld --verbose --help 显示服务器选项和可配置变量一览,从配置文件[mysqld][server]组读取信息。可配参数可以在启动命令中指定,也可以在指定的配置文件中配置。

参数说明
user= 运行mysqld服务器的用户名或用户ID
bind-address=默认0.0.0.0,服务器监听的网络套接字绑定到一个单独的地址
port=监听TCP/IP连接的端口号,必须是1024或更高,除非以root身份运行
port-open-timeout=默认值0,表示服务器应等待多少秒的TCP/IP端口成为免费的
server-id=使用在主服务器和从服务器复制,以标识自己的识别性
chroot将启动mysqld服务器在一个封闭的环境中使用chroot()系统调用
core-file=指定mysql崩溃时生成的core文件路径
core-file-size=指定mysql崩溃时生成的core文件大小
skip-grant-tables服务器启动时不进行权限检查
basedir=默认/,指定mysql安装目录
datadir=默认basedir,指定数据安装目录
socket=默认/tmp/mysql.sock,指定监听本地连接的Unix套接字文件
pid-file=默认/var/lib,指定创建mysql进程ID文件的目录
tmpdir=默认/tmp,指定临时文件的目录
secure-auth=是否启用安全认证,老版本密码是16字节,新版本密码是41字节
safe-user-create是否禁用grant语句创建用户
skip-show-database是否只允许有SHOW DATABASES权限的用户执行SHOW DATABASES
secure-file-priv=指定数据导入导出的文件所在目录,如果指定只能放在该目录中
skip-ssl不使用SSL
ssl-ca=SSL的CA文件路径
ssl-capath=代替ssl-ca,SSL的CA文件路径
ssl-cert=SSL的数字证书文件路径
ssl-cipher=允许使用SSL加密的密码列表
ssl-key=RSA私钥文件路径
default-storage-engine=/default-table-type=设置默认存储引擎
ansi使用标准(ANSI)SQL语法代替MySQL语法
sql-mode=设置支持的sql语法。

ALLOW_INVALID_DATES

        ANSI_QUOTES

        ERROR_FOR_DIVISION_BY_ZERO

        HIGH_NOT_PRECEDENCE

        IGNORE_SPACE

        NO_AUTO_CREATE_USER

        NO_AUTO_VALUE_ON_ZERO

        NO_BACKSLASH_ESCAPES

        NO_DIR_IN_CREATE

        NO_ENGINE_SUBSTITUTION

        NO_FIELD_OPTIONS

        NO_KEY_OPTIONS

        NO_TABLE_OPTIONS

        NO_UNSIGNED_SUBTRACTION

        NO_ZERO_DATE

        NO_ZERO_IN_DATE

        ONLY_FULL_GROUP_BY

        PAD_CHAR_TO_FULL_LENGTH

        PIPES_AS_CONCAT

        REAL_AS_FLOAT

        STRICT_ALL_TABLES

        STRICT_TRANS_TABLES

auto_increment_increment=设置自增列每次增加几,默认为1
auto_increment_offset=设置自增列初始值,默认为1
div_precision_increment=设置用/操作符执行除操作的结果的精确度的位数,默认4,最小0,最大30
enable-named-pipe启用命名管道支持。该选项只适用Windows NT、2000、XP和2003系统,并且只适用支持命名管道连接的mysqld-nt和mysqld-max-nt服务器
enable-pstack打印象征性的堆栈错误信息. 只有在linux系统下,并且mysql有启动选项 --with-pstack才可以使用
engine-condition-pushdown簇相关下推特性
event-scheduler=开关事件调度
skip-event-scheduler关闭事件调度
exit-info这是不同标志的一个位掩码,你可以用来调试mysqld服务器。不要使用该选项,除非你确切知道它在做什么
old-alter-table设置服务器不使用优化的方法执行ALTER TABLE
old-style-user-limits是否启用旧式用户limits
partition启用或禁用用户定义的分区支持
skip-partition禁用用户定义分区支持
plugin_dir=指定插件目录
plugin-load=指定服务器启动时要加载的插件
symbolic-links启用支持符号链接,可以将MyISAM索引文件和数据文件放到除my.cnf指定的data目录外的其他地方
skip-symbolic-links禁用符号链接
sync_frm设置当任何非临时表被创建时,frm文件同步到磁盘
temp-pool设置让临时文件使用的一小部分名称
updatable_views_with_limit设置当视图不包含主键的所有列,并且UPDATE语句中包含一个LIMIT子句时,是否可以更新视图
consolewindows版本才支持,将错误日志消息写入stderr和stdout,即使指定了–log-error。如果使用该选项,mysqld不关闭控制台窗口
allow-suspicious-udfs控制是否用户定义的函数只有一个xxx符,用作可载入的主函数。默认情况下,该选项被关闭,只有至少有一个附属符的UDF 可以载入。这样可以防止从未包含合法UDF的共享文件装载函数。
des-key-file=从该文件读DES_ENCRYPT()和DES_DECRYPT()使用的默认键
group_concat_max_len=允许的GROUP_CONCAT()函数结果的最大长度
max_long_data_size=设定可以由mysql_stmt_send_long_data()这个C API函数所传送的参数值的最大长度,如果没有在mysqld启动时设定,其默认为max_allowed_packet变量的值。MySQL 5.6已经弃用此变量。
sysdate-is-now设置SYSDATE()返回的是当前执行时间而非当前语句开始执行时间
default_week_format=当调用WEEK()或YEARWEEK()函数时,如果不带可选的mode参数,则默认为此变量设置的那个模式值。
character-set-server=设置服务器字符集
collation-server=设置默认的collate排序集
character-set-client-handshake不忽略客户端发来的字符集
skip-character-set-client-handshake忽略客户端发来的字符集
character-set-filesystem=设置文件系统的字符集
character-sets-dir=指定存放字符集的目录
lower_case_file_system设置包含数据目录的文件系统是否区分文件名的大小写。如果此变量的值为ON,则文件名不区分大小写
lower_case_table_names=

在执行CREATE DATABASE和CREATE TABLE语句时,设置如何处理数据库名和表明所对应的目录名和文件名。

0:按照CREATE DATABASE和CREATE TABLE语句里给出的名字来创建磁盘文件,名字的比较会区分大小写。在文件名区分大小写的系统里如Linux,它是默认设置。

1:把CREATE DATABASE和CREATE TABLE语句里给出的名字强制转换为小写形式,名字的比较不区分大小写。在Windows中它是默认设置。

2:按照CREATE DATABASE和CREATE TABLE语句里给出的名字来创建磁盘文件,但是在进行比较时不区分大小写。在Mac OS中它是默认设置。当没有显式设置lower_case_table_names变量时,如果数据目录所在的文件系统不区分文件名的大小写,那么MySQL服务器将自动把此变量设置为2。将此变量设置为非零值,也会使得表的别名不区分大小写

lc-messages=设置错误消息的语言环境
lc-messages-dir=设置错误消息的目录
default-time-zone=设置默认服务器时区。该选项设置全局time_zone系统变量。如果未给出该选项, 默认时区与系统时区相同(用system_time_zone系统变量值给定)
bootstrapmysql_install_db脚本使用该选项来创建MySQL授权表,不需要启动MySQL服务器
memlock设置服务器进程是否锁定在内存
large-pages在Linux中,由于TLB损失减少,应用程序可能通过使用大页会获得性能方面的提升
sort_buffer_size=设置完成排序操作的线程使用的缓冲区大小
table_open_cache=设置服务器能够同时打开表的最大个数
table_definition_cache=设置服务器在其定义缓存里可以存放的表定义(来自.frm文件)个数
range_alloc_block_size=设置在进行范围优化时分配的内存的块大小
query_prealloc_size=设置为分析和执行SQL语句而分配的那个缓冲区的长度
query_alloc_block_size=设置在分析和执行SQL语句时分配的临时内存块大小
stored_program_cache=设置服务器会为每个连接缓存多少存储例程
query_cache_type=

查询的Cache类型。

OFF :不进行缓冲ON:进行缓冲

DEMAND:对SELECT SQL_CACHE开头的查询进行缓冲

query_cache_size=查询Cache的大小
query_cache_min_res_unit=设置为把查询结果存入查询缓存里而分配的内存块大小
query_cache_limit=设置查询结果的最大缓存大小,超过这一大小的查询结果将不会被缓存
query_cache_wlock_invalidate设置当表被写锁定时,客户端能否使用缓存查询
thread_handling=设置服务器用于处理客户端连接的线程模型
slow_launch_time=设置创建“慢”线程所占用的秒数
thread_cache_size=设置线程缓冲区的所能容纳的最大线程个数
big-tables是否允许大数据表
tmp_table_size=设置MySQL内部使用的各种临时表(即服务器在处理SQL语句的过程中自动创建的表)的最大允许长度
skip-networking不监听所有的TCP/IP连接。
skip-name-resolve当检查客户端连接时,不解析主机名
skip-host-cache每次客户端连接时,服务器执行DNS查找禁止内部主机缓存
max_allowed_packet=服务器和客户之间最大的通信的缓冲区长度,即sql语句的长度
connect_timeout=服务器端在响应“失败的握手操作”信息给客户端之前所等待的秒数,默认为10秒
wait_timeout=以秒为单位设定所有SQL语句等待获取元数据锁(metadata lock)的超时时长,默认为31536000(1年),有效取值范围为0-31536000
net_retry_count=设置中断的读取操作被重试的次数。profiling 设置是否开启语句性能分析
profiling_history_size=保持分析信息的SQL语句数量
optimizer_prune_level=设置优化器如何处理中间计划
optimizer_search_depth=设置查询优化器搜索执行计划的深度
optimizer_switch=被关闭或打开的优化器策略。其值为一个以逗号隔开的flag=value设置列表,其中,value的值可以为on或off。你页可以将标志设置为default,以表示不管其默认值为何值都需要返回它;或者将optimizer_switch自己设置为default,将所有的标志都恢复成默认值
open-files-limit=设置在mysqld中可用的文件描述符数量
thread_stack=设置每个线程的堆栈大小
log-output=设置一般查询日志和慢查询日志的目录
log-error=设置记录错误和启动消息的日志的目录
log-warnings设置是否在错误日志中追加警告日志
skip-log-warnings禁用警告日志
slow-query-log设置慢查询日志是否启用
slow_query_log_file=设置慢查询日志的目录
log-queries-not-using-indexes是否记录未使用索引的查询
log-slow-admin-statements是否记录慢查询语句
log-slow-slave-statements是否记录从库超过long_query_time秒数的查询
min-examined-row-limit=设置要检查的行数大于等于N时才记录为慢查询
general-log是否打开查询日志默认为0(or OFF),打开为1(or ON)
general_log_file=是否生成查询日志文件,默认为host_name.log
skip-slave-start设置从库启动时不启动从库线程
read_only此变量控制的是从服务器是否会以只读方式来处理客户连接。默认情况下,read_only的值为OFF,此时,客户端的更新都会以平常的方式(即它们都有权限这样做)被接收。如果把此变量设置为ON,那么只有从主服务器那里接收到的语句(对于从服务器)或者拥有SUPER权限的客户端所执行的语句才能执行更新操作;SET PASSWORD要求SUPER权限。read_only不会应用于TEMPORARY表
init_slave=指定每次SQL线程启动时都会执行的SQL语句
master-info-file=设置master.info的目录
sync_master_info=对于从服务器,如果这个变量为0(默认值),那么从服务器不会强制将它的master.info文件同步到磁盘。实际上,正常的文件系统会执行刷新操作。如果该值大于0,那么从服务器会在每个事件组处理完之后将该文件同步到磁盘
slave_type_conversions=设置在从服务器上进行基于行的复制时允许的各种类型转换。默认值为空串(即不允许转换)。当其值为非空时,它应该是一个以逗号分隔的值列表,其中的值为一个或多个ALL_LOSSY(允许丢失信息的转换)或ALL_NON_LOSSY(允许那些不丢失信息的转换)。此变量是在MySQL 5.5.3里引入的
slave_transaction_retries=设置从服务器重试失败事务的次数
slave_exec_mode=设置mysql 主从复制中insert出现duplicate-key, update出现no-key-found 情况下的处理方式做控制
slave-skip-errors=设置主从复制过程中从服务器可以自动跳过的错误号
slave-load-tmpdir=默认为/tmp,设置从库复制LOAD DATA INFILE语句创建临时文件的目录
slave_compressed_protocol设置是否要对从服务器和主服务器之间的通信进行压缩
slave-max-allowed-packet=为从库的IO线程和SQL线程设置数据包大小
slave-net-timeout=设置从库在等待多少秒后无响应才认为出现网络故障
master-retry-count=设置从库连接主库的重试次数
show-slave-auth-info设置在主库中是否显示从库用户名和密码
report-host=设置将被通知给主库的ip
report-password=设置将被通知给主库的密码
report-port=设置将被通知给主库的端口
report-user=设置将被通知给主库的账号
log-bin=设置二进制日志的目录
log-bin-index=设置二进制日志的索引文的目录
sync_binlog=设置每次写入二进制日志时是否同步二进制日志到磁盘上
binlog-format=可选为ROW, STATEMENT, MIXED,5.1.29后默认为 STATEMENT
max_binlog_size=设置二进制日志文件大小
binlog_cache_size=在事务过程中容纳二进制日志SQL语句的缓存大小。二进制日志缓存是服务器支持事务存储引擎并且服务器启用了二进制日志(–log-bin选项)的前提下为每个客户端分配的内存。如果你经常使用大的,多语句事务,你可以增加该值以获得更有的性能。Binlog_cache_use和Binlog_cache_disk_use状态变量可以用来调整该变量的大小
max_binlog_cache_size=设置二进制日志缓存的最大大小
binlog_stmt_cache_size=设置在事务内执行非事务语句所需要的使用的缓存的大小
max_binlog_stmt_cache_size=设置影响非事务表的语句所需要的使用的缓存的大小
binlog-row-event-max-size=默认为1024,最大规模的基于行的二进制日志的最大大小,值应该是256的倍数
log-short-format设置是否记录二进制日志和慢查询日志
log_slave_updates设置从库是否将从主库得到的变化增加到自己的二进制日志文件中
log-bin-trust-function-creators设置MySQL如何执行存储函数和触发器创建
log-bin-trust-routine-creators设置MySQL执行创建存储过程
binlog_direct_non_transactional_updates可以同时更新事务型表和非事务型表的事务,可能会导致住服务器里的更新与从服务器里的更新不一致,因为对非事务型语句的更新,在它们出现在二进制日志之前,对于其他会话来讲是可见的。启用此变量(默认是禁用的)会导致非事务型更新被立即写到二进制日志里,而不是被缓存起来,一直到事务提交之后才写入。启用此变量,仅对于那些使用基于语句的日志记录进行复制的语句才有效
relay-log=设置从库中继日志的目录
relay-log-index=设置从库中继日志的索引文件的目录
relay-log-info-file=设置中继日志log.info的目录
sync_relay_log=设置每次写入中继日志后,都将变化同步到磁盘
sync_relay_log_info=设置每次写入relay_log_info日志后,都将变化同步到磁盘
relay_log_space_limit=设置全体中继日志文件的最大允许大小
relay_log_purge=设置从服务器会在用完一个中继日志文件之后是否删除
relay_log_recovery设置从服务器删除所有的还未处理的中继日志后还可以再次从主服务器获取它们
binlog-do-db=告诉主服务器,如果当前的数据库(即USE选定的数据库)是db_name,应将db_name中的更新记录到二进制日志中,其它所有没有明显指定的数据库被忽略。如果使用该选项,应确保只对当前的数据库进行更新。
binlog-ignore-db=告诉主服务器,如果当前的数据库(即USE选定的数据库)是db_name,不应将db_name中的更新保存到二进制日志中。如果使用该选项,应确保只对当前的数据库进行更新。
replicate-do-db=根据不同的binlog格式有不同的行为
replicate-ignore-db=根据不同的binlog格式有不同的行为
replicate-do-table=限制复制更新指定的表
replicate-ignore-table=限制不要复制更新指定的表
replicate-wild-do-table=模式可以包含“%”和“_”通配符
replicate-wild-ignore-table=模式可以包含“%”和“_”通配符
replicate-same-server-id 设置相同的server-id是否要复制
replicate-rewrite-db=转换的默认数据库为to_name
innodb_data_home_dir=设置相对于InnoDB表空间组件文件存放位置的目录
innodb_data_file_path=设置InnoDB表空间组件的文件目录
innodb_log_group_home_dir=设置InnoDB日志文件写入的目录
innodb_log_files_in_group=设置日志组中每个日志文件的大小
innodb_log_file_size=设置日志文件的大小
innodb_open_files=设置是否启动独立表空间
innodb_change_buffering=设置InnoDB缓冲表更改辅助索引的延迟写操作方式
innodb_adaptive_hash_index=设置InnoDB是否要使用自适应哈希索引
innodb_autoinc_lock_mode=设置InnoDB用于生成AUTO_INCREMENT值的锁定算法
innodb_large_prefix设置对于那些使用COMPRESSED或DYNAMIC行格式的表,允许前缀最高达到3072个字节
innodb_strict_mode设置InnoDB是否对表和索引的创建和修改语句的语法进行较严格要求
innodb_use_sys_malloc=设置InnoDB是否要使用系统内存分配器
innodb_buffer_pool_size=设置InnoDB用于缓冲表数据和索引的那个缓存的大小
innodb_buffer_pool_instances=设置内存缓冲池实例数量
innodb_max_dirty_pages_pct=设置在InnoDB认为需要将日志刷新到磁盘之前,InnoDB允许脏页占用其缓冲池的百分比
innodb_old_blocks_pct=设置InnoDB缓冲池的旧子列表所占百分比
innodb_old_blocks_time=一个缓冲块在第一次访问之后、下次访问之前,需要在InnoDB缓冲池的旧子列表里待多少毫秒才能移动到新子列表里。默认值为0。表示的是,插到旧子列表里的缓存块,在第一次访问时会立即移到新子列表里去
innodb_additional_mem_pool_size=设置InnoDB存储引擎用来存放各种内部数据结构的内存池的大小
innodb_log_buffer_size=设置InnoDB事务日志缓冲区的大小
innodb_flush_method=设置InnoDB用来刷新文件的方法
innodb_use_native_aio设置在Linux里是否使用异步I/O子系统
innodb_adaptive_flushing设置InnoDB是否会试图通过使用工作负载水平更改缓冲池里脏页刷新频率的方式来避免I/O爆炸
innodb_flush_log_at_trx_commit=InnoDB日志的刷新行为:0:每秒写入一次日志,并刷新到磁盘一次1:每提交一次写入一次日志,并刷新到磁盘一次2:每提交一次写入一次日志,但是每秒刷新到磁盘一次
innodb_io_capacity=设置InnoDB对于后台任务每秒执行I/O操作次数的近似限制
innodb_read_io_threads=设置InnoDB在执行读取操作时会时候多少个线程
innodb_write_io_threads=设置InnoDB在执行写入操作时会使用多少个线程
innodb_read_ahead_threshold=如果InnoDB检测到某个模式的顺序页面方位是由innodb_read_ahead_threshold或多个来自同一范围(页面组)的页面构成,那么它会在下一个范围里执行一个异步预读取操作。默认值为56。允许的取值范围为0~64
innodb_doublewrite设置InnoDB是否启用了双写缓冲区
innodb_purge_threads=InnoDB使用了多少后台线程来实现清除操作(将所有事务都不再需要的待删除行删除掉)
innodb_purge_batch_size=重做日志记录的数量
innodb_max_purge_lag=InnoDB维护着一个清除线程,它可以清除删除操作或更新操作标记的待删除的行。如果小批量行被插入和删除的频率差不多相同,啊呢么清除线程可能会落后,进而导致大量待删除行不能及时清除,而占用着本应该释放的空间。innodb_max_purge_lag变量控制着如何延迟INSERT、DELETE和UPDATE语句,让它们适当放慢速度以便清除线程能够追上它们的进度。默认为0(即不延迟)。如果把此变量设置为一个非零值,那么延迟大约是((n/innodb_max_purge_lag) x10 ) – 5毫秒,其中的n是在执行过程中会把一些行标记为待删除的事务的数量
innodb_file_per_table如果此变量被设置为0(默认值),InnoDB将在其系统表空间里创建新表。如果此变量被设置为1,InnoDB将为每个新表分别创建一个独立表空间:在数据库目录里为每一个新表单独创建一个.ibd文件来存放该表的内容。在这种情况下,系统表空间只会用于InnoDB数据目录条目,而不会用于数据或索引存储。此变量只影响InnoDB如何创建新表。不管如何更改此变量的值,InnoDB存储引擎总是可以访问已经在系统表空间或独立表空间里创建的表
innodb_autoextend_increment=当某个自扩展表空间快要被填满时,InnoDB存储引擎将自动使用此变量的值作为第增量去增加那个表空间的大小。指定值的单位为MB。此变量的默认值是8,最大值是1000
innodb_file_format=如果启用了innodb_file_per_table,则它指的是InnoDB新表所使用的格式。默认格式为Antelope;另一个允许值为Barracuda。使用Barracuda可以启用不被Antelope支持的功能,如COMPRESSED行格式
innodb_file_format_check=InnoDB系统表空间包含有一个标志,它表示的是表空间里使用的最高版本的文件格式。此变量会在服务器启动时设置,主要用于控制InnoDB是否要检查这个标志,以确定此格式版本比InnoDB支持的那个版本更高。如果启用此变量(默认值),并且该格式版本更高,那么启动会失败,并产生一个错误。如果该格式版本不够高,那么InnoDB会将innodb_file_format_max设置成该格式
innodb_file_format_max=参考innodb_file_format_check的描述
innodb_stats_on_metadataInnoDB是否要更新与那些与表元数据访问语句(如SHOW INDEX或SHOW TABLE STATUS)有关的统计信息,或者更新那些与访问STATISTICS表和执行TABLES INFORMATION_SCHEMA语句所得到的各张表有关的统计信息。其效果与运行ANALYZE TABLE相类似。默认值为ON
innodb_stats_sample_pages=在MySQL 5.5里,它指的是用于估计统计信息的InnoDB样本的索引页数量。默认值为8。自MySQL 5.6.3起,此变量已被弃用,请使用innodb_stats_transient_sample_pages
innodb_stats_method=服务器在InnoDB表统计器索引键的分布概率时,应该把NULL值视为相同,还是视为不同。可设置的值包括有:nulls_equal(所有的NULL值在同一个组里)、nulls_unequal(每个NULL值单独成为一组)或nulls_ignored(忽略NULL值)
timed_mutexes =设置是否要搜集InnoDB的互斥时间信息,默认值为OFF
innodb-status-file =设置在data目录中的innodb_status
innodb_fast_shutdown=当此变量的值为0或1时,它表示的是InnoDB是否使用其较快速的关机方法(它会跳过某些正常情况下会执行的操作)。当取值为2时,InnoDB会刷新其日志,然后停止
innodb_force_load_corrupted =设置InnoDB在启动时是否加载已标记为损坏的表
innodb_force_recovery=此变量的值通常为0,但是可以被设置为1~6的某个值,以便让服务器在崩溃后即使InnoDB恢复失败也可以再次启动
innodb_checksums设置InnoDB表是否启用校验计算
transaction-isolation=可供设置的值:READ-UNCOMMITTED、READ-COMMITTED、REPEATABLE-READ、SERIALIZABLE,默认的值为: REPEATABLE-READ,事务隔离级别设置的不同,对二进制日志登记格式影响非常大
transaction_prealloc_size=为处理构成某个事务的语句而分配的那个缓冲区的大小。与那些由transaction_alloc_block_size变量控制的内存分配块不同,这个缓冲区在最后两条语句之间不会被释放
transaction_alloc_block_size=为处理这样一些语句而分配的临时内存的块大小:在事务提交之时,在将事务写入二进制日志之前,需要存储为事务的一部分的语句
completion_type=事务结束类型:1、如果该值为0(默认),COMMIT和ROLLBACK不受影响; 2、如果该值为1,COMMIT和ROLLBACK分别等同于COMMIT AND CHAIN和ROLLBACK AND CHAIN。(新事务用刚刚结束的事务相同的间隔等级立即启动); 3、如果该值为2,COMMIT和ROLLBACK分别等同于COMM它RELEASE和ROLLBACK RELEASE(事务终止后,服务器断开);
innodb_support_xa设置支持XA事务
innodb_table_locks当禁用自动提交模式时,InnoDB会如何处理LOCK TABLE语句,以获得InnoDB表的写锁。如果此变量的值是ON(默认值),InnoDB将申请到一个内部表锁。如果此变量的值是OFF,InnoDB要一直等到没有任何其他线程锁定那个表时才能执行LOCK TABLE语句。禁用此变量可以在一定程度上防止应用程序在自动提交模式已被禁用的情况下发出LOCK TABLE语句时遭遇死锁
innodb_lock_wait_timeout=设置等待某个事务锁的秒数
innodb_locks_unsafe_for_binlog设置InnoDB如何处理索引行锁定
innodb_spin_wait_delay=设置旋转锁的两次轮询之间的最大等待值
innodb_sync_spin_loops=设置线程在被挂起之前等待InnoDB释放互斥信号的次数
innodb_commit_concurrency=设置可以同时提交多少个线程
innodb_thread_concurrency=设置InnoDB尝试维护的线程数量上限
innodb_concurrency_tickets=当某个线程想进入InnoDB时,只有当线程数量小于innodb_commit_concurrency
innodb_replication_delay=如果在从服务器上已达到innodb_thread_concurrency表明的那个限制,那么此变量便是复制线程的延迟时间(单位为毫秒)。默认值为0
innodb_thread_sleep_delay=设置InnoDB线程在被放入InnoDB等待队列之前休眠的时间(单位为毫秒)
innodb_rollback_on_timeout设置InnoDB存储引擎在事务超时时的行为
innodb_rollback_segments=在一个事务里,InnoDB在系统表空间里会使用多少回滚段。默认值为128。此变量是在MySQL 5.5.11里引入的。在5.6.3里,它被替换成了innodb_undo_logs
myisam_data_pointer_size=设置MyISAM索引文件的行指针的字节大小
myisam_use_mmap设置服务器在读写MyISAM表时是否需要使用内存映射
keep_files_on_create如果在创建MySAM表的CREATE TABLE语句里明确给出了DATA DIRECTORY或INDEX DIRECTORY选项,并且服务器在给定的目录里分别找到了一个已有的数据文件或索引文件,那么它会返回一个错误。当没有使用DATA DIRECTORY或INDEX DIRECTORY选项来指定数据文件或索引文件的存放位置时,keep_files_on_create变量会控制服务器如何创建MyISAM表。如果此变量的值为OFF(默认值),并且服务器找到了一个已有的.MYD数据文件或.MYI索引文件,那么它会覆盖该文件。如果此变量的值为ON,服务器会返回一个错误
myisam-block-size=设置被MyISAM索引页使用的块大小
delay-key-write=仅用于MyISAM表,且要求在创建表时使用了DELAY_KEY_WRITE选项。在启用时,key buffer不会在每一次索引更新时都予以清空,而是在表关闭时才执行key buffer清空操作。OFF表示忽略DELAY_KEY_WRITE,ON表示MySQL接受CREATE TABLE时使用的任何DELAY_KEY_WRITE选项,ALL表示所有新打开的表遵循此特性
preload_buffer_size设置MySQL服务器在使用LOAD INDEX语句预加载有关索引时会分配一个多大的缓冲区
myisam_stats_method=服务器在为MyISAM表统计其索引键的分布概率时,应该把NULL值视为相同,还是视为不同。可设置的值包括有:nulls_equal(所有的NULL值在同一个组里)、nulls_unequal(每个NULL值单独成为一组)或nulls_ignored(忽略NULL值)
myisam-recover-options=用于创建启动MySQL时MyISAM 的自动恢复。myisam‐recover‐options选项能使用以下值:DEFAULT:不用备份,强制,或快速检查进行恢复。BACKUP:如果数据文件在恢复时被更改,将MYD 文件的备份保存为 tbl_name‐datetime.BAK。FORCE:即使会从.MYD 文件丢失多于一行仍运行恢复。QUICK:如果没有任何delete块就不检查行。
myisam_repair_threads=设置在修复操作过程中用来创建MyISAM表使用的线程数
key_buffer_size=设置用于缓存MyISAM表索引块的缓冲区大小
key_cache_block_size=设置MyISAM键缓存的块大小
key_cache_age_threshold=设置在被移到暖子链之前,未使用的缓冲块在MyISAM键缓存的热子链里可以保留多久
key_cache_division_limit=在MySQL的Key Cache中所使用的LRU算法并不像传统的算法一样仅仅只是通过访问频率以及最后访问时间来通过一个唯一的链表实现,而是将其分成了两部分。一部分用来存放使 用比较频繁的Hot Cache Lock(Hot Chain),被称作Hot Area,另外一部分则用来存放使用不太频繁的Warm Cache Block(Warm Chain),也被称作Warm Area。这样做的目的主要是为了保护使用比较频繁的Cache Block更不容易被换出。而key_cache_division_limit参数则正是用于告诉MySQL该如何划分整个Cache Chain划分为Hot Chain和Warm Chain两部分,参数值为Warm Chain占整个Chain 的百分比值。设置范围1~100,系统默认为100,也就是只有Warm Chain
read_buffer_size=设置对表进行顺序扫描的那个线程所使用的缓存区的大小
read_rnd_buffer_size=设置在排序后,读取结果数据的缓冲区大小
delayed_queue_size=在某个特定的管理程序队列中有多少个行未执行,则INSERT DELAYED处理线程会等待直到队列中有空间为止,防止mysqld不会把所有存储器都用于被延迟的存储队列
max_delayed_threads=设置为处理INSERT DELAYED语句而允许创建的最大线程数
delayed_insert_limit=插入delayed_insert_limit 延迟行后,INSERT DELAYED 处理器线程检查是否有挂起的SELECT语句。如果有,在继续插入延迟的行之前,允许它们先执行
delayed_insert_timeout=INSERT DELAYED 处理器线程的队列中没有多余的行时表被解锁,多长时间内没有收到新的INSERT DELAYED,则终止
ft_boolean_syntax=使用IN BOOLEAN MODE执行的布尔全文搜索支持的操作符系列,默认变量值为 '+ -><()~*:“”&
ft_max_word_len=ULLTEXT索引中所包含的字的最大长度。注释:更改该变量后必须重建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
bulk_insert_buffer_size=MyISAM使用专用树状缓存来使INSERT、SELECT、INSERT … VALUES (…)、(…)和LOAD DATA INFILE的大块插入更快。该变量用每线程的字节数限制缓存树的大小。将它设置为0禁用优化。注:只有向非空表添加数据时才使用该缓存,默认值是8MB
myisam_sort_buffer_size=在执行类似ALTER TABLE、CREATE INDEX和REPAIR TABLE这样的操作期间,需要分配缓冲区,以便对MyISAM表的索引进行排序。此变量指定的便是该缓冲区的大小
myisam_max_sort_file_size=对于REPAIR TABLE、ALTER TABLE或LOAD DATA等语句,在对MyISAM表进行重建时,既可以使用一个临时文件,页可以使用键缓存。具体使用哪一种方法由这个变量的值来决定。如果临时文件的大小可能会大于这个值,则需要使用键缓存
myisam_mmap_size=设置压缩时的MyISAM表文件在进行内存映射时使用的最大内存量
external-locking外部锁定用于多进程条件下为MyISAM数据表进行锁定。当外部锁定(external-locking)起作用时,每个进程若要访问数据表,则必须等待之前的进程完成操作并解除锁定。由于服务器访问数据表时经常需要等待解锁,因此在单服务器环境下external locking会让MySQL性能下降
skip-external-locking 禁用外部锁定
concurrent_insert=对于在数据文件的中间没用空洞的MyISAM表,MySQL服务器允许在对已有行进行检索的同时在该表的末尾插入新行。此变量控制着服务器是否允许并发插入。此变量的值为0(或NEVER)时,会禁用此功能。此变量的值为1(或AUTO)时,会启用此功能。此变量的值为2(或ALWAYS)时,会对所有的MyISAM表启用并发插入,不管它们的数据文件里是否有空洞;此时,新行将被添加到正被使用的那个表的末尾,或者插到空洞处。默认值为1
skip-concurrent-insert禁用concurrent-insert
low-priority-updates给DML比SELECT更低的优先级
performance_schema=开启performance_schema性能优化的引擎
performance_schema_events_waits_history_long_size=events_waits_history_long表的行数
performance_schema_events_waits_history_size=events_waits_history表的每个线程的行数
performance_schema_max_cond_classes=条件工具的最大数量
performance_schema_max_cond_instances=条件工具对象的最大数量
performance_schema_max_file_classes=文件工具的最大数量
performance_schema_max_file_handles=打开文件对象的最大数量
performance_schema_max_file_instances=工具文件对象的最大数量
performance_schema_max_mutex_classes=互斥锁工具的最大数量
performance_schema_max_mutex_instances=互斥锁对象的最大数量
performance_schema_max_rwlock_classes=读写锁工具的最大数量
performance_schema_max_rwlock_instances=读写锁对象的最大数量
performance_schema_max_table_handles=打开表对象的最大数量
performance_schema_max_table_instances=打开表对象工具的最大数量
performance_schema_max_thread_classes=线程工具的最大数量
performance_schema_max_thread_instances=线程对象工具的最大数量

全局变量

全局变量可以通过SET命令设置,也可以在启动mysql时,在指定的文件中配置

参数说明
autocommit设置事务处理的自动提交模式。默认值为1,因此自动提交功能是启用的,并且语句会立即生效。本质上,每条语句都是其自身的事务。将这个值设置为 0,可以禁用自动提交功能,如此一来,后续语句便只有等到提交完成(可以使用 COMMIT 语句,或者将 autocommit 设置为1来完成提交)之后才能生效。如果提交还未发生,则可以通过 ROLLBACK 来取消事务里的语句。将 autocommit 这时为1,可以重新启用自动提交(并且会隐式提交所有挂起的事务)
back_logMySQL有的主要连接请求的数量。当主MySQL线程在短时间内得到许多连接请求时发挥作用。主线程需要花一些时间(尽管很少)来检查连接并启动一个新线程。back_log值说明MySQL临时停止响应新请求前在短时间内可以堆起多少请求。如果你需要在短时间内允许大量连接,可以增加该数值。换句话说,该值为“进”TCP/IP连接帧听队列的大小。操作系统有该队列自己的限制值。该变量最大值请查阅OS文档。企图将back_log设置为高于你的操作系统限值是徒劳无益的
default_password_lifetime密码过期时间
disconnect_on_expired_password密码过期时的处理
expire_logs_days二进制日志的过期时间
flush执行SQL语句后向硬盘上清空更改。一般情况执行SQL语句后 MySQL向硬盘写入所有更改,让操作系统处理与硬盘的同步
flush_time刷新缓存时间
foreign_key_checks外键检查
have_compress是否可以使用 COMPRESS() and UNCOMPRESS()
have_geometry是否支持地理信息类型
have_dynamic_loading是否可以动态加载插件
have_opensslhave_ssl 是否支持ssl连接
have_profiling是否可以显示sql语句执行时使用的资源
have_statement_timeoutsql语句执行超时
have_symlink是否支持符号连接
identitylast_insert_id
init_connect设定在每个客户端与mysqld建立连接时事先执行的一个或多个(彼此间用分号隔开)SQL语句,但对于具有SUPER权限的用户来说,此功能无效
init-file服务器开始后默认执行的sql文件
insert_id当插入自动增长列类型时,insert要使用的值
interactive_timeout交互式连接的超时时间,mysqld进程等待一个已经建立连接的交互式客户端的后续命令之前所经过的秒数,默认为28800
internal_tmp_disk_storage_engine临时表的存储引擎
join_buffer_sizemysqld用于平面索引扫描(plain index scans)、范围索引扫描或不使用索引的全表扫描时所能够使用的最小缓冲
local_infile是否可以运行LOAD_DATA_LOCAL
lock_wait_timeout锁超时时间,设置等待数据锁的超时时间,单位为秒
locked_in_memory是否把mysqld锁在内存
log_timestamps日志时区
log_error_verbosity是否显示更多信息到日志
long_query_time慢查询时间,设定区别慢查询与一般查询的语句执行时间长度。这里的语句执行时长为实际的执行时间,而非在CPU上的执行时长,因此,负载较重的服务器上更容易产生慢查询。其最小值为0,默认值为10,单位是秒钟。它也支持毫秒级的解析度。作用范围为全局或会话级别,可用于配置文件,属动态变量
max_allow_packet每个报文的最大大小
max_connect_errors最大不成功连接,到达后将阻塞,设定客户端连接至mysqld时的最大错误尝试次数
max_connections最大并发连接数,所有用户同时连接的最大数目,超过此数目的连接将导致请求中断
max_digest_lengthsql运行摘要的最大字节数
max_error_count被SHOW ERRORS和SHOW WARNINGS语句显示的最大数量,设置为SHOW ERRORS或SHOW WARNINGS语句所保留的关于错误、警告或注意信息条目的最大数。作用范围为全局或会话级别,可用于配置文件,属动态变量
max_execution_timeselect语句的超时时间
max_heap_table_size用户创建的内存表的最大大小,设置每个用户创建的MEMORY表所能够使用的最大内存空间
max_join_size语句最大的行或行联合,置SELECT语句执行时所能够检查的行数(单表)或行组合(多表查询)的最大值。此参数可以阻止对键的错误使用而导致的需要执行较长时间的查询操作,因此,其尤其适用于有用户经常使用不带WHERE子句的查询场景中。有效取值范围为1-18446744073709551615,默认为18446744073709551615,这可以被理解为不限制。作用范围为全局或会话级别,可用于配置文件,属动态变量
max_length_for_sort_data决定使用filesort算法的索引值大小,filesort算法改进版所能够使用的字段最大长度值。有效取值范围是4-8388608。MySQL的filesort算法有两个版本,即原始版本和修改版本,字段长度大于max_length_for_sort_data设定的将使用原始版本,小于此参数值的则使用修改版本在排序缓冲(sort buffer)中完成排序。在使用超出字段超出指定长度时使用修改版本算法,由于可能需要更多的I/O操作,将会导致修改版算法执行速度更慢,而不是更快。作用范围为全局或会话级别,可用于配置文件,属动态变量
max_prepared_stmt_count最大预编译语句数量,默认16382,设定prepared语句在服务器总数上限
max_relay_log_size最大复制relay日志大小,中继日志的大小
max_seeks_for_key索引扫描的最大数,查询优化器在进行基于键的查找时会使用此变量。如果某个索引的差异度比较低(只有很少量的唯一值),那么优化器可能会认为在执行键查找操作时需要进行多次查找,从而会采用全表扫描的方式来代替。把此变量设置成某个小一点的值,则会使优化器认为在执行键查找时最多只需要指定数量的索引寻找,从而使其更倾向于选择使用索引,而不会执行全表扫描
max_sort_length排序数据的字节数,设置mysqld执行数值排序时所使用的字节数,剩余的将被忽略。作用范围为全局级别,可用于配置文件,属动态变量
max_sp_recursion_depth存储过程的递归深度
max_user_connections同时连接的mysql用户数,任一用户同时连接的最大数目
max_write_lock_count执行最大数量写锁后,可以执行待执行的读锁,在对某个表使用了max_write_lock_count个写锁定之后,对于那些正在等待获得该表读锁的语句,服务器将适当提升它们的优先级
min_examined_row_limit查询记录少于这个,不记录到慢查询日志
net_buffer_length连接和结果缓存的初始大小,设置服务器和客户之间通讯的使用的缓冲区长度
net_read_timeout服务器读超时,设置mysqld等待从客户端接收更多数据的超时时长,默认值为30
net_retry_timeout服务器读写重试超时
net_write_timeout设置mysqld等待向客户端传输数据的超时时长,默认值为60

my.cnf配置解析

       my.cnf中的配置,都分有各个模块,例如:[mysqld] [client] [mysqladmin]等等。各个模块下的参数指令都各自属于自己的模块,和其他模块相当于隔离。而my.cnf这个配置文件,会被不同的进程所引用处理,例如:mysqld 、 mysqladmin 等等。如果mysqld引入了my.cnf这个配置文件,它只会读取[mysqld]模块下的所有参数指令,不会搭理其他模块下的。

       但有例外,就是上面两个命令 !include 和 !includedir。不管他们两个参数指令,放在my.cnf中的哪一个模块下,任何地方,都会被处理。而新引入的文件中,如果有[mysqld]模块参数指令,就会再添加,没有则什么都不做。!includedir 表示包含指定路径的文件 和 !includedir 指定的这个路径下面的配置文件

#*** client options 相关选项 开始***#
#以下选项会被MySQL客户端应用读取。注意只有MySQL附带的客户端应用程序保证可以读取这段内容。如果你想你自己的MySQL应用程序获取这些值。需要在MySQL客户端库初始化的时候指定这些选项。
[client]
port = 3309
socket =  /usr/local/mysql/tmp/mysql.sock
#*** client options 相关选项 结束***#

#*** mysqld options 相关选项 开始***#
[mysqld]
#包含的配置文件 ,把用户名,密码文件单独存放
!include  /usr/local/mysql/etc/mysqld.cnf 
 
port = 3309
bind-address = 0.0.0.0
#表示是本机的序号为1,唯一
server-id = 1 
 
socket =  /usr/local/mysql/tmp/mysql.sock
pid-file =  /usr/local/mysql/var/mysql.pid
basedir =  /usr/local/mysql/
datadir =  /usr/local/mysql/var/
#此目录被 MySQL用来保存临时文件.例如,它被用来处理基于磁盘的大型排序,和内部排序一样,以及简单的临时表.如果你不创建非常大的临时文件,将其放置到 swapfs/tmpfs 文件系统上也许比较好。另一种选择是你也可以将其放置在独立的磁盘上.你可以使用”;”来放置多个路径,他们会按照 roud-robin 方法被轮询使用.
tmpdir =  /usr/local/mysql/tmp/ 

#当 slave 执行 load data infile 时用
slave-load-tmpdir =  /usr/local/mysql/tmp/ 
 
 
#*** skip options 相关选项 ***#
#禁止 MySQL 对外部连接进行 DNS 解析,使用这一选项可以消除 MySQL 进行 DNS 解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用 IP 地址方式,否则 MySQL 将无法正常处理连接请求!
skip-name-resolve 

 #不能使用连接文件,多个客户可能会访问同一个数据库,因此这防止外部客户锁定 MySQL 服务器。 该选项默认开启
skip-symbolic-links 

 #不使用系统锁定,要使用 myisamchk,必须关闭服务器 ,避免 MySQL的外部锁定,减少出错几率增强稳定性。
skip-external-locking 

 #启动 mysql,不启动复制
skip-slave-start 

 #开启该选项可以彻底关闭 MySQL 的 TCP/IP 连接方式,如果 WEB 服务器是以远程连接的方式访问 MySQL 数据库服务器则不要开启该选项!否则将无法正常连接! 如果所有的进程都是在同一台服务器连接到本地的 mysqld, 这样设置将是增强安全的方法
skip-networking 

#把SYSDATE 函数编程为 NOW的别名 
sysdate-is-now = 1 
 
#*** 系统资源相关选项 ***#
#接受队列,对于没建立 tcp 连接的请求队列放入缓存中,队列大小为 back_log,受限制与 OS 参数,试图设定 back_log 高于你的操作系统的限制将是无效的。默认值为 50。对于 Linux 系统推荐设置为小于512的整数。如果系统在一个短时间内有很多连接,则需要增大该参数的值
back_log = 50 

#指定MySQL允许的最大连接进程数。如果在访问数据库时经常出现"Too Many Connections"的错误提 示,则需要增大该参数值。
max_connections = 1000 

#如果某个用户发起的连接 error 超过该数值,则该用户的下次连接将被阻塞,直到管理员执行 flush hosts ; 命令或者服务重启, 防止黑客 , 非法的密码以及其他在链接时的错误会增加此值
max_connect_errors = 10000 

# MySQL打开的文件描述符限制,默认最小1024;当open_files_limit没有被配置的时候,比较max_connections*5和ulimit-n的值,哪个大用哪个,当open_file_limit被配置的时候,比较open_files_limit和max_connections*5的值,哪个大用哪个。
open_files_limit = 10240 

#连接超时之前的最大秒数,在 Linux 平台上,该超时也用作等待服务器首次回应的时间
connect-timeout = 10 

#等待关闭连接的时间
wait-timeout = 28800 

#关闭连接之前,允许 interactive_timeout(取代了wait_timeout)秒的不活动时间。客户端的会话 wait_timeout 变量被设为会话interactive_timeout 变量的值。如果前端程序采用短连接,建议缩短这2个值, 如果前端程序采用长连接,可直接注释掉这两个选项,默认配置(8小时)  
interactive-timeout = 28800 

#从服务器也能够处理网络连接中断。但是,只有从服务器超过slave_net_timeout 秒没有从主服务器收到数据才通知网络中断
slave-net-timeout = 600 

#从服务器读取信息的超时
net_read_timeout = 30 

#从服务器写入信息的超时
net_write_timeout = 60 

#如果某个通信端口的读操作中断了,在放弃前重试多次
net_retry_count = 10 

#包消息缓冲区初始化为 net_buffer_length 字节,但需要时可以增长到 max_allowed_packet 字节
net_buffer_length = 16384 

# 服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小(当与大的BLOB 字段一起工作时相当必要), 每个连接独立的大小.大小动态增加。 设置最大包,限制server接受的数据包大小,避免超长SQL的执行有问题 默认值为16M,当MySQL客户端或mysqld
服务器收到大于 max_allowed_packet 字节的信息包时,将发出“信息包过大”错误,并关闭连接。对于某些客户端,如果通信信息包过大,在执行查询期间,可能会遇到“丢失与 MySQL 服务器的连接”错误。默认值 16M。
max_allowed_packet = 64M

# 所有线程所打开表的数量. 增加此值就增加了mysqld所需要的文件描述符的数量这样你需要确认在[mysqld_safe]中 “open-files-limit” 变量设置打开文件数量允许至少4096
table_cache = 512 

# 线程使用的堆大小. 此容量的内存在每次连接时被预留.MySQL 本身常不会需要超过 64K 的内存如果你使用你自己的需要大量堆的 UDF 函数或者你的操作系统对于某些操作需要更多的堆,你也许需要将其设置的更高一点.默认设置足以满足大多数应用
thread_stack = 192K 

# 我们在 cache 中保留多少线程用于重用.当一个客户端断开连接后,如果 cache 中的线程还少于 thread_cache_size,则客户端线程被放入 cache 中.这可以在你需要大量新连接的时候极大的减少线程创建的开销(一般来说如果你有好的线程模型的话,
这不会有明显的性能提升.)服务器线程缓存这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,
如果有很多新的线程,增加这个值可以改善系统性能.通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用
根据物理内存设置规则如下:
1G  —> 8
2G  —> 16
3G  —> 32
大于3G  —> 64
thread_cache_size = 20 

# 此允许应用程序给予线程系统一个提示在同一时间给予渴望被运行的线程的数量.该参数取值为服务器逻辑CPU数量×2,在本例中,服务器有 2 颗物理CPU,而每颗物理CPU又支持H.T超线程,所以实际取值为 4 × 2 = 8.设置 thread_concurrency的值的正确与否, 
对 mysql 的性能影响很大, 在多个 cpu(或多核)的情况下,错误设置了 thread_concurrency 的值, 会导致 mysql 不能充分利用多 cpu(或多核),出现同一时刻只能一个 cpu(或核)在工作的情况。 thread_concurrency 应设为 CPU 核数的 2 倍.比如有一个双核的 CPU, 
那么 thread_concurrency 的应该为 4; 2 个双核的 cpu,thread_concurrency 的值应为 8,属重点优化参数
thread_concurrency = 8 
 
#*** qcache settings 相关选项 ***#
# 不缓存查询大于该值的结果.只有小于此设定值的结果才会被缓冲,  此设置用来保护查询缓冲,防止一个极大的结果集将其他所有的查询结果都覆盖.
query_cache_limit = 2M 

# 查询缓存分配的最小块大小.默认是 4KB,设置值大对大数据查询有好处,但如果你的查询都是小数据查询,就容易造成内存碎片和浪费
查询缓存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%
如果查询缓存碎片率超过 20%,可以用 FLUSH QUERY CACHE 整理缓存碎片,或者试试减小query_cache_min_res_unit,如果你的查询都是小数据量的话。
查询缓存利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size *100%
查询缓存利用率在 25%以下的话说明 query_cache_size 设置的过大,可适当减小;查询缓存利用率在 80%以上而且 Qcache_lowmem_prunes > 50 的话说明 query_cache_size 可能有点小,要不就是碎片太多。
查询缓存命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%
query_cache_min_res_unit = 2K 

#指定 MySQL 查询缓冲区的大小。可以通过在 MySQL 控制台执行以下命令观察:
代码:
> SHOW VARIABLES LIKE '%query_cache%';
> SHOW STATUS LIKE 'Qcache%';如果 Qcache_lowmem_prunes 的值非常大,则表明经常出现缓冲不够的情况;
如果 Qcache_hits 的值非常大,则表明查询缓冲使用非常频繁,如果该值较小反而会影响效率,那么可以考虑不用查询缓冲; Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多。
memlock # 如果你的系统支持 memlock() 函数,你也许希望打开此选项用以让运行中的 mysql 在在内存高度
紧张的时候,数据在内存中保持锁定并且防止可能被 swapping out,此选项对于性能有益
query_cache_size = 64M  

 
#*** default settings 相关选项 ***#
# 当创建新表时作为默认使用的表类型,如果在创建表示没有特别执行表类型,将会使用此值
default_table_type = InnoDB 

#服务器时区
default-time-zone = system 

#server 级别字符集
character-set-server = utf8 

#默认存储引擎
default-storage-engine = InnoDB 

 
#*** tmp && heap settings 相关选项 ***#
# 临时表的最大大小,如果超过该值,则结果放到磁盘中,此限制是针对单个表的,而不是总和.
tmp_table_size = 512M 

#独立的内存表所允许的最大容量.此选项为了防止意外创建一个超大的内存表导致永尽所有的内存资源.
max_heap_table_size = 512M 

 
#*** log settings 相关选项 ***#
# 打开二进制日志功能.在复制(replication)配置中,作为 MASTER 主服务器必须打开此项.如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志.这些路径相对于 datadir
log-bin = mysql-bin 

#表示slave将复制事件写进自己的二进制日志 
log_slave_updates = 1 

#二进制的索引文件名 
log-bin-index = mysql-bin.index 

# 定义relay_log的位置和名称,如果值为空,则默认位置在数据文件的目录,文件名为host_name-relay-bin.nnnnnn(By default, relay log file names have the form host_name-relay-bin.nnnnnn in the data directory); 
relay-log = relay-log 

#relay-log的索引文件名 
relay_log_index = relay-log.index  

# 将警告打印输出到错误 log 文件.如果你对于MySQL有任何问题,你应该打开警告 log 并且仔细审查错误日志,查出可能的原因. 
log-warnings = 1 

#错误日志路径 
log-error =  /usr/local/mysql/log/mysql.err 

#参数 log_output 指定了慢查询输出的格式,默认为 FILE,你可以将它设为 TABLE,然后就可以查询 mysql 架构下的 slow_log 表了 
log_output = FILE 

#指定是否开启慢查询日志(该参数要被slow_query_log取代,做兼容性保留) 
log_slow_queries 

# 指定是否开启慢查询日志. 慢查询是指消耗了比 “long_query_time” 定义的更多时间的查询.如果 log_long_format 被打开,那些没有使用索引的查询也会被记录.如果你经常增加新查询到已有的系统内的话. 一般来说这是一个好主意, 
slow_query_log = 1 

# 设定慢查询的阀值,超出次设定值的SQL即被记录到慢查询日志,缺省值为10s.所有的使用了比这个时间(以秒为单位)更多的查询会被认为是慢速查询.不要在这里使用”1″, 否则会导致所有的查询,甚至非常快的查询页被记录下来(由于MySQL 目前时间的精确度只能达到秒的级别). 
long-query-time = 1 

# 在慢速日志中记录更多的信息.一般此项最好打开,打开此项会记录使得那些没有使用索引的查询也被作为到慢速查询附加到慢速日志里 
log_long_format 

# 指定慢日志文件存放位置,可以为空,系统会给一个缺省的文件host_name-slow.log 
slow_query_log_file =  /usr/local/mysql/log/slow.log 

#如果运行的SQL语句没有使用索引,则mysql数据库同样会将这条SQL语句记录到慢查询日志文件中。 
log-queries-not-using-indexes 

#记录那些由于查找了多余1000次而引发的慢查询 
min_examined_row_limit=1000    

#记录那些慢的optimize table,analyze table和alter table语句 
long-slow-admin-statements    

#记录由Slave所产生的慢查询 
log-slow-slave-statements 

#将所有到达MySQL Server的SQL语句记录下来,默认关闭  
general_log = 1 

#general_log路径 
general_log_file =  /usr/local/mysql/log/mysql.log 

# 如果二进制日志写入的内容超出给定值,日志就会发生滚动。你不能将该变量设置为大于1GB或小于4096字节。 默认值是1GB。如果你正使用大的事务,二进制日志还会超过max_binlog_size 
max_binlog_size = 1G 

# 标记relaylog允许的最大值,如果该值为0,则默认值为max_binlog_size(1G);如果不为0,则max_relay_log_size则为最大的relay_log文件大小; 
max_relay_log_size = 1G 

#是否自动清空不再需要中继日志时。默认值为1(启用) 
relay-log-purge = 1 

#超过 30 天的 binlog 删除 
expire_logs_days = 30 

# 在一个事务中 binlog 为了记录 SQL 状态所持有的 cache 大小,如果你经常使用大的,多声明的事务,你可以增加此值来获取更大的性能.所有从事务来的状态都将被缓冲在 binlog 缓冲中然后在提交后一次性写入到 binlog 中,如果事务比此值大, 会使用磁盘上的临时文件来替代.此缓冲在每个连接的事务第一次更新状态时被创建.session 级别 
binlog_cache_size = 1M 

#复制时忽略数据库及表 
replicate-wild-ignore-table = mysql.% 

#定义复制过程中从服务器可以自动跳过的错误号,当复制过程中遇到定义的错误号,就可以自动跳过,直接执行后面的SQL语句。
slave_skip_errors选项有四个可用值,分别为:off,all,ErorCode,ddl_exist_errors。
  默认情况下该参数值是off,我们可以列出具体的error code,也可以选择all,mysql5.6及MySQL Cluster NDB 7.3以及后续版本增加了参数ddl_exist_errors,该参数包含一系列error code(1007,1008,1050,1051,1054,1060,1061,1068,1094,1146)
    一些error code代表的错误如下:
    1007:数据库已存在,创建数据库失败
    1008:数据库不存在,删除数据库失败
    1050:数据表已存在,创建数据表失败
    1051:数据表不存在,删除数据表失败
    1054:字段不存在,或程序文件跟数据库有冲突
    1060:字段重复,导致无法插入
    1061:重复键名
    1068:定义了多个主键
    1094:位置线程ID
    1146:数据表缺失,请恢复数据库
    1053:复制过程中主服务器宕机
    1062:主键冲突 Duplicate entry '%s' for key %d
slave_skip_errors=all 
    
    
#*** MyISAM 相关选项 ***#
# 指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。如果是以InnoDB引擎为主的DB,专用于MyISAM引擎的 key_buffer_size 可以设置较小,8MB 已足够  如果是以MyISAM引擎为主,可设置较大,但不能超过4G. 在这里,强烈建议不使用MyISAM引擎,默认都是用InnoDB引擎.注意:该参数值设置的过大反而会是服务器整体效率降低!
key_buffer_size = 256M 

# 查询排序时所能使用的缓冲区大小。排序缓冲被用来处理类似 ORDER BY 以及 GROUP BY 队列所引起的排序.一个用来替代的基于磁盘的合并分类会被使用.查看 “Sort_merge_passes” 状态变量. 在排序发生时由每个线程分配 注意:该参数对应的分配内存是每连接独占!如果有 100 个连接,那么实际分配的总共排序缓冲区大小为 100 × 6 =600MB,所以,对于内存在 4GB 左右的服务器推荐设置为 6-8M。  
sort_buffer_size = 2M 

# 读查询操作所能使用的缓冲区大小。和 sort_buffer_size 一样,该参数对应的分配内存也是每连接独享!用来做 MyISAM 表全表扫描的缓冲大小.当全表扫描需要时,在对应线程中分配. 
read_buffer_size = 2M 

# 联合查询操作所能使用的缓冲区大小,和 sort_buffer_size 一样,该参数对应的分配内存也是每连接独享!此缓冲被使用来优化全联合(full JOINs 不带索引的联合).类似的联合在极大多数情况下有非常糟糕的性能表现, 但是将此值设大能够减轻性能影响.通过 “Select_full_join”状态变量查看全联合的数量, 当全联合发生时,在每个线程中分配。 
join_buffer_size = 8M 

# MyISAM 以索引扫描(Random Scan)方式扫描数据的 buffer大小  
read_rnd_buffer_size = 8M 

# MyISAM 使用特殊的类似树的 cache 来使得突发插入(这些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATAINFILE) 更快. 此变量限制每个进程中缓冲树的字节数.设置为 0 会关闭此优化.为了最优化不要将此值设置大于 “key_buffer_size”.当突发插入被检测到时此缓冲将被分配MyISAM 用在块插入优化中的树缓冲区的大小。注释:这是一个 per thread 的限制 ( bulk 大量).此缓冲当 MySQL 需要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE到一个空表中引起重建索引时被分配.这在每个线程中被分配.所以在设置大值时需要小心. 
bulk_insert_buffer_size = 64M 

# MyISAM 设置恢复表之时使用的缓冲区的尺寸,当在REPAIR TABLE 或用 CREATE INDEX 创建索引或 ALTER TABLE 过程中排序 MyISAM 索引分配的缓冲区 
myisam_sort_buffer_size = 64M 

#mysql重建索引时允许使用的临时文件最大大小 
myisam_max_sort_file_size = 10G

#如果该值大于 1,在 Repair by sorting 过程中并行创建MyISAM 表索引(每个索引在自己的线程内).如果一个表拥有超过一个索引, MyISAM 可以通过并行排序使用超过一个线程去修复他们.这对于拥有多个 CPU 以及大量内存情况的用户,是一个很好的选择. 
myisam_repair_threads = 1 

#允许的 GROUP_CONCAT()函数结果的最大长度
transaction_isolation = REPEATABLE-READ # 设定默认的事务隔离级别.可用的级别如下:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ,SERIALIZABLE
1.READ UNCOMMITTED-读未提交 2.READ COMMITTE-读已提交 3.REPEATABLE READ -可重复读 4.SERIALIZABLE -串行 
myisam_recover = 64K
 
 
# *** INNODB 相关选项 ***#
# 如果你的 MySQL 服务包含 InnoDB 支持但是并不打算使用的话,使用此选项会节省内存以及磁盘空间,并且加速某些部分
skip-innodb 


# InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间
独立表空间优点:
1.每个表都有自已独立的表空间。
2.每个表的数据和索引都会存在自已的表空间中。
3.可以实现单表在不同的数据库中移动。
4.空间可以回收(除drop table操作处,表空不能自已回收)
缺点:
1.单表增加过大,如超过100G
结论:
共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整:innodb_open_files
innodb_file_per_table = 1 

#启用InnoDB的status file,便于管理员查看以及监控等 
innodb_status_file = 1 

# 限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300 
innodb_open_files = 2048 

#设置InnoDB存储引擎用来存放数据字典信息以及一些内部数据结构的内存空间大小,所以当我们一个MySQL Instance中的数据库对象非常多的时候,是需要适当调整该参数的大小以确保所有数据都能存放在内存中提高访问效率的。 
innodb_additional_mem_pool_size = 100M 
 
#包括数据页、索引页、插入缓存、锁信息、自适应哈希所以、数据字典信息.InnoDB 使用一个缓冲池来保存索引和原始数据, 不像 MyISAM.这里你设置越大,你在存取表里面数据时所需要的磁盘 I/O 越少.在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的 80%,不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸.注意在 32 位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制,所以不要设置的太高. 
innodb_buffer_pool_size = 2G 

# innodb使用后台线程处理数据页上的读写 I/O(输入输出)请求,根据你的 CPU 核数来更改,默认是4
# 注:这两个参数不支持动态改变,需要把该参数加入到my.cnf里,修改完后重启MySQL服务,允许值的范围从 1-64
innodb_write_io_threads = 4
innodb_read_io_threads = 4

#设置此选项如果你希望 InnoDB 表空间文件被保存在其他分区.默认保存在 MySQL 的 datadir 中. 
innodb_data_home_dir =  /usr/local/mysql/var/ 

#InnoDB将数据保存在一个或者多个数据文件中成为表空间.如果你只有单个逻辑驱动保存你的数据,一个单个的自增文件就足够好了.其他情况下.每个设备一个文件一般都是个好的选择.你也可以配置 InnoDB 来使用裸盘分区 – 请参考手册来获取更多相关内容 
innodb_data_file_path = ibdata1:500M;ibdata2:2210M:autoextend

#用来同步 IO 操作的 IO 线程的数量. 此值在 Unix 下被硬编码为 4,但是在 Windows 磁盘 I/O 可能在一个大数值下表现的更好. 
innodb_file_io_threads = 4 

#在 InnoDb 核心内的允许线程数量,InnoDB 试着在 InnoDB 内保持操作系统线程的数量少于或等于这个参数给出的限制,最优值依赖于应用程序,硬件以及操作系统的调度方式.过高的值可能导致线程的互斥颠簸.默认设置为 0,表示不限制并发数,这里推荐设置为0,更好去发挥CPU多核处理能力,提高并发量 
innodb_thread_concurrency = 16

#如果设置为 1 ,InnoDB 会在每次提交后刷新(fsync)事务日志到磁盘上,这提供了完整的 ACID 行为.如果你愿意对事务安全折衷, 并且你正在运行一个小的食物, 你可以设置此值到 0 或者 2 来减少由事务日志引起的磁盘 I/O
代表日志只大约每秒写入日志文件并且日志文件刷新到磁盘.
代表日志写入日志文件在每次提交后,但是日志文件只有大约每秒才会刷新到磁盘上. 
innodb_flush_log_at_trx_commit = 1 

#用来缓冲日志数据的缓冲区的大小.当此值快满时, InnoDB 将必须刷新数据到磁盘上.由于基本上每秒都会刷新一次,所以没有必要将此值设置的太大(甚至对于长事务而言) 
innodb_log_buffer_size = 8M 

#事物日志大小.在日志组中每个日志文件的大小,你应该设置日志文件总合大小到你缓冲池大小的5%~100%,来避免在日志文件覆写上不必要的缓冲池刷新行为.不论如何, 请注意一个大的日志文件大小会增加恢复进程所需要的时间. 
innodb_log_file_size = 500M 

#在日志组中的文件总数.通常来说 2~3 是比较好的. 
innodb_log_files_in_group = 2 

# InnoDB 的日志文件所在位置. 默认是 MySQL 的 datadir.你可以将其指定到一个独立的硬盘上或者一个 RAID1 卷上来提高其性能innodb_max_dirty_pages_pct = 90 #innodb 主线程刷新缓存池中的数据,使脏数据比例小于 90%,这是一个软限制,不被保证绝对执行. 
innodb_log_group_home_dir =  /usr/local/mysql/var/

#InnoDB 事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB 在它自己的 锁定表中自动检测事务死锁并且回滚事务。 InnoDB 用 LOCK TABLES 语句注意到锁定设置。默认值是 50 秒 
innodb_lock_wait_timeout = 50 

# InnoDB 用来刷新日志的方法.表空间总是使用双重写入刷新方法.默认值是 “fdatasync”, 另一个是 “O_DSYNC”. 
innodb_flush_method = O_DSYNC 

# 如果你发现 InnoDB 表空间损坏, 设置此值为一个非零值可能帮助你导出你的表.从1 开始并且增加此值知道你能够成功的导出表.
innodb_force_recovery=1

# 加速 InnoDB 的关闭. 这会阻止 InnoDB 在关闭时做全清除以及插入缓冲合并.这可能极大增加关机时间, 但是取而代之的是 InnoDB 可能在下次启动时做这些操作. 
innodb_fast_shutdown 
 
#*** mysqld options 相关选项 结束***#
 
# *** 其他 相关选项 ***#
#*** mysqldump options 相关选项 开始***#
[mysqldump]
#支持较大数据库的转储,在导出非常巨大的表时需要此项。增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。例如,仅当你发出长查询或mysqld必须返回大的结果行时mysqld才会分配更多内存。该变量之所以取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而导致内存溢出。 如果你正是用大的BLOB值,而且未为mysqld授予为处理查询而访问足够内存的权限,也会遇到与大信息包有关的奇怪问题。如果怀疑出现了该情况,请尝试在mysqld_safe脚本开始增加ulimit -d 256000,并重启mysqld。
quick 

 
#*** mysql options 相关选项 开始***#
[mysql]
#允许通过 TAB 键提示
auto-rehash 

#数据库字符集 
default-character-set = utf8 

connect-timeout = 3

#*** mysql options 相关选项 开始***#
[mysqld_safe]

#增加每个进程的可打开文件数量.确认你已经将全系统限制设定的足够高!打开大量表需要将此值设大
open-files-limit = 8192 

 my.cnf加载顺序:

路径    说明
/etc/my.cnf 全局配置
/etc/mysql/my.cnf 全局配置
SYSCONFDIR/my.cnf全局配置
$MYSQL_HOME/my.cnf 局部配置
defaults-extra-file局部配置
~/.my.cnf 局部配置

       也就是说后加载的配置会将之前加载的配置覆盖掉,最终生效的是后加载的配置。特殊的,如果在使用mysqld_safe启动mysql时使用了参数--defaults-file指定自定义配置文件,将最终使用指定配置文件中的配置,此时要求该配置文件只允许所属用户具有写权限,其他用户不能有写权限,否则启动会报错。

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;