优化mysql的性能,详细介绍Mysql的配置my.cnf的参数

[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 ########### 个人1G内存没有设置此项使用的默认值 50,目前观察还不错。
# 1. 指定MySQL可能的链接数量,当MySQL主线程在很短的时间内接收到很是多的链接请求,该参数生效,主线程花费很短的时间检查链接而且启动一个新线程。
# 2. back_log参数的值指出在MySQL暂时中止响应新请求以前的短期内多少个请求能够被存在堆栈中。 若是系统在一个短期内有不少链接,则须要增大该参数的值,该参数值指定到来的TCP/IP链接的侦听队列的大小。不一样的操做系统在这个队列大小上有它本身的限制。
# 3. 注意:试图设定back_log高于你的操做系统的限制将是无效的。默认值为50。对于Linux系统推荐设置为小于512的整数。

key_buffer_size  = 256M ########### 我设置的128M,目前观察还不错。
# 只对MyISAM表起做用,指定用于索引的缓冲区大小,增长它可获得更好的索引处理性能。尤为是索引读的速度。
# 1. 对于内存在4GB左右的服务器该参数可设置为256M或384M。
# 2. 另一个估计key_buffer_size的办法 把你网站数据库的每一个表的索引所占空间大小加起来看看, 以此服务器为例:比较大的几个表索引加起来大概125M 这个数字会随着表变大而变大.
# 3. 通常咱们设为16M,实际上稍微大一点的站点 这个数字是远远不够的,经过检查状态值 Key_read_requests和Key_reads,能够知道key_buffer_size设置是否合理。比例 key_reads / key_read_requests应该尽量的低,至少是1:100,1:1000更好(上述状态值可使用SHOW STATUS LIKE ‘key_read%’得到)。
如下的状态值都是本人(hexu.org)经过 Sqlyog 得到的实例分析:
    #> SHOW STATUS LIKE 'key_read%'
    ##> key_read_requests – 650759289
    ##> key_reads - 79112
    ##> 比例接近1:8000 健康情况很是好
# 4. 注意:该参数值设置的过大反而会是服务器总体效率下降! 

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

query_cache_limit = 2M

query_cache_size  = 64M  ########### 个人1G内存设置为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 ########### 个人1G内存设置为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
# 没找到具体说明,不过设置为32后 20天才建立了400多个线程 而之前一天就建立了上千个线程 因此仍是有用的 

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 ########### 个人设置为2
#被全文检索索引的最小的字长. 你也许但愿减小它,若是你须要搜索更短字的时候. 注意在你修改此值以后,你须要重建你的 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支持 
相关文章
相关标签/搜索