调整MySQL运行参数,修改/etc/my.cnf文件调整mysql运行参数重启MySQL后生效,在MySQL4版本之后,一部份内部变量能够在MySQL运行时设置,不太重启MySQL就失效了。
mysqld程序--目录和文件
basedir = path # 使用给定目录做为根目录(安装目录)。
datadir = path # 从给定目录读取数据库文件。
pid-file = filename # 为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统);
[mysqld]
socket = /tmp/mysql.sock # 为MySQL客户程序与服务器之间的本地通讯指定一个套接字文件(Linux下默认是/var/lib/mysql/mysql.sock文件)
port = 3306 # 指定MsSQL侦听的端口
key_buffer = 384M # key_buffer是用于索引块的缓冲区大小,增长它可获得更好处理的索引(对全部读和多重写)。
索引块是缓冲的而且被全部的线程共享,key_buffer的大小视内存大小而定。
table_cache = 512 # 为全部线程打开表的数量。增长该值能增长mysqld要求的文件描述符的数量。能够避免频繁的打开数据表产生的开销
sort_buffer_size = 2M # 每一个须要进行排序的线程分配该大小的一个缓冲区。增长这值加速ORDER BY或GROUP BY操做。
注意:该参数对应的分配内存是每链接独占!若是有100个链接,那么实际分配的总共排序缓冲区大小为100×6=600MB
read_buffer_size = 2M # 读查询操做所能使用的缓冲区大小。和sort_buffer_size同样,该参数对应的分配内存也是每链接独享。
query_cache_size = 32M # 指定MySQL查询结果缓冲区的大小
read_rnd_buffer_size = 8M # 改参数在使用行指针排序以后,随机读用的。
myisam_sort_buffer_size =64M # MyISAM表发生变化时从新排序所需的缓冲
thread_concurrency = 8 # 最大并发线程数,取值为服务器逻辑CPU数量×2,若是CPU支持H.T超线程,再×2
thread_cache = 8 # #缓存可重用的线程数
skip-locking # 避免MySQL的外部锁定,减小出错概率加强稳定性。
[mysqldump]
max_allowed_packet =16M # 服务器和客户端之间最大能发送的可能信息包
[myisamchk]
key_buffer = 256M
sort_buffer = 256M
read_buffer = 2M
write_buffer = 2M
其余可选参数:
back_log = 384
指定MySQL可能的链接数量。
当MySQL主线程在很短期内接收到很是多的链接请求,该参数生效,主线程花费很短期检查链接而且启动一个新线程。
back_log参数的值指出在MySQL暂时中止响应新请求以前的短期内多少个请求能够被存在堆栈中。
若是系统在一个短期内有不少链接,则须要增大该参数的值,该参数值指定到来的TCP/IP链接的侦听队列的大小。
试图设定back_log高于你的操做系统的限制将是无效的。默认值为50。对于Linux系统推荐设置为小于512的整数。
max_connections = n
MySQL服务器同时处理的数据库链接的最大数量(默认设置是100)。超过限制后会报 Too many connections 错误
key_buffer_size = n
用来存放索引区块的RMA值(默认设置是8M),增长它可获得更好处理的索引(对全部读和多重写)
record_buffer:
每一个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区。
若是你作不少顺序扫描,你可能想要增长该值。默认数值是131072(128K)
wait_timeout:
服务器在关闭它以前在一个链接上等待行动的秒数。
interactive_timeout:
服务器在关闭它前在一个交互链接上等待行动的秒数。
一个交互的客户被定义为对 mysql_real_connect()使用 CLIENT_INTERACTIVE 选项的客户。
默认数值是28800,能够把它改成3600。
skip-name-resolve
禁止MySQL对外部链接进行DNS解析,使用这一选项能够消除MySQL进行DNS解析的时间。
但须要注意,若是开启该选项,则全部远程主机链接受权都要使用IP地址方式,不然MySQL将没法正常处理链接请求!
log-slow-queries = slow.log
记录慢查询,而后对慢查询一一优化
skip-innodb
skip-bdb
关闭不须要的表类型,若是你须要,就不要加上这个
# > SHOW VARIABLES LIKE '%query_cache%';
# > SHOW STATUS LIKE 'Qcache%';
若是Qcache_lowmem_prunes的值很是大,则代表常常出现缓冲不够的状况;
若是Qcache_hits的值很是大,则代表查询缓冲使用很是频繁,若是该值较小反而会影响效率,那么能够考虑不用查询缓冲;
若是Qcache_free_blocks的值很是大,则代表缓冲区中碎片不少。
##########################################
###### max_allowed_packet ######
##########################################
通讯信息包是发送至MySQL服务器的单个SQL语句,或发送至客户端的单一行。
在MySQL 5.1服务器和客户端之间最大能发送的可能信息包为1GB。
当MySQL客户端或mysqld服务器收到大于max_allowed_packet字节的信息包时,将发出“信息包过大”错误,并关闭链接。对于某些客户端,若是通讯信息包过大,在执行查询期间,了能回遇到“丢失与MySQL服务器的链接”错误。
客户端和服务器均有本身的max_allowed_packet变量,所以,如你打算处理大的信息包,必须增长客户端和服务器上的该变量。
若是你正在使用mysql客户端程序,其max_allowed_packet变量的默认值为16MB。要想设置较大的值,可用下述方式启动mysql:
mysql> mysql --max_allowed_packet=32M
它将信息包的大小设置为32MB。
服务器的默认max_allowed_packet值为1MB。若是服务器须要处理大的查询,可增长该值(例如,若是准备处理大的BLOB列)。例如,要想将该设置为16MB,可采用下述方式启动服务器:
mysql> mysqld --max_allowed_packet=16M
也能使用选项文件来设置max_allowed_packet。要想将服务器的该变量设置为16MB,可在选项文件中增长下行内容:
[mysqld]
max_allowed_packet=16M
增长该变量的值十分安全,这是由于仅当须要时才会分配额外内存。例如,仅当你发出长查询或mysqld必须返回大的结果行时mysqld才会分配更多内存。该变量之因此取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而致使内存溢出。
若是你正是用大的BLOB值,并且未为mysqld授予为处理查询而访问足够内存的权限,也会遇到与大信息包有关的奇怪问题。若是怀疑出现了该状况,请尝试在mysqld_safe脚本开始增长ulimit -d 256000,并重启mysqld。
##########################################
##### MySQL怎样打开和关闭数据库表 #####
##########################################
table_cache, max_connections和max_tmp_tables影响服务器保持打开的文件的最大数量。若是你增长这些值的一个或两个,你能够遇到你的操做系统每一个进程打开文件描述符的数量上强加的限制。然而,你能够能在许多系统上增长该限制。请教你的OS文档找出如何作这些,由于改变限制的方法各系统有很大的不一样。
table_cache与max_connections有关。例如,对于200个打开的链接,你应该让一张表的缓冲至少有200 * n,这里n是一个联结(join)中表的最大数量。mysql
打开表的缓存能够增长到一个table_cache的最大值(缺省为64;这能够用mysqld的-O table_cache=#选项来改变)。一个表绝对不被关闭,除非当缓存满了而且另一个线程试图打开一个表时或若是你使用mysqladmin refresh或mysqladmin flush-tables。
当表缓存满时,服务器使用下列过程找到一个缓存入口来使用:
不是当前使用的表被释放,以最近最少使用(LRU)顺序。
若是缓存满了而且没有表能够释放,可是一个新表须要打开,缓存必须临时被扩大。
若是缓存处于一个临时扩大状态而且一个表从在用变为不在用状态,它被关闭并从缓存中释放。
对每一个并发存取打开一个表。这意味着,若是你让2个线程存取同一个表或在同一个查询中存取表两次(用AS),表须要被打开两次。任何表的第一次打开占2个文件描述符;表的每一次额外使用仅占一个文件描述符。对于第一次打开的额外描述符用于索引文件;这个描述符在全部线程之间共享web