mysql启动參数(/etc/my.cnf)具体解释汇总

在linux以下的/etc/my.cnf的參数具体解释汇总

MYSQL–my.cnf配置中文具体解释

basedir = path   使用给定文件夹作为根文件夹(安装文件夹)。


character-sets-dir = path   给出存放着字符集的文件夹。


datadir = path   从给定文件夹读取数据库文件。
pid-file = filename   为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统); Init-V脚本须要使用这个文件中的进程ID结束mysqld进程。
socket = filename   为MySQL客户程序与server之间的本地通信指定一个套接字文件(仅适用于UNIX/Linux系统; 默认设置通常是/var/lib/mysql/mysql.sock文件)。

在Windows环境下。假设MySQL客户与server是通过命名管道进行通信 的,–sock选项给出的将是该命名管道的名字(默认设置是MySQL)。
lower_case_table_name = 1/0   新文件夹和数据表的名字是否仅仅同意使用小写字母; 这个选项在Windows环境下的默认设置是1(仅仅同意使用小写字母)。



mysqld程序–语言设置
character-sets-server = name   新数据库或数据表的默认字符集。为了与MySQL的早期版本号保持兼容,这个字符集也能够用–default-character-set选项给出; 但这个选项已经显得有点过时了。
collation-server = name   新数据库或数据表的默认排序方式。
lanuage = name   用指定的语言显示出错信息。

mysqld程序–通信、网络、信息安全
enable-named-pipes   同意Windows 2000/XP环境下的客户和server使用命名管道(named pipe)进行通信。

这个命名管道的默认名字是MySQL。但能够用–socket选项来改变。
local-infile [=0]   同意/禁止使用LOAD DATA LOCAL语句来处理本地文件。
myisam-recover [=opt1, opt2, …]   在启动时自己主动修复全部受损的MyISAM数据表。这个选项的可取值有4种:DEFAULT、BACKUP、QUICK和FORCE; 它们与myisamchk程序的同名选项作用同样。

old-passwords   使用MySQL 3.23和4.0版本号中的老算法来加密mysql数据库里的密码(默认使用MySQL 4.1版本号開始引入的新加密算法)。
port = n   为MySQL程序指定一个TCP/IP通信port(一般是3306port)。
safe-user-create   仅仅有在mysql.user数据库表上拥有INSERT权限的用户才干使用GRANT命令; 这是一种双保险机制(此用户还必须具备GRANT权限才干运行GRANT命令)。


shared-memory   同意使用内存(shared memory)进行通信(仅适用于Windows)。


shared-memory-base-name = name   给共享内存块起一个名字(默认的名字是MySQL)。
skip-grant-tables   不使用mysql数据库里的信息来进行訪问控制(警告:这将同意用户不论什么用户去改动不论什么数据库)。
skip-host-cache   不使用快速缓存区来存放主机名和IP地址的相应关系。
skip-name-resovle   不把IP地址解析为主机名; 与訪问控制(mysql.user数据表)有关的检查所有通过IP地址行进。


skip-networking   仅仅同意通过一个套接字文件(Unix/Linux系统)或通过命名管道(Windows系统)进行本地连接。不同意ICP/IP连接; 这提高了安全性,但阻断了来自网络的外部连接和全部的Java客户程序(Java客户即使在本地连接里也使用TCP/IP)。


user = name   mysqld程序在启动后将在给定UNIX/Linux账户下运行; mysqld必须从root账户启动才干在启动后切换到还有一个账户下运行; mysqld_safe脚本将默认使用–user=mysql选项来启动mysqld程序。

mysqld程序–内存管理、优化、查询缓存区
bulk_insert_buffer_size = n   为一次插入多条新记录的INSERT命令分配的缓存区长度(默认设置是8M)。


key_buffer_size = n   用来存放索引区块的RMA值(默认设置是8M)。


join_buffer_size = n   在參加JOIN操作的数据列没有索引时为JOIN操作分配的缓存区长度(默认设置是128K)。
max_heap_table_size = n   HEAP数据表的最大长度(默认设置是16M); 超过这个长度的HEAP数据表将被存入一个暂时文件而不是驻留在内存里。
max_connections = n   MySQLserver同一时候处理的数据库连接的最大数量(默认设置是100)。
query_cache_limit = n   同意暂时存放在查询缓存区里的查询结果的最大长度(默认设置是1M)。
query_cache_size = n   查询缓存区的最大长度(默认设置是0,不开辟查询缓存区)。


query_cache_type = 0/1/2   查询缓存区的工作模式:0, 禁用查询缓存区; 1,启用查询缓存区(默认设置); 2,”按需分配”模式。仅仅响应SELECT SQL_CACHE命令。


read_buffer_size = n   为从数据表顺序读取数据的读操作保留的缓存区的长度(默认设置是128KB); 这个选项的设置值在必要时能够用SQL命令SET SESSION read_buffer_size = n命令加以改变。
read_rnd_buffer_size = n   类似于read_buffer_size选项。但针对的是按某种特定顺序(比方使用了ORDER BY子句的查询)输出的查询结果(默认设置是256K)。
sore_buffer = n   为排序操作分配的缓存区的长度(默认设置是2M); 假设这个缓存区太小,则必须创建一个暂时文件来进行排序。


table_cache = n   同一时候打开的数据表的数量(默认设置是64)。
tmp_table_size = n   暂时HEAP数据表的最大长度(默认设置是32M); 超过这个长度的暂时数据表将被转换为MyISAM数据表并存入一个暂时文件。



mysqld程序–日志
log [= file]   把全部的连接以及全部的SQL命令记入日志(通用查询日志); 假设没有给出file參数,MySQL将在数据库文件夹里创建一个hostname.log文件作为这样的日志文件(hostname是server的主机名)。
log-slow-queries [= file]   把运行用时超过long_query_time变量值的查询命令记入日志(慢查询日志); 假设没有给出file參数。MySQL将在数据库文件夹里创建一个hostname-slow.log文件作为这样的日志文件(hostname是server主机 名)。


long_query_time = n   慢查询的运行用时上限(默认设置是10s)。
long_queries_not_using_indexs   把慢查询以及运行时没有使用索引的查询命令全都记入日志(其余同–log-slow-queries选项)。


log-bin [= filename]   把对数据进行改动的全部SQL命令(也就是INSERT、UPDATE和DELETE命令)以二进制格式记入日志(二进制变更日志,binary update log)。

这样的日志的文件名称是filename.n或默认的hostname.n,当中n是一个6位数字的整数(日志文件按顺序编号)。


log-bin-index = filename   二进制日志功能的索引文件名称。在默认情况下。这个索引文件与二进制日志文件的名字同样,但后缀名是.index而不是.nnnnnn。
max_binlog_size = n   二进制日志文件的最大长度(默认设置是1GB)。在前一个二进制日志文件中的信息量超过这个最大长度之前,MySQLserver会自己主动提供一个新的二进制日志文件接续上。
binlog-do-db = dbname   仅仅把给定数据库里的变化情况记入二进制日志文件,其它数据库里的变化情况不记载。假设须要记载多个数据库里的变化情况,就必须在配置文件使用多个本选项来设置,每一个数据库一行。
binlog-ignore-db = dbname   不把给定数据库里的变化情况记入二进制日志文件。
sync_binlog = n   每经过n次日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安全的做法,但效率最低。默认设置是n=0,意思是由操作系统来负责二进制日志文件的同步工作。
log-update [= file]   记载出错情况的日志文件名称(出错日志)。这样的日志功能无法禁用。

假设没有给出file參数,MySQL会使用hostname.err作为种日志文件的名字。

mysqld程序–镜像(主控镜像server)
server-id = n   给服务器分配一个独一无二的ID编号; n的取值范围是1~2的32次方启用二进制日志功能。


log-bin = name   启用二进制日志功能。

这样的日志的文件名称是filename.n或默认的hostname.n。当中的n是一个6位数字的整数(日志文件顺序编号)。
binlog-do/ignore-db = dbname   仅仅把给定数据库里的变化情况记入二进制日志文件/不把给定的数据库里的变化记入二进制日志文件。



mysqld程序–镜像(从属镜像server)
server-id = n   给服务器分配一个唯一的ID编号
log-slave-updates   启用从属server上的日志功能,使这台计算机能够用来构成一个镜像链(A->B->C)。


master-host = hostname   主控server的主机名或IP地址。假设从属server上存在mater.info文件(镜像关系定义文件),它将忽略此选项。
master-user = replicusername   从属server用来连接主控server的用户名。假设从属server上存在mater.info文件。它将忽略此选项。
master-password = passwd   从属server用来连接主控server的密码。假设从属server上存在mater.info文件,它将忽略此选项。
master-port = n   从属server用来连接主控server的TCP/IPport(默认设置是3306port)。
master-connect-retry = n   假设与主控server的连接没有成功。则等待n秒(s)后再进行管理方式(默认设置是60s)。假设从属server存在mater.info文件。它将忽略此选项。


master-ssl-xxx = xxx   对主、从server之间的SSL通信进行配置。


read-only = 0/1   0: 同意从属server独立地运行SQL命令(默认设置); 1: 从属server仅仅能运行来自主控server的SQL命令。
read-log-purge = 0/1   1: 把处理完的SQL命令立马从中继日志文件中删除(默认设置); 0: 不把处理完的SQL命令立马从中继日志文件中删除。
replicate-do-table = dbname.tablename   与–replicate-do-table选项的含义和使用方法同样。但数据库和数据库表名字里同意出现通配符”%” (比如: test%.%–对名字以”test”开头的全部数据库里的所以数据库表进行镜像处理)。
replicate-do-db = name   仅仅对这个数据库进行镜像处理。
replicate-ignore-table = dbname.tablename   不正确这个数据表进行镜像处理。
replicate-wild-ignore-table = dbn.tablen   不正确这些数据表进行镜像处理。
replicate-ignore-db = dbname   不正确这个数据库进行镜像处理。


replicate-rewrite-db = db1name > db2name   把主控数据库上的db1name数据库镜像处理为从属server上的db2name数据库。
report-host = hostname   从属server的主机名; 这项信息仅仅与SHOW SLAVE HOSTS命令有关–主控server能够用这条命令生成一份从属server的名单。


slave-compressed-protocol = 1   主、从server使用压缩格式进行通信–假设它们都支持这么做的话。
slave-skip-errors = n1, n2, …或all   即使发生出错代码为n1、n2等的错误。镜像处理工作也继续进行(即无论发生什么错误,镜像处理工作也继续进行)。

假设配置得当,从属server不应该在运行 SQL命令时错误发生(在主控server上运行出错的SQL命令不会被发送到从属server上做镜像处理); 假设不使用slave-skip-errors选项,从属server上的镜像工作就可能由于错误发生而中断,中断后须要有人工參与才干继续进行。



mysqld–InnoDB–基本设置、表空间文件
skip-innodb   不载入InnoDB数据表驱动程序–假设用不着InnoDB数据表,能够用这个选项节省一些内存。


innodb-file-per-table   为每个新数据表创建一个表空间文件而不是把数据表都集中保存在*表空间里(后者是默认设置)。该选项始见于MySQL 4.1。
innodb-open-file = n   InnoDB数据表驱动程序最多能够同一时候打开的文件数(默认设置是300)。

假设使用了
innodb-file-per-table选项而且须要同一时候打开非常多数据表的话,这个数字非常可能须要加大。
innodb_data_home_dir = p   InnoDB主文件夹。全部与InnoDB数据表有关的文件夹或文件路径都相对于这个路径。

在默认的情况下,这个主文件夹就是MySQL的数据文件夹。
innodb_data_file_path = ts   用来容纳InnoDB为数据表的表空间: 可能涉及一个以上的文件; 每个表空间文件的最大长度都必须以字节(B)、兆字节(MB)或千兆字节(GB)为单位给出; 表空间文件的名字必须以分号隔开; 最后一个表空间文件还能够带一个autoextend属性和一个最大长度(max:n)。比如,ibdata1:1G; ibdata2:1G:autoextend:max:2G的意思是: 表空间文件ibdata1的最大长度是1GB,ibdata2的最大长度也是1G,但同意它扩充到2GB。

除文件名称外,还能够用硬盘分区的设置名来定义表 空间,此时必须给表空间的最大初始长度值加上newrawkeyword做后缀,给表空间的最大扩充长度值加上rawkeyword做后缀(比如/dev/hdb1: 20Gnewraw或/dev/hdb1:20Graw); MySQL 4.0及更高版本号的默认设置是ibdata1:10M:autoextend。


innodb_autoextend_increment = n   带有autoextend属性的表空间文件每次加大多少兆字节(默认设置是8MB)。这个属性不涉及详细的数据表文件。那些文件的增大速度相对是比較小的。
innodb_lock_wait_timeout = n   假设某个事务在等待n秒(s)后还没有获得所须要的资源,就使用ROLLBACK命令放弃这个事务。这项设置对于发现和处理未能被InnoDB数据表驱动 程序识别出来的死锁条件有着重要的意义。

这个选项的默认设置是50s。
innodb_fast_shutdown 0/1   是否以最快的速度关闭InnoDB,默认设置是1,意思是不把缓存在INSERT缓存区的数据写入数据表,那些数据将在MySQLserver下次启动时再写入 (这么做没有什么风险。由于INSERT缓存区是表空间的一个组成部分,数据不会丢失)。把这个选项设置为0反面危急,由于在计算机关闭时,InnoDB 驱动程序非常可能没有足够的时间完毕它的数据同步工作。操作系统或许会在它完毕数据同步工作之前强行结束InnoDB。而这会导致数据不完整。



mysqld程序–InnoDB–日志
innodb_log_group_home_dir = p   用来存放InnoDB日志文件的文件夹路径(如ib_logfile0、ib_logfile1等)。

在默认的情况下。InnoDB驱动程序将使用MySQL数据文件夹作为自己保存日志文件的位置。  
innodb_log_files_in_group = n   使用多少个日志文件(默认设置是2)。

InnoDB数据表驱动程序将以轮转方式依次填写这些文件; 当全部的日志文件都写满以后,之后的日志信息将写入第一个日志文件的最大长度(默认设置是5MB)。这个长度必须以MB(兆字节)或GB(千兆字节)为单 位进行设置。
innodb_flush_log_at_trx_commit = 0/1/2   这个选项决定着什么时候把日志信息写入日志文件以及什么时候把这些文件物理地写(术语称为”同步”)到硬盘上。设置值0的意思是每隔一秒写一次日志并进行 同步,这能够降低硬盘写操作次数,但可能造成数据丢失; 设置值1(设置设置)的意思是在每运行完一条COMMIT命令就写一次日志并进行同步。这能够防止数据丢失,但硬盘写操作可能会非常频繁; 设置值2是一般折衷的办法,即每运行完一条COMMIT命令写一次日志,每隔一秒进行一次同步。


innodb_flush_method = x   InnoDB日志文件的同步办法(仅适用于UNIX/Linux系统)。

这个选项的可取值有两种: fdatasync,用fsync()函数进行同步; O_DSYNC,用O_SYNC()函数进行同步。
innodb_log_archive = 1   启用InnoDB驱动程序的archive(档案)日志功能,把日志信息写入ib_arch_log_n文件。

启用这样的日志功能在InnoDB与 MySQL一起使用时没有多大意义(启用MySQLserver的二进制日志功能就足够用了)。



mysqld程序–InnoDB–缓存区的设置和优化
innodb_log_buffer_pool_size = n   为InnoDB数据表及其索引而保留的RAM内存量(默认设置是8MB)。

这个參数对速度有着相当大的影响。假设计算机上仅仅执行有 MySQL/InnoDB数据库server,就应该把所有内存的80%用于这个用途。


innodb_log_buffer_size = n   事务日志文件写操作缓存区的最大长度(默认设置是1MB)。


innodb_additional_men_pool_size = n   为用于内部管理的各种数据结构分配的缓存区最大长度(默认设置是1MB)。


innodb_file_io_threads = n   I/O操作(硬盘写操作)的最大线程个数(默认设置是4)。
innodb_thread_concurrency = n   InnoDB驱动程序可以同一时候使用的最大线程个数(默认设置是8)。



mysqld程序–其他选项
bind-address = ipaddr   MySQLserver的IP地址。

假设MySQLserver所在的计算机有多个IP地址,这个选项将很重要。


default-storage-engine = type   新数据表的默认数据表类型(默认设置是MyISAM)。这项设置还能够通过–default-table-type选项来设置。
default-timezone = name   为MySQLserver设置一个地理时区(假设它与本地计算机的地理时区不一样)。


ft_min_word_len = n   全文索引的最小单词长度工。这个选项的默认设置是4。意思是在创建全文索引时不考虑那些由3个或更少的字符构建单词。
Max-allowed-packet = n   客户与server之间交换的数据包的最大长度。这个数字至少应该大于客户程序将要处理的最大BLOB块的长度。这个选项的默认设置是1MB。


Sql-mode = model1, mode2, …   MySQL将执行在哪一种SQL模式下。这个选项的作用是让MySQL与其它的数据库系统保持最大程度的兼容。这个选项的可取值包含ansi、db2、 oracle、no_zero_date、pipes_as_concat。



注意:假设在配置文件中给出的某个选项是mysqld无法识别的,MySQLserver将不启动。



对于单台执行的WEBserver,建议加上:
skip-locking
skip-name-resolve
skip-networking

skip-networking
开启该选项能够彻底关闭MySQL的TCP/IP连接方式。假设WEBserver是以远程连接的方式訪问MySQL数据库server则不要开启该选项!否则将无法正常连接!



在PHP链接数据库时使用”LOCALHOST”.这样MySQL client库将覆盖之并尝试连接到本地套接字.(
我们能够从PHP.INI中
代码:
; Default socket name for local MySQL connects. If empty, uses the built-in
; MySQL defaults.
mysql.default_socket = /tmp/mysql.sock
看出 默认情况下 UNIX 将訪问/tmp/mysql.sock)
下面是部分选项解释:
my.cnf默认是不存在的.你能够在/usr/local/share/mysql/下看到:
my-huge.cnf
my-innodb-heavy-4G.cnf
my-large.cnf
my-medium.cnf
my-small.cnf
等文件.将当中合适你机器配置的文件复制到/etc/my.cnf或mysql data文件夹/my.cnf(/var/db/mysql)下或~/.my.cnf.文件内都有具体的说明

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



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

back_log = 384
指定MySQL可能的连接数量。当MySQL主线程在非常短的时间内接收到非常多的连接请求,该參数生效,主线程花费非常短的时间检查连接而且启动一个新线程。
back_log參数的值指出在MySQL临时停止响应新请求之前的短时间内多少个请求能够被存在堆栈中。 假设系统在一个短时间内有非常多连接。则须要增大该參数的值,该參数值指定到来的TCP/IP连接的侦听队列的大小。

不同的操作系统在这个队列大小上有它自 己的限制。


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

key_buffer_size = 256M
# key_buffer_size指定用于索引的缓冲区大小。添加它可得到更好的索引处理性能。
对于内存在4GB左右的server该參数可设置为256M或384M。


注意:该參数值设置的过大反而会是server总体效率减少!



max_allowed_packet = 4M
thread_stack = 256K
table_cache = 128K
sort_buffer_size = 6M
查询排序时所能使用的缓冲区大小。注意:该參数相应的分配内存是每连接独占!假设有100个连接,那么实际分配的总共排序缓冲区大小为100 × 6 = 600MB。所以,对于内存在4GB左右的server推荐设置为6-8M。

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

和sort_buffer_size一样。该參数相应的分配内存也是每连接独享!



join_buffer_size = 8M
联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样。该參数相应的分配内存也是每连接独享!

myisam_sort_buffer_size = 64M
table_cache = 512
thread_cache_size = 64
query_cache_size = 64M
指定MySQL查询缓冲区的大小。能够通过在MySQL控制台运行下面命令观察:
# > SHOW VARIABLES LIKE ‘%query_cache%’;
# > SHOW STATUS LIKE ‘Qcache%’;
假设Qcache_lowmem_prunes的值很大,则表明常常出现缓冲不够的情况。
假设Qcache_hits的值很大。则表明查询缓冲使用很频繁,假设该值较小反而会影响效率,那么能够考虑不用查询缓冲;Qcache_free_blocks,假设该值很大。则表明缓冲区中碎片许多。

tmp_table_size = 256M
max_connections = 768
指定MySQL同意的最大连接进程数。假设在訪问论坛时常常出现Too Many Connections的错误提 示,则须要增大该參数值。
max_connect_errors = 10000000
wait_timeout = 10
指定一个请求的最大连接时间,对于4GB左右内存的server能够设置为5-10。


thread_concurrency = 8
该參数取值为server逻辑CPU数量×2。在本例中,server有2颗物理CPU,而每颗物理CPU又支持H.T超线程,所以实际取值为4 × 2 = 8
 


下面选项会被MySQLclient应用读取。

   
# 注意仅仅有MySQL附带的client应用程序保证能够读取这段内容。

   
# 假设你想你自己的MySQL应用程序获取这些值。   
# 须要在MySQLclient库初始化的时候指定这些选项。

   
 
#   
[client]   
#password = [your_password]   
port = @MYSQL_TCP_PORT@   
socket = @MYSQL_UNIX_ADDR@   
# *** 应用定制选项 ***   
#   
# MySQL 服务端   
#   
[mysqld]   
# 一般配置选项   
port = @MYSQL_TCP_PORT@   
socket = @MYSQL_UNIX_ADDR@   
# back_log 是操作系统在监听队列中所能保持的连接数,   
# 队列保存了在MySQL连接管理器线程处理之前的连接.   
# 假设你有很高的连接率而且出现”connection refused” 报错,   
# 你就应该添加此处的值.   
# 检查你的操作系统文档来获取这个变量的最大值.   
# 假设将back_log设定到比你操作系统限制更高的值,将会没有效果   
back_log = 300  

 back_log  
指定MySQL可能的连接数量。

当MySQL主线程在非常短的时间内得到非常多的连接请求,该參数就起作用。之后主线程花些时间(虽然非常短)检查连接而且启动一个新线程。

 
back_log
參数的值指出在MySQL临时停止响应新请求之前的短时间内多少个请求能够被存在堆栈中。假设系统在一个短时间内有非常多连接,则须要增大该參
数的值,该參数值指定到来的TCP/IP连接的侦听队列的大小。不同的操作系统在这个队列大小上有它自己的限制。试图设定back_log高于你的操作系统的限制将是无效的。

当观察
MySQL进程列表,发现大量 264084 | unauthenticated user |  xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待连接进程时,
就要加大 back_log 的值。back_log默认值为50。
 
不在TCP/IPport上进行监听.   
# 假设全部的进程都是在同一台server连接到本地的mysqld,   
# 这样设置将是增强安全的方法   
# 全部mysqld的连接都是通过Unix sockets 或者命名管道进行的.   
# 注意在windows下假设没有打开命名管道选项而仅仅是用此项   
# (通过 “enable-named-pipe” 选项) 将会导致mysql服务没有不论什么作用!   
#skip-networking   
 
# MySQL 服务所同意的同一时候会话数的上限   
# 当中一个连接将被SUPER权限保留作为管理员登录.   
# 即便已经达到了连接数的上限.   
max_connections = 3000  
# 每一个client连接最大的错误同意数量,假设达到了此限制.   
# 这个client将会被MySQL服务阻止直到运行了”FLUSH HOSTS” 或者服务重新启动   
# 非法的password以及其它在链接时的错误会添加此值.   
# 查看 “Aborted_connects” 状态来获取全局计数器.   
max_connect_errors = 30  
 
# 全部线程所打开表的数量.   
# 添加此值就添加了mysqld所须要的文件描写叙述符的数量   
# 这样你须要确认在[mysqld_safe]中 “open-files-limit” 变量设置打开文件数量同意至少4096  
table_cache = 4096  
 
# 同意外部文件级别的锁. 打开文件锁会对性能造成负面影响   
# 所以仅仅有在你在相同的文件上执行多个数据库实例时才使用此选项(注意仍会有其它约束!)   
# 或者你在文件层面上使用了其它一些软件依赖来锁定MyISAM表   
#external-locking   
 
# 服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小(当与大的BLOB字段一起工作时相当必要)   
# 每一个连接独立的大小.大小动态添加   
max_allowed_packet = 32M   
 
# 在一个事务中binlog为了记录SQL状态所持有的cache大小   
# 假设你常常使用大的,多声明的事务,你能够添加此值来获取更大的性能.   
# 全部从事务来的状态都将被缓冲在binlog缓冲中然后在提交后一次性写入到binlog中   
# 假设事务比此值大, 会使用磁盘上的暂时文件来替代.   
# 此缓冲在每一个连接的事务第一次更新状态时被创建   
binlog_cache_size = 4M   
 
# 独立的内存表所同意的最大容量.   
# 此选项为了防止意外创建一个超大的内存表导致永尽全部的内存资源.   
max_heap_table_size = 128M   
 
# 排序缓冲被用来处理类似ORDER BY以及GROUP BY队列所引起的排序   
# 假设排序后的数据无法放入排序缓冲,   
# 一个用来替代的基于磁盘的合并分类会被使用   
# 查看 “Sort_merge_passes” 状态变量.   
# 在排序发生时由每一个线程分配   
sort_buffer_size = 16M   
 
# 此缓冲被使用来优化全联合(full JOINs 不带索引的联合).   
# 类似的联合在极大多数情况下有很糟糕的性能表现,   
# 可是将此值设大可以减轻性能影响.   
# 通过 “Select_full_join” 状态变量查看全联合的数量   
# 当全联合发生时,在每一个线程中分配   
join_buffer_size = 16M   
 
# 我们在cache中保留多少线程用于重用   
# 当一个client断开连接后,假设cache中的线程还少于thread_cache_size,   
# 则client线程被放入cache中.   
# 这能够在你须要大量新连接的时候极大的降低线程创建的开销   
# (一般来说假设你有好的线程模型的话,这不会有明显的性能提升.)   
thread_cache_size = 16  
 
# 此同意应用程序给予线程系统一个提示在同一时间给予渴望被执行的线程的数量.   
# 此值仅仅对于支持 thread_concurrency() 函数的系统有意义( 比如Sun Solaris).   
# 你可能够尝试使用 [CPU数量]*(2..4) 来作为thread_concurrency的值   
thread_concurrency = 8  
 
# 查询缓冲常被用来缓冲 SELECT 的结果而且在下一次相同查询的时候不再运行直接返回结果.   
# 打开查询缓冲能够极大的提高server速度, 假设你有大量的同样的查询而且非常少改动表.   
# 查看 “Qcache_lowmem_prunes” 状态变量来检查是否当前值对于你的负载来说是否足够高.   
# 注意: 在你表常常变化的情况下或者假设你的查询原文每次都不同,   
# 查询缓冲或许引起性能下降而不是性能提升.   
query_cache_size = 128M   
 
# 仅仅有小于此设定值的结果才会被缓冲   
# 此设置用来保护查询缓冲,防止一个极大的结果集将其它全部的查询结果都覆盖.   
query_cache_limit = 4M   
 
# 被全文检索索引的最小的字长.   
# 你或许希望降低它,假设你须要搜索更短字的时候.   
# 注意在你改动此值之后,   
# 你须要重建你的 FULLTEXT 索引   
ft_min_word_len = 8  
 
# 假设你的系统支持 memlock() 函数,你或许希望打开此选项用以让执行中的mysql在在内存高度紧张的时候,数据在内存中保持锁定而且防止可能被swapping out   
# 此选项对于性能故意   
#memlock   
 
# 当创建新表时作为默认使用的表类型,   
# 假设在创建表示没有特别运行表类型,将会使用此值   
default_table_type = MYISAM   
 
# 线程使用的堆大小. 此容量的内存在每次连接时被预留.   
# MySQL 本身常不会须要超过64K的内存   
# 假设你使用你自己的须要大量堆的UDF函数   
# 或者你的操作系统对于某些操作须要很多其它的堆,   
# 你或许须要将其设置的更高一点.   
thread_stack = 512K   
 
# 设定默认的事务隔离级别.可用的级别例如以下:   
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE   
transaction_isolation = REPEATABLE-READ   
 
# 内部(内存中)暂时表的最大大小   
# 假设一个表增长到比此值更大,将会自己主动转换为基于磁盘的表.   
# 此限制是针对单个表的,而不是总和.   
tmp_table_size = 128M   
 
# 打开二进制日志功能.   
# 在复制(replication)配置中,作为MASTER主server必须打开此项   
# 假设你须要从你最后的备份中做基于时间点的恢复,你也相同须要二进制日志.   
log-bin=mysql-bin   
 
# 假设你在使用链式从server结构的复制模式 (A->B->C),   
# 你须要在serverB上打开此项.   
# 此选项打开在从线程上重做过的更新的日志,   
# 并将其写入从server的二进制日志.   
#log_slave_updates   
 
# 打开全查询日志. 全部的由server接收到的查询 (甚至对于一个错误语法的查询)   
# 都会被记录下来. 这对于调试很实用, 在生产环境中经常关闭此项.   
#log   
 
# 将警告打印输出到错误log文件. 假设你对于MySQL有不论什么问题   
# 你应该打开警告log而且细致审查错误日志,查出可能的原因.   
#log_warnings   
 
# 记录慢速查询. 慢速查询是指消耗了比 “long_query_time” 定义的很多其它时间的查询.   
# 假设 log_long_format 被打开,那些没有使用索引的查询也会被记录.   
# 假设你常常添加新查询到已有的系统内的话. 一般来说这是一个好主意,   
log_slow_queries   
 
# 全部的使用了比这个时间(以秒为单位)很多其它的查询会被觉得是慢速查询.   
# 不要在这里使用”1″, 否则会导致全部的查询,甚至很快的查询页被记录下来(因为MySQL 眼下时间的准确度仅仅能达到秒的级别).   
long_query_time = 6  
 
# 在慢速日志中记录很多其它的信息.   
# 一般此项最好打开.   
# 打开此项会记录使得那些没有使用索引的查询也被作为到慢速查询附加到慢速日志里   
log_long_format   
 
# 此文件夹被MySQL用来保存暂时文件.比如,   
# 它被用来处理基于磁盘的大型排序,和内部排序一样.   
# 以及简单的暂时表.   
# 假设你不创建很大的暂时文件,将其放置到 swapfs/tmpfs 文件系统上或许比較好   
# 还有一种选择是你也能够将其放置在独立的磁盘上.   
# 你能够使用”;”来放置多个路径   
# 他们会依照roud-robin方法被轮询使用.   
#tmpdir = /tmp   
 
# *** 主从复制相关的设置   
 
# 唯一的服务辨识号,数值位于 1 到 2^32-1之间.   
# 此值在master和slave上都须要设置.   
# 假设 “master-host” 没有被设置,则默觉得1, 可是假设忽略此选项,MySQL不会作为master生效.   
server-id = 1  
 
# 复制的Slave (去掉master段的凝视来使其生效)   
#   
# 为了配置此主机作为复制的slaveserver,你能够选择两种方法:   
#   
# 1) 使用 CHANGE MASTER TO 命令 (在我们的手冊中有完整描写叙述) -   
# 语法例如以下:   
#   
# CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,   
# MASTER_USER=, MASTER_PASSWORD= ;   
#   
# 你须要替换掉 , , 等被尖括号包围的字段以及使用master的port号替换 (默认3306).   
#   
# 样例:   
#   
# CHANGE MASTER TO MASTER_HOST=’125.564.12.1′, MASTER_PORT=3306,   
# MASTER_USER=’joe’, MASTER_PASSWORD=’secret’;   
#   
# 或者   
#   
# 2) 设置下面的变量. 不论怎样, 在你选择这样的方法的情况下, 然后第一次启动复制(甚至不成功的情况下,   
# 比如假设你输入错密码在master-password字段而且slave无法连接),   
# slave会创建一个 master.info 文件,而且之后不论什么对于包括在此文件内的參数的变化都会被忽略   
# 而且由 master.info 文件内的内容覆盖, 除非你关闭slave服务, 删除 master.info 而且重新启动slave 服务.   
# 因为这个原因,你或许不想碰一下的配置(凝视掉的) 而且使用 CHANGE MASTER TO (查看上面) 来取代   
#   
# 所须要的唯一id号位于 2 和 2^32 – 1之间   
# (而且和master不同)   
# 假设master-host被设置了.则默认值是2  
# 可是假设省略,则不会生效   
#server-id = 2  
#   
# 复制结构中的master – 必须   
#master-host =   
#   
# 当连接到master上时slave所用来认证的username – 必须   
#master-user =   
#   
# 当连接到master上时slave所用来认证的password – 必须   
#master-password =   
#   
# master监听的port.   
# 可选 – 默认是3306  
#master-port =   
 
# 使得slave仅仅读.仅仅实用户拥有SUPER权限和在上面的slave线程可以改动数据.   
# 你能够使用此项去保证没有应用程序会意外的改动slave而不是master上的数据   
#read_only   
 
#*** MyISAM 相关选项   
 
# 关键词缓冲的大小, 一般用来缓冲MyISAM表的索引块.   
# 不要将其设置大于你可用内存的30%,   
# 由于一部分内存相同被OS用来缓冲行数据   
# 甚至在你并不使用MyISAM 表的情况下, 你也须要仍旧设置起 8-64M 内存因为它相同会被内部暂时磁盘表使用.   
key_buffer_size = 128M   
 
# 用来做MyISAM表全表扫描的缓冲大小.   
# 当全表扫描须要时,在相应线程中分配.   
read_buffer_size = 8M   
 
# 当在排序之后,从一个已经排序好的序列中读取行时,行数据将从这个缓冲中读取来防止磁盘寻道.   
# 假设你增高此值,能够提高非常多ORDER BY的性能.   
# 当须要时由每一个线程分配   
read_rnd_buffer_size = 64M   
 
# MyISAM 使用特殊的类似树的cache来使得突发插入   
# (这些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATA   
# INFILE) 更快. 此变量限制每一个进程中缓冲树的字节数.   
# 设置为 0 会关闭此优化.   
# 为了最优化不要将此值设置大于 “key_buffer_size”.   
# 当突发插入被检測到时此缓冲将被分配.   
bulk_insert_buffer_size = 256M   
 
# 此缓冲当MySQL须要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE 到一个空表中引起重建索引时被分配.   
# 这在每一个线程中被分配.所以在设置大值时须要小心.   
myisam_sort_buffer_size = 256M   
 
# MySQL重建索引时所同意的最大暂时文件的大小 (当 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).   
# 假设文件大小比此值更大,索引会通过键值缓冲创建(更慢)   
myisam_max_sort_file_size = 10G   
 
# 假设被用来更快的索引创建索引所使用暂时文件大于制定的值,那就使用键值缓冲方法.   
# 这主要用来强制在大表中长字串键去使用慢速的键值缓冲方法来创建索引.   
myisam_max_extra_sort_file_size = 10G   
 
# 假设一个表拥有超过一个索引, MyISAM 能够通过并行排序使用超过一个线程去修复他们.   
# 这对于拥有多个CPU以及大量内存情况的用户,是一个非常好的选择.   
myisam_repair_threads = 1  
 
# 自己主动检查和修复没有适当关闭的 MyISAM 表.   
myisam_recover   
 
# 默认关闭 Federated   
skip-federated   
 
# *** BDB 相关选项 ***   
 
# 假设你执行的MySQL服务有BDB支持可是你不准备使用的时候使用此选项. 这会节省内存而且可能加速一些事.   
skip-bdb   
 
# *** INNODB 相关选项 ***   
 
# 假设你的MySQL服务包括InnoDB支持可是并不打算使用的话,   
# 使用此选项会节省内存以及磁盘空间,而且加速某些部分   
#skip-innodb   
 
# 附加的内存池被InnoDB用来保存 metadata 信息   
# 假设InnoDB为此目的须要很多其它的内存,它会開始从OS这里申请内存.   
# 因为这个操作在大多数现代操作系统上已经足够快, 你一般不须要改动此值.   
# SHOW INNODB STATUS 命令会显示当先使用的数量.   
innodb_additional_mem_pool_size = 64M   
 
# InnoDB使用一个缓冲池来保存索引和原始数据, 不像 MyISAM.   
# 这里你设置越大,你在存取表里面数据时所须要的磁盘I/O越少.   
# 在一个独立使用的数据库server上,你能够设置这个变量到server物理内存大小的80%   
# 不要设置过大,否则,因为物理内存的竞争可能导致操作系统的换页颠簸.   
# 注意在32位系统上你每一个进程可能被限制在 2-3.5G 用户层面内存限制,   
# 所以不要设置的太高.   
innodb_buffer_pool_size = 6G   
 
# InnoDB 将数据保存在一个或者多个数据文件里成为表空间.   
# 假设你仅仅有单个逻辑驱动保存你的数据,一个单个的自增文件就足够好了.   
# 其它情况下.每一个设备一个文件一般都是个好的选择.   
# 你也能够配置InnoDB来使用裸盘分区 – 请參考手冊来获取很多其它相关内容   
innodb_data_file_path = ibdata1:10M:autoextend   
 
# 设置此选项假设你希望InnoDB表空间文件被保存在其它分区.   
# 默认保存在MySQL的datadir中.   
#innodb_data_home_dir =   
 
# 用来同步IO操作的IO线程的数量. This value is   
# 此值在Unix下被硬编码为4,可是在Windows磁盘I/O可能在一个大数值下表现的更好.   
innodb_file_io_threads = 4  
 
# 假设你发现InnoDB表空间损坏, 设置此值为一个非零值可能帮助你导出你的表.   
# 从1開始而且添加此值知道你可以成功的导出表.   
#innodb_force_recovery=1  
 
# 在InnoDb核心内的同意线程数量.   
# 最优值依赖于应用程序,硬件以及操作系统的调度方式.   
# 过高的值可能导致线程的相互排斥颠簸.   
innodb_thread_concurrency = 16  
 
# 假设设置为1 ,InnoDB会在每次提交后刷新(fsync)事务日志到磁盘上,   
# 这提供了完整的ACID行为.   
# 假设你愿意对事务安全折衷, 而且你正在执行一个小的食物, 你能够设置此值到0或者2来降低由事务日志引起的磁盘I/O   
# 0代表日志仅仅大约每秒写入日志文件而且日志文件刷新到磁盘.   
# 2代表日志写入日志文件在每次提交后,可是日志文件仅仅有大约每秒才会刷新到磁盘上.   
innodb_flush_log_at_trx_commit = 2  
(说明:假设是游戏server,建议此值设置为2;假设是对数据安全要求极高的应用。建议设置为1;设置为0性能最高,但假设发生问题,数据可能会有丢失的危急!默认值1的意思是每一次事务提交或事务外的指令都须要把日志写入(flush)硬盘。这是非常费时的。特别是使用电池供电缓存(Battery backed up cache)时。设成2对于非常多运用,特别是从MyISAM表转过来的是能够的,它的意思是不写入硬盘而是写入系统缓存。日志仍然会每秒flush到硬盘。所以你一般不会丢失超过1-2秒的更新。设成0会更快一点。但安全方面比較差,即使MySQL挂了也可能会丢失事务的数据。

而值2仅仅会在整个操作系统挂了时才可能丢数据。

)   
 
# 加速InnoDB的关闭. 这会阻止InnoDB在关闭时做全清除以及插入缓冲合并.   
# 这可能极大添加关机时间, 可是取而代之的是InnoDB可能在下次启动时做这些操作.   
#innodb_fast_shutdown   
 
# 用来缓冲日志数据的缓冲区的大小.   
# 当此值快满时, InnoDB将必须刷新数据到磁盘上.   
# 因为基本上每秒都会刷新一次,所以没有必要将此值设置的太大(甚至对于长事务而言)   
 
innodb_log_buffer_size = 16M   
 
# 在日志组中每一个日志文件的大小.   
# 你应该设置日志文件总合大小到你缓冲池大小的25%~100%   
# 来避免在日志文件覆写上不必要的缓冲池刷新行为.   
# 不论怎样, 请注意一个大的日志文件大小会添加恢复进程所须要的时间.   
innodb_log_file_size = 512M   
 
# 在日志组中的文件总数.   
# 通常来说2~3是比較好的.   
innodb_log_files_in_group = 3  
 
# InnoDB的日志文件所在位置. 默认是MySQL的datadir.   
# 你能够将其指定到一个独立的硬盘上或者一个RAID1卷上来提高其性能   
#innodb_log_group_home_dir   
 
# 在InnoDB缓冲池中最大同意的脏页面的比例.   
# 假设达到限额, InnoDB会開始刷新他们防止他们妨碍到干净数据页面.   
# 这是一个软限制,不被保证绝对运行.   
innodb_max_dirty_pages_pct = 90  
 
# InnoDB用来刷新日志的方法.   
# 表空间总是使用双重写入刷新方法   
# 默认值是 “fdatasync”, 还有一个是 “O_DSYNC”.   
#innodb_flush_method=O_DSYNC   
 
# 在被回滚前,一个InnoDB的事务应该等待一个锁被批准多久.   
# InnoDB在其拥有的锁表中自己主动检測事务死锁而且回滚事务.   
# 假设你使用 LOCK TABLES 指令, 或者在相同事务中使用除了InnoDB以外的其它事务安全的存储引擎   
# 那么一个死锁可能发生而InnoDB无法注意到.   
# 这样的情况下这个timeout值对于解决这样的问题就很有帮助.   
innodb_lock_wait_timeout = 120  
 
[mysqldump]   
# 不要在将内存中的整个结果写入磁盘之前缓存. 在导出很巨大的表时须要此项   
quick   
 
max_allowed_packet = 32M   
 
[mysql]   
no-auto-rehash   
 
# 只同意使用键值的 UPDATEs 和 DELETEs .   
#safe-updates   
 
[isamchk]   
key_buffer = 2048M   
sort_buffer_size = 2048M   
read_buffer = 32M   
write_buffer = 32M   
 
[myisamchk]   
key_buffer = 2048M   
sort_buffer_size = 2048M   
read_buffer = 32M   
write_buffer = 32M   
 
[mysqlhotcopy]   
interactive-timeout   
 
[mysqld_safe]   
# 添加每一个进程的可打开文件数量.   
# 警告: 确认你已经将全系统限制设定的足够高!   
# 打开大量表须要将此值设大   

open-files-limit = 8192 


以上非常多參数大家不一定用上,可是遇到了大家能知道什么意思


下面是一个測试环境的样例:

/etc/my.cnf


[mysqld]
#datadir=/var/lib/mysql
datadir=/home/data/mysql
#socket=/var/lib/mysql/mysql.sock
socket=/home/data/mysql/mysql.sock
user=mysql
port=3306
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
default-character-set=utf8
init_connect = 'SET NAMES utf8'
# Disabling symbolic-links is recommended to prevent assorted security risks;
# to do so, uncomment this line:
# symbolic-links=0
expire_logs_day=3
slow_query_log=1
#slow_query_log_file=/home/data/mysql/slow.log
server-id=1
log-bin=mysqlbin
innodb_flush_log_at_trx_commit=1
sync_binlog=1
init_connect='SET NAMES utf8'
log-bin=mysqlbin
master-host=192.168.1.106
master-user=db
master-pass=111111
master-connect-retry=60
replicate-do-db=dcs
master-port=3306
slave-net-timeout=60
#replicate-do-db=db
back_log = 512
key_buffer_size = 8M
max_allowed_packet = 4M
sort_buffer_size = 6M
read_buffer_size = 4M
join_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 64
query_cache_size = 0M
tmp_table_size = 96M
max_connections = 500
table_cache= 1024
innodb_additional_mem_pool_size= 16M
innodb_log_buffer_size= 64M
read_rnd_buffer_size= 16M
innodb_buffer_pool_size= 1G
innodb_log_file_size = 256M
max_heap_table_size = 96M
innodb_data_file_path = ibdata1:200M:autoextend
default-storage-engine=innodb
max_connect_errors = 100000
long_query_time = 1
 
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
 
[client]
#default-character-set=utf8