mysql配置文件详解

可能搞运维的同学都会体会到在做mysql优化的时候mysql相关参数给我们带来的困惑,可能网上有很多类似的文档,但是各位仁者见仁智者见智,适合自己才重要。

下面是我整理的mysql相关参数。

# vi /etc/my.cnf

以下只列出my.cnf文件中[mysqld]段落中的内容,其他段落内容对MySQL运行性能影响甚微,姑且忽略。

[mysqld]

port  = 3306

serverid  = 1

socket    = /tmp/mysql.sock

skip-locking              #避免MySQL的外部锁定,减少出错几率增强稳定性。

skip-networking   #开启该选项可彻底关闭MySQL的TCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项!否则将无法正常连接!

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

back_log = 384  #默认为50

# 1.指定MySQL可能的连接数量,当MySQL主线程在很短的时间内接收到非常多的连接请求,该参数生效,主线程花费很短的时间检查连接并且启动一个新线程。

# 2.back_log参数值指出在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中。 如果系统在一个短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的侦听队列的大小。不同的操作系统在这个队列大小上有它自己的限制。

# 3. 注意:试图设定back_log高于操作系统的限制将是无效的。默认值为50。Linux系统推荐设置为小于512的整数。

key_buffer_size  = 256M              #默认设置为16M

只对MyISAM表起作用,指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。尤其是索引读的速度。

# 1. 对于内存在4GB左右的服务器该参数可设置为256M或384M。

# 2. 另外估计key_buffer_size的办法 把网站数据库的每个表的索引所占空间大小加起来看看,比较大的几个表索引加起来大概为多少。数字随着表变大而变大.

# 3.默认设为16M,稍微大点的站点这个数字是远远不够的,通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。如key_reads/key_read_requests应尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE‘key_read%’获得)。

# 4.注意:该参数值设置过大反而会使服务器整体效率降低!

query_cache_type  = 1 # 指定是否使用查询缓冲

query_cache_limit = 2M              

query_cache_size  = 64M 

使用查询缓冲,MySQL将Select语句和查询结果存放在缓冲区中,今后对于同样的Select语句(区分大小写),将直接从缓冲区中读取结果。

# 1. 根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。 指定MySQL查询缓冲区的大小。可以通过在MySQL控制台执行以下命令观察:

#> SHOW VARIABLES LIKE '%query_cache%';

#> SHOW STATUS LIKE 'Qcache%';

# 1. 如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,同时Qcache_hits的值非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小

 # 2. 如果Qcache_hits的值不大,则表明查询重复率很低,这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。此外,在Select语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲。

# 3. 如果Qcache_free_blocks的值非常大,则表明缓冲区中碎片很多

max_allowed_packet = 4M

thread_stack  = 256K

table_cache    = 256

# 指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,可以更快地访问表内容。

# 1. 对于有1G内存的机器,推荐值是128-256。

# 2. 通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加table_cache的值。

# 3. 如果发现open_tables等于table_cache,并且opened_tables在不断增长,那么就需要增加table_cache的值。

    #> SHOW STATUS LIKE ’Open%tables‘;

    # 1. Open tables 256

    # 2. Opened tables 9046

# 虽然open_tables已经等于table_cache,但是相对于服务器运行时间来说,已经运行了20 天,opened_tables的值也非常低。因此,增加table_cache的值应该用处不大。如果运行了6个小时就出现上述值 那就要考虑增大table_cache

# 4. 注意:不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。

sort_buffer_size   = 6M # 查询排序时所能使用的缓冲区大小。

read_buffer_size   = 4M # 读查询操作所能使用的缓冲区大小。

join_buffer_size   = 8M # 联合查询操作所能使用的缓冲区大小

# 注意:sort/read/join_buffer_size 三个参数对应的分配内存是每连接独占!如果有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。所以,对于内存在4GB左右的服务器推荐设置为6-8M。

myisam_sort_buffer_size = 64M

table_cache     = 512

tmp_table_size     = 256M

max_connections    = 768

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

max_connect_errors = 10000000

wait_timeout       = 10

# 指定一个请求的最大连接时间,对于4GB左右内存的服务器可以设置为5-10。

thread_cache         32

thread_concurrency = 8

#该参数取值为服务器逻辑CPU数量×2,如:服务器有2个CPU,而每个CPU支持H.T超线程,实际取值为4×2=8

thread_cache_size  = 8

# 默认是 8 ,这个值表示可以重新利用保存在缓存中线程的数量, 当断开连接时:

# 1. 如果缓存中还有空间,那么客户端的线程将被放到缓存中,

# 2. 如果线程重新被请求,那么请求将从缓存中读取,

# 3. 如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,

# 4. 如果有很多新的线程,增加这个值可以改善系统性能.通过比较Connections和Threads_created状态的变量,可以看到这个变量的作用。

# 5. 根据物理内存设置规则如下:

# Mem: 1G  设置为8、Mem: 2G设置为16、Mem: 3G设置为 32、Mem: >3G设置为 64

ft_min_word_len = 4

#被全文检索索引的最小的字长,如果需要搜索更短字的时候,在修改此值之后,需要重建的 FULLTEXT 索引

log-bin  = /home/mysql/logs/binlog/mysql-bin

#如果不需要记录2进制log 就把该功能关掉,注意关掉以后就不能恢复出问题前的数据,需要手动备份,

# 1. 二进制日志包含所有更新数据的语句,其目的是在恢复数据库时用它来把数据尽可能恢复到最后的状态。

# 2. 如果做同步复制( Replication )的话,也需要使用二进制日志传送修改情况。

# 3. 如果不提供文件名,MySQL将自己产生缺省文件名。MySQL会在文件名后面自动添加数字引,每次启动服务时,都会重新生成一个新的二进制文件。

# 4. 此外说明:

1. 使用log-bin-index可以指定索引文件;

2. 使用binlog-do-db可以指定记录的数据库;

3. 使用binlog-ignore- db可以指定不记录的数据库。

#注意:binlog-do-db和binlog-ignore-db一次只指定一个数据库,指定多个数据库需要多个语句

#注意:MySQL会将所有的数据库名称改成小写,在指定数据库时必须全部使用小写名字,否则不会起作用。

log_slow_queries = /home/mysql/logs/slowlog/slow.query

# 指定日志文件,如果不提供文件名,MySQL将自己产生缺省文件名。

long_query_time  = 2    

#如果查询时间大于 2s,就记录慢查询到log_slow_querys指的文件中

log_long_format

# 打开此项会记录使得那些没有使用索引的查询也被作为到慢速查询附加到慢速日志里

log-queries-not-using-indexes

# 打开此项会记录使得那些没有使用索引的查询也被作为到慢速查询附加到慢速日志里

skip-innodb 

#去掉innodb支持

 

你可能感兴趣的:(mysql参数)