my.cnf配置实际上是一件很是复杂的事情,受限因素太多,好比服务器配置、并发数量、网络等。 咱们只有不段观察不断根据实际状况改进才有可能达到咱们想要的效果。 本人水平有限,整理出来部分,与你们共享。 首先列出我能列出的全部参数,而后列出我我的认为有比较重要的参数以及配置的注意事项,其中部份内容来自网络。 1、参数列表 一、 port = 3306 端口号 二、 socket = mysql.sock 套接字 三、 default-character-set = utf8 新数据库或数据表的默认字符集 四、 basedir = path mysql的安装目录 五、 datadir = path mysql的数据存放目录 六、 pid-file = filepath 存在mysql进程id的文件 七、 lower_case_table_name = 1/0 新目录和数据表的名字是否只容许使用小写字母,默认值是1。 八、 back_log = 600 该参数值指定到来的TCP/IP链接的监听队列的大小。5.6.20默认值80。 九、 open_files_limit = 65535 MySQL打开的文件描述符限制;当open_files_limit没有被配置的时候,比较max_connections*5和ulimit -n的值,哪一个大用哪一个 十、 collation-server = name 新数据库或数据表的默认排序方式。 十一、 lanuage = name 用指定的语言显示出错信息。 十二、 max_connections = 3000 最大链接数,该值设置过小会出现错误 too many connections 1三、 max_connect_errors = 6000 设置每一个主机的链接请求异常中断的最大次数,当超过该次数,MYSQL服务器将禁止host的链接请求,直到mysql服务器重启或经过flush hosts命令清空此host的相关信息。 1四、 table_cache = 614 指示表调整缓冲区大小 1五、 max_allowed_packet = 32M 设置在网络传输中一次消息传输量的最大值 1六、 sort_buffer_size = 2M 是一个connection级参数,在每一个connection(session)第一次须要使用这个buffer的时候,一次性分配设置的内存。 1七、 join_buffer_size = 2M 用于表间关联缓存的大小,和sort_buffer_size同样,该参数对应的分配内存也是每一个链接独享。 1八、 thread_cache_size = 300 服务器线程缓存 1九、 query_cache_size = 64M 查询缓存 20、 query_cache_limit = 4M 单个查询缓存可以使用的缓冲区大小 2一、 query_cache_min_res_unit = 2k 它指定分配缓冲区空间的最小单位,缺省为4K。 2二、 default-storage-engine = InnoDB 默认存储引擎 2三、 thread_stack = 192K 每一个线程的堆栈大小 2四、 transaction_isolation = 隔离级别 1.READ UNCOMMITTED-读未提交2.READ COMMITTE-读已提交3.REPEATABLE READ -可重复读4.SERIALIZABLE -串行 2五、 tmp_table_size = 256M 临时表最大容量 2六、 key_buffer_size = 2048M 用于索引的缓冲区大小,增长它能够获得更好的索引处理性能,对于内存在4GB左右的服务器来讲,该参数可设置为256MB或384MB 2七、 expire_logs_days = 30 超过30天的binlog删除 2八、 read_buffer_size = 1M MySql读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySql会为它分配一段内存缓冲区。read_buffer_size变量 控制这一缓冲区的大小。若是对表的顺序扫描请求很是频繁,而且你认为频繁扫描进行得太慢,能够经过增长该变量值以及内存缓冲 区大小提升其性能。和sort_buffer_size同样,该参数对应的分配内存也是每一个链接独享。 2九、 read_rnd_buffer_size = 16M MySql的随机读(查询操做)缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时, MySql会首先扫描一遍该缓冲,以免磁盘搜索,提升查询速度,若是须要排序大量数据,可适当调高该值。但MySql会为每一个客户链接 发放该缓冲空间,因此应尽可能适当设置该值,以免内存开销过大。 30、innodb_additional_mem_pool_size = 16M 这个参数用来设置 InnoDB 存储的数据目录信息和其它内部数据结构的内存池大小,相似于Oracle的library cache。 这不是一个强制参数,能够被突破。 3一、innodb_buffer_pool_size = 2048M 这对Innodb表来讲很是重要。Innodb相比MyISAM表对缓冲更为敏感。MyISAM能够在默认的 key_buffer_size 设置下 运行的能够,然而Innodb在默认的 innodb_buffer_pool_size 设置下却跟蜗牛似的。因为Innodb把数据和索引都缓存起来,无需留给操做系统太多的内存,所以若是只须要用Innodb的话则能够设置它高达 70-80% 的可用内存。一些应用于 key_buffer 的规则有 — 若是你的数据量不大,而且不会暴增,那么无需把 innodb_buffer_pool_size 设置的太大了 3二、innodb_data_file_path = ibdata1:1024M:autoextend 表空间文件 重要数据 3三、innodb_file_io_threads = 4 文件IO的线程数,通常为 4,可是在 Windows 下,能够设置得较大。 3四、innodb_thread_concurrency = 8 服务器有几个CPU就设置为几,建议用默认设置,通常为8. 3五、innodb_flush_log_at_trx_commit = 2 若是将此参数设置为1,将在每次提交事务后将日志写入磁盘。为提供性能,能够设置为0或2,但要承担在发生故障时丢失数据的风险。 设置为0表示事务日志写入日志文件,而日志文件每秒刷新到磁盘一次。设置为2表示事务日志将在提交时写入日志,但日志文件每次 刷新到磁盘一次。 3六、innodb_log_buffer_size = 16M 此参数肯定些日志文件所用的内存大小,以M为单位。缓冲区更大能提升性能,但意外的故障将会丢失数据.MySQL开发人员建议设置为1-8M之间 3七、innodb_log_file_size = 128M 此参数肯定数据日志文件的大小,以M为单位,更大的设置能够提升性能,但也会增长恢复故障数据库所需的时间 3八、innodb_log_files_in_group = 3 为提升性能,MySQL能够以循环方式将日志文件写到多个文件。推荐设置为3M 3九、innodb_max_dirty_pages_pct = 90 Buffer_Pool中Dirty_Page所占的数量,直接影响InnoDB的关闭时间。参数innodb_max_dirty_pages_pct 能够直接控制了Dirty_Page在Buffer_Pool中所占的比率,并且幸运的是innodb_max_dirty_pages_pct是能够动态改变的。因此,在关闭InnoDB以前先将innodb_max_dirty_pages_pct调小,强制数据块Flush一段时间,则可以大大缩短 MySQL关闭的时间。 40、innodb_lock_wait_timeout = 120 InnoDB 有其内置的死锁检测机制,能致使未完成的事务回滚。可是,若是结合InnoDB使用MyISAM的lock tables 语句或第三方事务引擎,则InnoDB没法识别死锁。为消除这种可能性,能够将innodb_lock_wait_timeout设置为一个整数值,指示 MySQL在容许其余事务修改那些最终受事务回滚的数据以前要等待多长时间(秒数) 4一、innodb_file_per_table = 0 独享表空间(关闭) 4二、bulk_insert_buffer_size = 64M 批量插入数据缓存大小,能够有效提升插入效率,默认为8M --------------------------------如下内容来自网络--------------------------------------------------------------- mysqld程序:通讯、网络、信息安全 enable-named-pipes 容许Windows 2000/XP环境下的客户和服务器使用命名管道(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通讯端口(一般是3306端口)。 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 MySQL服务器同时处理的数据库链接的最大数量(默认设置是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是服务器的主机名)。 log-slow-queries [= file] 把执行用时超过long_query_time变量值的查询命令记入日志(慢查询日志); 若是没有给出file参数,MySQL将在数据库目录里建立一个hostname-slow.log文件做为这种日志文件(hostname是服务器主机 名)。 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)。在前一个二进制日志文件里的信息量超过这个最大长度以前,MySQL服务器会自动提供一个新的二进制日志文件接续上。 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-id = n 给服务器分配一个独一无二的ID编号; n的取值范围是1~2的32次方启用二进制日志功能。 log-bin = name 启用二进制日志功能。这种日志的文件名是filename.n或默认的hostname.n,其中的n是一个6位数字的整数(日志文件顺序编号)。 binlog-do/ignore-db = dbname 只把给定数据库里的变化状况记入二进制日志文件/不把给定的数据库里的变化记入二进制日志文件。 mysqld程序:镜像(从属镜像服务器) server-id = n 给服务器分配一个惟一的ID编号 log-slave-updates 启用从属服务器上的日志功能,使这台计算机能够用来构成一个镜像链(A->B->C)。 master-host = hostname 主控服务器的主机名或IP地址。若是从属服务器上存在mater.info文件(镜像关系定义文件),它将忽略此选项。 master-user = replicusername 从属服务器用来链接主控服务器的用户名。若是从属服务器上存在mater.info文件,它将忽略此选项。 master-password = passwd 从属服务器用来链接主控服务器的密码。若是从属服务器上存在mater.info文件,它将忽略此选项。 master-port = n 从属服务器用来链接主控服务器的TCP/IP端口(默认设置是3306端口)。 master-connect-retry = n 若是与主控服务器的链接没有成功,则等待n秒(s)后再进行管理方式(默认设置是60s)。若是从属服务器存在mater.info文件,它将忽略此选项。 master-ssl-xxx = xxx 对主、从服务器之间的SSL通讯进行配置。 read-only = 0/1 0: 容许从属服务器独立地执行SQL命令(默认设置); 1: 从属服务器只能执行来自主控服务器的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数据库镜像处理为从属服务器上的db2name数据库。 report-host = hostname 从属服务器的主机名; 这项信息只与SHOW SLAVE HOSTS命令有关–主控服务器能够用这条命令生成一份从属服务器的名单。 slave-compressed-protocol = 1 主、从服务器使用压缩格式进行通讯–若是它们都支持这么作的话。 slave-skip-errors = n1, n2, …或all 即便发生出错代码为n一、n2等的错误,镜像处理工做也继续进行(即无论发生什么错误,镜像处理工做也继续进行)。若是配置得当,从属服务器不该 该在执行 SQL命令时发生错误(在主控服务器上执行出错的SQL命令不会被发送到从属服务器上作镜像处理); 若是不使用slave-skip-errors选项,从属服务器上的镜像工做就可能由于发生错误而中断,中断后须要有人工参与才能继续进行。 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。除文件名外,还能够用硬盘分区的设置名来定义表 空间,此时必须给表空间的最大初始长度值加上newraw关键字作后缀,给表空间的最大扩充长度值加上raw关键字作后缀(例如/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缓存区的数据写入数据表,那些数据将在MySQL服务器下次启动 时再写入 (这么作没有什么风险,由于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一块儿使用时没有多大意义(启用MySQL服务器的二进制日志功能就足够用了)。 mysqld程序–InnoDB:缓存区的设置和优化 innodb_log_buffer_pool_size = n 为InnoDB数据表及其索引而保留的RAM内存量(默认设置是8MB)。这个参数对速度有着至关大的影响,若是计算机上只运行有 MySQL/InnoDB数据库服务器,就应该把所有内存的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 MySQL服务器的IP地址。若是MySQL服务器所在的计算机有多个IP地址,这个选项将很是重要。 default-storage-engine = type 新数据表的默认数据表类型(默认设置是MyISAM)。这项设置还能够经过–default-table-type选项来设置。 default-timezone = name 为MySQL服务器设置一个地理时区(若是它与本地计算机的地理时区不同)。 ft_min_word_len = n 全文索引的最小单词长度工。这个选项的默认设置是4,意思是在建立全文索引时不考虑那些由3个或更少的字符构建单词。 Max-allowed-packet = n 客户与服务器之间交换的数据包的最大长度,这个数字至少应该大于客户程序将要处理的最大BLOB块的长度。这个选项的默认设置是1MB。 Sql-mode = model1, mode2, … MySQL将运行在哪种SQL模式下。这个选项的做用是让MySQL与其余的数据库系统保持最大程度的兼容。这个选项的可取值包括ansi、db二、 oracle、no_zero_date、pipes_as_concat。