mysql的my.cnf文件详解

1、原因

  最近要接手数据库的维护工做,公司首选MySQL。对于MySQL的理解,我认为不少性能优化工做、主从主主复制都是在调整参数,来适应不一样时期不一样数量级的数据。
故,理解透彻my.cnf里的参数是永恒的话题;只有理解透彻了参数设置,才能在某些方面对数据库进行调优。
 

2、参数详解(补充ing...)

[client]                   #客户端设置,即客户端默认的链接参数
port = 3307                 #默认链接端口
socket = /data/mysqldata/3307/mysql.sock   #用于本地链接的socket套接字
default-character-set = utf8mb4       #编码mysql

[mysqld]                   #服务端基本设置
port = 3307 MySQL监听端口
socket = /data/mysqldata/3307/mysql.sock   #为MySQL客户端程序和服务器之间的本地通信指定一个套接字文件
pid-file = /data/mysqldata/3307/mysql.pid  #pid文件所在目录
basedir = /usr/local/mysql-5.7.11      #使用该目录做为根目录(安装目录)
datadir = /data/mysqldata/3307/data     #数据文件存放的目录
tmpdir = /data/mysqldata/3307/tmp       #MySQL存放临时文件的目录
character_set_server = utf8mb4        #服务端默认编码(数据库级别)
collation_server = utf8mb4_bin        #服务端默认的比对规则,排序规则
user = mysql                 #MySQL启动用户sql

log_bin_trust_function_creators = 1      #This variable applies when binary logging is enabled. It controls whether stored function creators can be trusted not to create stored functions that will cause                        #unsafe events to be written to the binary log. If set to 0 (the default), users are not permitted to create or alter stored functions unless they have the SUPER                        #privilege in addition to the CREATE ROUTINE or ALTER ROUTINE privilege. 开启了binlog后,必须设置这个值为1.主要是考虑binlog安全数据库

performance_schema = 0            #性能优化的引擎,默认关闭缓存

secure_auth = 1               #secure_auth 为了防止低版本的MySQL客户端(<4.1)使用旧的密码认证方式访问高版本的服务器。MySQL 5.6.7开始secure_auth 默认为启用值1安全

#ft_min_word_len = 1             #开启全文索引性能优化

#myisam_recover                #自动修复MySQL的myisam表服务器

explicit_defaults_for_timestamp        #明确时间戳默认null方式网络

event_scheduler                #计划任务(事件调度器)
skip-external-locking            #跳过外部锁定;External-locking用于多进程条件下为MyISAM数据表进行锁定session

skip-name-resolve              #跳过客户端域名解析;当新的客户链接mysqld时,mysqld建立一个新的线程来处理请求。该线程先检查是否主机名在主机名缓存中。若是不在,线程试图解析主机名。并发

                      #使用这一选项以消除MySQL进行DNS解析的时间。但须要注意,若是开启该选项,则全部远程主机链接受权都要使用IP地址方式,不然MySQL将没法正常处理链接请求!

#bind-address = 127.0.0.1          #MySQL绑定IP

skip-slave-start               #为了安全起见,复制环境的数据库仍是设置--skip-slave-start参数,防止复制随着mysql启动而自动启动

slave_net_timeout = 30            #The number of seconds to wait for more data from a master/slave connection before aborting the read. MySQL主从复制的时候,

                       #当Master和Slave之间的网络中断,可是Master和Slave没法察觉的状况下(好比防火墙或者路由问题)。

                       #Slave会等待slave_net_timeout设置的秒数后,才能认为网络出现故障,而后才会重连而且追赶这段时间主库的数据。

                       #1.用这三个参数来判断主从是否延迟是不许确的Slave_IO_Running,Slave_SQL_Running,Seconds_Behind_Master.仍是用pt-heartbeat吧。
                       #2.slave_net_timeout不要用默认值,设置一个你能接受的延时时间。

local-infile = 0               #设定是否支持命令load data local infile。若是指定local关键词,则代表支持从客户主机读文件

back_log = 1024               #指定MySQL可能的链接数量。当MySQL主线程在很短的时间内获得很是多的链接请求,该参数就起做用,以后主线程花些时间(尽管很短)检查链接而且启动一个新线程。

                       #back_log参数的值指出在MySQL暂时中止响应新请求以前的短期内多少个请求能够被存在堆栈中。

#sql_mode = 'PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

sql_mode = NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER  #sql_mode,定义了mysql应该支持的sql语法,数据校验等!  NO_AUTO_CREATE_USER:禁止GRANT建立密码为空的用户。

                             #NO_ENGINE_SUBSTITUTION 若是须要的存储引擎被禁用或未编译,能够防止自动替换存储引擎

key_buffer_size = 32M            #索引块的缓冲区大小,对MyISAM表性能影响最大的一个参数.决定索引处理的速度,尤为是索引读的速度。默认值是16M,经过检查状态值Key_read_requests

                       #和Key_reads,能够知道key_buffer_size设置是否合理

max_allowed_packet = 512M          #一个查询语句包的最大尺寸。消息缓冲区被初始化为net_buffer_length字节,可是可在须要时增长到max_allowed_packet个字节。

                       #该值过小则会在处理大包时产生错误。若是使用大的BLOB列,必须增长该值。
                       #这个值来限制server接受的数据包大小。有时候大的插入和更新会受max_allowed_packet 参数限制,致使写入或者更新失败。

thread_stack = 256K             #线程缓存;主要用来存放每个线程自身的标识信息,如线程id,线程运行时基本信息等等,咱们能够经过 thread_stack 参数来设置为每个线程栈分配多大的内存。

sort_buffer_size = 16M            #是MySQL执行排序使用的缓冲大小。若是想要增长ORDER BY的速度,首先看是否可让MySQL使用索引而不是额外的排序阶段。

                       #若是不能,能够尝试增长sort_buffer_size变量的大小。

read_buffer_size = 16M            #是MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。

                       #若是对表的顺序扫描请求很是频繁,而且你认为频繁扫描进行得太慢,能够经过增长该变量值以及内存缓冲区大小提升其性能。

join_buffer_size = 16M           #应用程序常常会出现一些两表(或多表)Join的操做需求,MySQL在完成某些 Join 需求的时候(all/index join),为了减小参与Join的“被驱动表”的

                      #读取次数以提升性能,须要使用到 Join Buffer 来协助完成 Join操做。当 Join Buffer 过小,MySQL 不会将该 Buffer 存入磁盘文件,

                      #而是先将Join Buffer中的结果集与须要 Join 的表进行 Join 操做,

                      #而后清空 Join Buffer 中的数据,继续将剩余的结果集写入此 Buffer 中,如此往复。这势必会形成被驱动表须要被屡次读取,成倍增长 IO 访问,下降效率。

read_rnd_buffer_size = 32M         #是MySQL的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySQL会首先扫描一遍该缓冲,以免磁盘搜索,

                      #提升查询速度,若是须要排序大量数据,可适当调高该值。但MySQL会为每一个客户链接发放该缓冲空间,因此应尽可能适当设置该值,以免内存开销过大。

net_buffer_length = 16K           #通讯缓冲区在查询期间被重置到该大小。一般不要改变该参数值,可是若是内存不足,能够将它设置为查询指望的大小。

                       #(即,客户发出的SQL语句指望的长度。若是语句超过这个长度,缓冲区自动地被扩大,直到max_allowed_packet个字节。)

myisam_sort_buffer_size = 128M        #当对MyISAM表执行repair table或建立索引时,用以缓存排序索引;设置过小时可能会遇到” myisam_sort_buffer_size is too small”

bulk_insert_buffer_size = 32M        #默认8M,当对MyISAM非空表执行insert … select/ insert … values(…),(…)或者load data infile时,使用树状cache缓存数据,每一个thread分配一个;
                       #注:当对MyISAM表load 大文件时,调大bulk_insert_buffer_size/myisam_sort_buffer_size/key_buffer_size会极大提高速度

thread_cache_size = 384           #thread_cahe_size线程池,线程缓存。用来缓存空闲的线程,以致于不被销毁,若是线程缓存在的空闲线程,须要从新创建新链接,

                      #则会优先调用线程池中的缓存,很快就能响应链接请求。每创建一个链接,都须要一个线程与之匹配。

query_cache_size = 0             #工做原理: 一个SELECT查询在DB中工做后,DB会把该语句缓存下来,当一样的一个SQL再次来到DB里调用时,DB在该表没发生变化的状况下把结果从缓存中返回给Client。
                       #在数据库写入量或是更新量也比较大的系统,该参数不适合分配过大。并且在高并发,写入量大的系统,建系把该功能禁掉。

query_cache_type = 0             #决定是否缓存查询结果。这个变量有三个取值:0,1,2,分别表明了off、on、demand。       

tmp_table_size = 1024M          #它规定了内部内存临时表的最大值,每一个线程都要分配。(实际起限制做用的是tmp_table_size和max_heap_table_size的最小值。)

                     #若是内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下

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

open_files_limit = 10240          #mysql打开最大文件数

max_connections = 2000           #MySQL不管如何都会保留一个用于管理员(SUPER)登录的链接,用于管理员链接数据库进行维护操做,即便当前链接数已经达到了max_connections。

                      #所以MySQL的实际最大可链接数为max_connections+1;
                      #这个参数实际起做用的最大值(实际最大可链接数)为16384,即该参数最大值不能超过16384,即便超过也以16384为准;
                      #增长max_connections参数的值,不会占用太多系统资源。系统资源(CPU、内存)的占用主要取决于查询的密度、效率等;
                      #该参数设置太小的最明显特征是出现”Too many connections”错误;

max-user-connections = 0          #用来限制用户资源的,0不限制;对整个服务器的用户限制

max_connect_errors = 100000         #max_connect_errors是一个MySQL中与安全有关的计数器值,它负责阻止过多尝试失败的客户端以防止暴力破解密码的状况。max_connect_errors的值与性能并没有太大关系。
                      #当此值设置为10时,意味着若是某一客户端尝试链接此MySQL服务器,可是失败(如密码错误等等)10次,则MySQL会无条件强制阻止此客户端链接。

table_open_cache = 5120          #表描述符缓存大小,可减小文件打开/关闭次数;

interactive_timeout = 86400        #interactive_time -- 指的是mysql在关闭一个交互的链接以前所要等待的秒数(交互链接如mysql gui tool中的链接
wait_timeout = 86400            #wait_timeout -- 指的是MySQL在关闭一个非交互的链接以前所要等待的秒数

binlog_cache_size = 16M          #二进制日志缓冲大小
                      #咱们知道InnoDB存储引擎是支持事务的,实现事务须要依赖于日志技术,为了性能,日志编码采用二进制格式。那么,咱们如何记日志呢?有日志的时候,就直接写磁盘?

                     #但是磁盘的效率是很低的,若是你用过Nginx,,通常Nginx输出access log都是要缓冲输出的。所以,记录二进制日志的时候,咱们是否也须要考虑Cache呢?

                     #答案是确定的,可是Cache不是直接持久化,因而面临安全性的问题——由于系统宕机时,Cache中可能有残余的数据没来得及写入磁盘。所以,Cache要权衡,要恰到好处:

                     #既减小磁盘I/O,知足性能要求;又保证Cache无残留,及时持久化,知足安全要求。

slow_query_log = 1             #开启慢查询
long_query_time = 1            #超过的时间为1s;MySQL可以记录执行时间超过参数 long_query_time 设置值的SQL语句,默认是不记录的。

log-slow-admin-statements
log-queries-not-using-indexes       #记录管理语句和没有使用index的查询记录

# *** Replication related settings ***
binlog_format = ROW            #在复制方面的改进就是引进了新的复制技术:基于行的复制。简言之,这种新技术就是关注表中发生变化的记录,而非之前的照抄 binlog 模式。

                      #从 MySQL 5.1.12 开始,能够用如下三种模式来实现:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),

                      混合模式复制(mixed-based replication, MBR)。相应地,binlog的格式也有三种:STATEMENT,ROW,MIXED。MBR 模式中,SBR 模式是默认的。

#max_binlog_cache_size = 102400                 # 为每一个session 最大可分配的内存,在事务过程当中用来存储二进制日志的缓存。
log-bin = /data/mysqldata/3307/binlog/mysql-bin        #开启二进制日志功能,binlog数据位置
log-bin-index = /data/mysqldata/3307/binlog/mysql-bin.index
relay-log = /data/mysqldata/3307/relay/mysql-relay-bin     #relay-log日志记录的是从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,

                               #而后SQL线程会读取relay-log日志的内容并应用到从服务器
relay-log-index = /data/mysqldata/3307/relay/mysql-relay-bin.index #binlog传到备机被写道relaylog里,备机的slave sql线程从relaylog里读取而后应用到本地。

server_id = 100              #服务端ID,用来高可用时作区分
log_slave_updates = 1           #log_slave_updates是将从服务器从主服务器收到的更新记入到从服务器本身的二进制日志文件中。
expire-logs-days = 15           #二进制日志自动删除的天数。默认值为0,表示“没有自动删除”。启动时和二进制日志循环时可能删除。
max_binlog_size = 512M           #若是二进制日志写入的内容超出给定值,日志就会发生滚动。你不能将该变量设置为大于1GB或小于4096字节。 默认值是1GB。

replicate-wild-ignore-table = mysql.%  #replicate-wild-ignore-table参数能同步全部跨数据库的更新,好比replicate-do-db或者replicate-ignore-db不会同步相似
#replicate-wild-do-table = db_name.%   #设定须要复制的Table

#slave-skip-errors = 1062,1053,1146    #复制时跳过一些错误;不要胡乱使用这些跳过错误的参数,除非你很是肯定你在作什么。当你使用这些参数时候,MYSQL会忽略那些错误,

                     #这样会致使你的主从服务器数据不一致。

auto_increment_offset = 1
auto_increment_increment = 2        #这两个参数通常用在主主同步中,用来错开自增值, 防止键值冲突

 

relay_log_info_repository = TABLE     #将中继日志的信息写入表:mysql.slave_realy_log_info
master_info_repository = TABLE       #将master的链接信息写入表:mysql.salve_master_info
relay_log_recovery = on          #中继日志自我修复;当slave从库宕机后,假如relay-log损坏了,致使一部分中继日志没有处理,则自动放弃全部未执行的relay-log,

                     #而且从新从master上获取日志,这样就保证了relay-log的完整性

 

 

# *** innodb setting ***
innodb_buffer_pool_size = 4G        #InnoDB 用来高速缓冲数据和索引内存缓冲大小。 更大的设置可使访问数据时减小磁盘 I/O。

innodb_data_file_path = ibdata1:1G:autoextend  #单独指定数据文件的路径与大小

innodb_flush_log_at_trx_commit = 0      #每次commit 日志缓存中的数据刷到磁盘中。一般设置为 1,意味着在事务提交前日志已被写入磁盘, 事务能够运行更长以及服务崩溃后的修复能力。

                       #若是你愿意减弱这个安全,或你运行的是比较小的事务处理,能够将它设置为 0 ,以减小写日志文件的磁盘 I/O。这个选项默认设置为 0。

#sync_binlog = 1000            #sync_binlog=n,当每进行n次事务提交以后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。

innodb_read_io_threads = 8  
innodb_write_io_threads = 8        #对于多核的CPU机器,能够修改innodb_read_io_threads和innodb_write_io_threads来增长IO线程,来充分利用多核的性能

innodb_file_format = Barracuda      #Innodb Plugin引擎开始引入多种格式的行存储机制,目前支持:Antelope、Barracuda两种。其中Barracuda兼容Antelope格式。

innodb_open_files = 65536         #限制Innodb能打开的表的数量
innodb_purge_threads = 1         #开始碎片回收线程。这个应该能让碎片回收得更及时并且不影响其余线程的操做
innodb_support_xa = FALSE        #分布式事务
innodb_log_buffer_size = 256M      #InnoDB 将日志写入日志磁盘文件前的缓冲大小。理想值为 1M 至 8M。大的日志缓冲容许事务运行时不须要将日志保存入磁盘而只到事务被提交(commit)。

                     #所以,若是有大的事务处理,设置大的日志缓冲能够减小磁盘I/O。

innodb_log_file_size = 1G        #日志组中的每一个日志文件的大小(单位 MB)。若是 n 是日志组中日志文件的数目,那么理想的数值为 1M 至下面设置的缓冲池(buffer pool)大小的 1/n。较大的值,

                    #能够减小刷新缓冲池的次数,从而减小磁盘 I/O。可是大的日志文件意味着在崩溃时须要更长的时间来恢复数据。

innodb_log_files_in_group = 3      #指定有三个日志组

#innodb_lock_wait_timeout = 120     #在回滚(rooled back)以前,InnoDB 事务将等待超时的时间(单位 秒)

innodb_max_dirty_pages_pct = 75     #innodb_max_dirty_pages_pct做用:控制Innodb的脏页在缓冲中在那个百分比之下,值在范围1-100,默认为90.这个参数的另外一个用处:

                    #当Innodb的内存分配过大,导致swap占用严重时,能够适当的减少调整这个值,使达到swap空间释放出来。建义:这个值最大在90%,最小在15%。

                    #太大,缓存中每次更新须要致换数据页太多,过小,放的数据页过小,更新操做太慢。

innodb_buffer_pool_instances = 4     #innodb_buffer_pool_size 一致 能够开启多个内存缓冲池,把须要缓冲的数据hash到不一样的缓冲池中,这样能够并行的内存读写。

innodb_io_capacity = 500        #这个参数据控制Innodb checkpoint时的IO能力

innodb_file_per_table = 1        #做用:使每一个Innodb的表,有自已独立的表空间。如删除文件后能够回收那部分空间。
                     #分配原则:只有使用不使用。但DB还须要有一个公共的表空间。

innodb_change_buffering = inserts    #当更新/插入的非汇集索引的数据所对应的页不在内存中时(对非汇集索引的更新操做一般会带来随机IO),会将其放到一个insert buffer中,

                     #当随后页面被读到内存中时,会将这些变化的记录merge到页中。当服务器比较空闲时,后台线程也会作merge操做

innodb_adaptive_flushing = 1      #该值影响每秒刷新脏页的操做,开启此配置后,刷新脏页会经过判断产生重作日志的速度来判断最合适的刷新脏页的数量;

transaction-isolation = READ-COMMITTED  #数据库事务隔离级别 ,读取提交内容

innodb_flush_method = O_DIRECT      #innodb_flush_method这个参数控制着innodb数据文件及redo log的打开、刷写模式
                        #InnoDB使用O_DIRECT模式打开数据文件,用fsync()函数去更新日志和数据文件。

#innodb_use_sys_malloc = 1        #默认设置值为1.设置为0:表示Innodb使用自带的内存分配程序;设置为1:表示InnoDB使用操做系统的内存分配程序。

 

[mysqldump]
quick                 #它强制 mysqldump 从服务器查询取得记录直接输出而不是取得全部记录后将它们缓存到内存中

max_allowed_packet = 512M        #限制server接受的数据包大小;指代mysql服务器端和客户端在一次传送数据包的过程中数据包的大小
net_buffer_length = 16384        #TCP/IP和套接字通讯缓冲区大小,建立长度达net_buffer_length的行

[mysql]
auto-rehash              #auto-rehash是自动补全的意思

[isamchk]                #isamchk数据检测恢复工具
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

 

[myisamchk]              #使用myisamchk实用程序来得到有关你的数据库桌表的信息、检查和修复他们或优化他们
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout #mysqlhotcopy使用lock tables、flush tables和cp或scp来快速备份数据库.它是备份数据库或单个表最快的途径,彻底属于物理备份,但只能用于备份MyISAM存储引擎和运行在数据库目录所在的机器上.

          #与mysqldump备份不一样,mysqldump属于逻辑备份,备份时是执行的sql语句.使用mysqlhotcopy命令前须要要安装相应的软件依赖包.

相关文章
相关标签/搜索