Mysql-my-innodb-heavy-4G.cnf配置文件注解

Mysql-同Nginx等一样具备多实例的特点,简单的讲就是在一台服务器上同时开启多个不同的服务端口(3306,3307)同时运行多个Mysql服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务。这些Mysql多实例公用一套Mysql安装程序,使用不同的my.conf配置文件、启动程序和数据文件。

以下是主配文件以及单实例配置文件的注解

cat my-innodb-heavy-4G.cnf 
#BEGIN CONFIG INFO  #开始配置信息
#DESCR: 4GB RAM, InnoDB only, ACID, few connections, heavy queries #描述:4GB内存, InnoDB, ACID, 几个连接数, heavy查询
#TYPE: SYSTEM #类型:系统
#END CONFIG INFO #结束配置信息

#
# This is a MySQL example config file for systems with 4GB of memory  
#这是4GB内存系统-主要运行只有 InnoDB 表的 MySQL 并使用几个连接数执行复杂的查询-的一个MySQL实例配置文件
# running mostly MySQL using InnoDB only tables and performing complex 
#主要运行MySQL,仅使用InnoDB表和执行复杂操作
# queries with few connections. 
#查询连接很少
# 
# MySQL programs look for option files in a set of 
#MySQL程序在一组中查找选项文件
# locations which depend on the deployment platform. 
#位置取决于部署平台
# You can copy this option file to one of those 
#你可以将这个选项文件复制到其中之一
# locations. For information about these locations, see: 
#有关这些位置的信息,请参阅:
# http://dev.mysql.com/doc/mysql/en/option-files.html
#
# In this file, you can use all long options that a program supports. 
#在这个文件中,您可以使用程序支持的所有长选项。
# If you want to know which options a program supports, run the program 
#如果您想知道程序支持哪些选项,请运行该程序
# with the "--help" option. 
#用“--help”选项。
#
# More detailed information about the individual options can also be
# found in the manual. #有关各个选项的更多详细信息也可以在手册中找到。
#

#

#下面的选项将被MySQL客户端应用程序读取。请注意,只保证MySQL发布的客户端应用程序。
如果你想要自己的MySQL客户端程序 遵守这些值,则需要将其指定为在一个选项 
#MySQL客户端库初始化。

[client] #客户端
#password   = [your_password]
port        = 3306  #客户端服务端口
socket      = /application/mysql-5.5.32/tmp/mysql.sock 

# *** Application-specific options follow here ***

#
# The MySQL server #server 端
#
[mysqld]

# generic configuration options #通用配置选项
port        = 3306 #Mysql服务运行时端口
socket      = /application/mysql-5.5.32/tmp/mysql.sock
     #sock文件是在Linux、Unix环境下特有的,用户在Linux/Unix环境下客户端连接可以不通过TCP/IP网络而直接使用unix. socket连接mysql

     #back_log是操作系统可以保持的连接数侦听队列,在MySQL连接管理器线程之前
     处理它们。如果你有非常高的连接速度和经验“连接被拒绝”错误,您可能需要增加此值。检查您的OS文档以获取此参数的最大值。试图设置back_log高于您的操作系统限制。将不起作用

back_log = 50 

     #back_log参数的值,在Mysql暂时停止响应新请求之前,短时间内的多个请求可以被存在堆栈中,如果系统在短时间内有很多连接,则需要增加该参数的值,该参数值指定到来的TCP/IP连接的监听队列的大小。不同的操作
     系统在这个队列的大小上有自己的限制。如果试图将back_log设置高于操作系统的限制将是无效,其默认值为50.对于Linux系统而言,推荐设置小于512的整数值

     #不要在TCP/IP端口上监听。这可以是一种安全的机制。如果所有进程都需要连接到mysqld运行,则增强。
     在同一个主机上。所有与mysqld的交互都必须通过Unix进行。
     套接字或命名管道,注意,在Windows上不启用命名管道,使用此选项。(通过“启用-命名管道”选项)将使mysqld无效!
#skip-networking

     #MySQL服务器的并发会话的最大数量。允许的。其中一个连接将为用户保留。超级特权,允许管理员登录,
     即使。连接限制已经达到极限。
max_connections = 100

     # 每个主机允许的最大错误数量。 如果达到这个限制,主机将被阻止连接到MySQL服务器,
     直到“FLUSH HOSTS”已运行或服务器已重新启动。 无效
     在连接阶段输入密码和其他错误。增加这个值。请参见“aborted_connect”状态变量,
     全局计数器。

max_connect_errors = 10
     #max_connect_errors设置每个主机的连接请求异常中断的最大次数,当超过该次数,
     MySQL服务器将禁止host的连接请求,直到MySQL服务器重启或通过flush hosts命令清空此host的相关信息

table_open_cache = 2048
     #table_open_cache设置表告诉缓存的数目。每个连接进行,都会至少打开一个表缓存。
     因此,table_cache的大小英语max_connections的设置有关。例如,对于200个并行运行的连接,
     应该让表的缓存至少有200xN,这里N是应用可以执行的查询的一个联接种表的最大数量,此外还需要为临时表和文件保留一些额外的文件描述符

max_allowed_packet = 16M

binlog_cache_size = 1M
     #binlog_cache_size在一个事务中binlog为了记录sql状态所持有的cache大小,如果你经常使用大的,多声明的事务,
     可以增加此值来获取更大的性能,所有从事务来的状态都被缓冲在binlog缓冲中,然后再提交后一次性写入到binlog中,
     如果事务比此值大,会使用磁盘上的临时文件来替代,此缓冲在每个链接的事务第一次更新状态时被创建

max_heap_table_size = 64M
     #独立的内存表所允许的最大容量

read_buffer_size = 2M
     #read_buffer_size读查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每个链接独享  

read_rnd_buffer_size = 16M
     #read_rnd_buffer_size设置进行随机读的时候使用的缓冲区。此参数和read_buffer_size所设置的Buffer相反,一个是顺序读的时候使用,
     一个是随机读的时候使用。但是两者都是针对线程的设置,每个线程都可以产生两种Buffer中的任何一个。默认值是256KB,最大值4GB

sort_buffer_size = 8M
     #设置查询排序时所能使用的缓冲区大小,系统默认大小为8MB
     注意:该参数对应的分配内存是每个连接独占的,如果有100个链接,那么实际分配的总排序缓冲区大小为100*6=600MB,所以对于在4GB左右的服务器来说,推荐将其设置为6MB~8MB

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

thread_cache_size = 8
     #设置Thread Cache池中可以缓存的连接线程最大数量,可设置0~16384,默认为8,这个值表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程江北放到缓存中;
     如果线程重新被请求,那么请从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多线程,增加这个值可以改善系统性能。通过比较Connections和Threads_created状态的变量,
     可以看到这个变量的作用。1GB内存我们配置为8,2GB内存我们配置为16,3GB内存我们配置32,4GB或4GB以上我们给此值为64或更大的值

thread_concurrency = 8
     #该参数取值为服务器逻辑CPU数量x2,在本例中,服务器有两个物理CPU,而每个物理CPU又支持H.T超线程,所以实际取值为4 x 2 = 8.这也是双核主流服务器的配置

query_cache_size = 64M
     #指定MySQL查询缓冲区的大小,可以通过MySQL控制台观察,如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲区不够的情况,如果Qcache_hits的值非常大,则表明查询缓冲区使用得非常频繁。
     另外如果改值较小反而会影响效率,那么可以考虑不用查询缓冲,对于Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多。

query_cache_limit = 2M
     #只有小于此设置值的结果才会被缓存

ft_min_word_len = 4
     #如果果是英文默认值是比较合理的,但是中文绝大部分都是2个字符,这就导致小于4个字的词不能被索引,全文索引功能就形同虚设了

default-storage-engine = MYISAM
     #如果在创建表的语句中没有指定,当创建一个新表时所使用的默认表类型

thread_stack = 192K
     #设置MySQL每个线程的堆栈大小,默认值足够大,可满足普通操作。可设置范围为128KB至4GB,默认为192kb

transaction_isolation = REPEATABLE-READ
     #数据库隔离级别
      READ UNCOMMITTED=读取未提交内容
      READ COMMITTED=读取提交内容
      REPEATABLE READ=可重读
      SERIALIZABLE=可串行化

tmp_table_size = 64M
     #设置内存临时表最大字号,如果超过该值,则会将临时表写入磁盘,其范围1kb指4GB

log-bin=mysql-bin
binlog_format=mixed
     #表示开启binlog日志   

slow_query_log
     #记录慢查询,慢查询是指消耗超过“long_query_time”中定义的总时间的查询,如果“ log_short_format”没有启用,不使用索引的查询。

long_query_time = 2
     #记录慢查询的时间,所有超过该时间的查询都将被视为缓慢的。

# ***  Replication related settings 

server-id = 1
    #1到32之间的唯一服务器标识号,如果是主从或多实例ID号不能相同

key_buffer_size = 32M
     #指定用于索引的缓冲区大小,增加它可以得到更好的索引处理性能。对于内存在4GB左右的服务器来说,此参数可以设置256MGB或384MB

bulk_insert_buffer_size = 64M
     #如果经常性的需要使用批量插入的特殊语语句来插入数据,可以适当调整参数至16MB~32MB,建议8M,设置0则禁用该优化

myisam_sort_buffer_size = 128M
     #当MySQL需要REPAIR、OPTIMEIZE、ALTER表语句重建索引,以及LOAD DATA INFILE到一个空表时,该缓冲区被分配。可设置范围48tytes至4GB

myisam_max_sort_file_size = 10G
     #当重新建索引(REPAIR,ALTER,TABLE,或者LOAD,DATA,TNFILE)时,MySQL被允许使用临时文件的最大值。

myisam_repair_threads = 1
     #如果一个表拥有超过一个索引,MyISAM可以通过并行排序使用超过一个线程去修复

myisam_recover
     #自动检查和修复没有正确关闭的MyISAM表

innodb_file_io_threads = 4
     #InnoDB中的文件I/O线程,通常设置为4。如果是windows可以设置更大的值以提高磁盘I/O
innodb_additional_mem_pool_size = 16M
     #用来设置InnoDB存储的数据目录信息和其他内部数据结构的内存池大小,应用程序里的表越多,你需要在这里分配越多的内存。
     对于一个相对稳定的应用,这个参数的大小也是相对应的。如果InnoDB用光了这个池内的内存,InnoDB开始从操作系统分配内存,
     并且往MySQL错误日志写警告信息。当发现错误日志中已经有相关的警告信息时,就应该适当的增加该参数的大小。

innodb_buffer_pool_size = 2G
     #InnoDB使用一个缓冲池来保存索引和原始数据,设置越大,在存取里面数据时需要的磁盘I/O越少。强烈建议不要讲InnoDB的buffer pool值配置为物理内存的50%-80%,应根据具体环境而定。

innodb_data_file_path = ibdata1:10M:autoextend
     #设置配置一个可扩展大小的尺寸为10M的单独未见,名为ibdata1没有给出文件的位置,所以默认是在MySQL的数据目录内,还可以自己制定数量,autoextend代表自增

innodb_write_io_threads = 8
     #此处代表MySQL Innodb对I/O读写线程的支持,配太多也没用,因为IO能力有限,需要配合特殊机型
innodb_read_io_threads = 8
     #在MySQL5.1.x版本中使用参数:innodb_file_io_threads:作用后台线程处理数据页上的读写IO请求数量;而在
     MySQL5.5.x中用innodb_read_io_threads和Innodb_write_io_threads取代此版本之前参数,该参
     数值之和=2*cpu个数*cpu核数;如果你的系统读>写,可以设置innodb_read_io_threads值相对大点;反之,也可以.

#innodb_force_recovery=1

innodb_thread_concurrency = 16
     #innoDB内核里面允许线程数量,最佳的高度取决于应用程序、硬件以及操作系统的调读属性。太高的值可能导致线程颠簸

innodb_flush_log_at_trx_commit = 1
     #如果设置为1,InnoDB在每次提交(提供完整的 ACID行为)时刷新事务到磁盘。
     如果你想安全地进行折中,并且你正在运行小事务,你可以为0或者2来减少日志的磁盘I/O。
     值0代表只被写入到日志文件,并且日志文件大约每1秒刷新到磁盘
     值2代表日志在每次提交时被写入到日志,但是日志文件知识大约每秒一次刷新到磁盘

innodb_log_buffer_size = 8M
     #InnoDB缓冲日志数据所使用的缓冲区大小,一旦它满了,InnoDB将它刷新到磁盘。

innodb_log_file_size = 256M
     #一个日志组中每个日志文件的大小,你可以设置日志的联合大小为你缓冲池大小的25%-100%,
     以避免对日志文件不必要的缓冲池动态刷新重写

innodb_log_files_in_group = 3
     #日志组中文件的总数,通常值为2-3就已经足够

innodb_max_dirty_pages_pct = 90
     #InnoDB缓冲池中允许的脏页面的最大百分比,如果它达到了,InnoDB将开始积极清理,以免消耗完所有的干净页面,这是一个软限制,不保证能够一直保持

innodb_lock_wait_timeout = 120
     ##InnoDB事务被回滚之前可以等待一个锁定的超时描述,InnoDB在它自己的锁定表中自动检测事务死锁并且回滚事务。InnoDB用local tables语句注意到锁表设置

[mysqldump]

quick

max_allowed_packet = 16M
     #设定在网络传输中一次消息量的最大值,最大值是1GB,必须设置为1024的倍数,单位为字节。
[mysql]
no-auto-rehash

# Only allow UPDATEs and DELETEs that use keys.
     #只允许使用键值的updates和delete
#safe-updates

[myisamchk]
key_buffer_size = 512M
     #指定用于索引的缓冲区大小,增加它可以更好的索引处理性能,对于内存4GB左右的服务器来说,该参数可以设置为256MB或384MB
sort_buffer_size = 512M
     #设置查询排序时所能使用的缓冲区大小。
     注意:该参数对应的分配内存是每个连接独占的,如果有100个链接,那么实际上分配的总排序缓冲区大小为100x6=600MB,所以对于在4GB左右的服务器来说推荐将其设置6MB~8MB
read_buffer = 8M

write_buffer = 8M

[mysqlhotcopy]
interactive-timeout

[mysqld_safe]
#Increase the amount of open files allowed per process. Warning: Make
#sure you have set the global system limit high enough! The high value
#is required for a large number of opened tables
open-files-limit = 8192
     #增加每次处理所允许打开的文件数量,确保你已经设置全局系统限制足够高。对于一个大数量的打开表,高值是必须的

【my.cnf】-配置文件注解

[client]                   ####客户端  
port  = 3306               ####mysql客户端连接时的默认端口号  
socket  = /application/mysql-5.5.32/tmp/mysql.sock  
[mysqld]  
port  = 3306               ####mysql服务器监听的默认端口  
socket  = /application/mysql-5.5.32/tmp/mysql.sock  
back_log = 50              ####是指保持在操作系统监听队列的连接数量,即在MySQL连接管理器线程处理他们之前的连接数量  
max_connections = 100      ####MySQL允许的并发会话的最大数量  
max_connect_errors = 10    ####每个主机允许的最大错误数量  
table_open_cache = 2048    ####所有线程打开表的数字,文件描述符的大小  
max_allowed_packet = 16M   ####服务器一次能处理的最大的查询包的值,也是服务器程序能够处理的最大查询  
binlog_cache_size = 1M     ####在一个事务中,二进制日志能够处理SQL语句的缓存的最大数字,如果你经常使用复杂语句的事务,你可以增大这个值获得更好的性能,事务中所有的语句都会被缓存到binlog中并且一次性的提交后立刻写入二进制日志中。如果处理的事务大于这个值,磁盘上的临时文件被代替使用,这个缓冲会在在事务中第一次有更改状态时,被分配的每个链接上。  
max_heap_table_size = 64M  ####独立的内存表所允许的最大容量  
read_buffer_size = 2M      ####MySql读入缓冲区大小。  
read_rnd_buffer_size = 16M ####是MySql的随机读缓冲区大小。  
sort_buffer_size = 8M      #### 排序缓冲被用来处理类似ORDER BY以及GROUP BY队列所引起的排序  
join_buffer_size = 8M      ####此缓冲被使用来优化全联合(full JOINs 不带索引的联合).  
thread_cache_size = 8      ####我们在cache中保留多少线程用于重用  
thread_concurrency = 8     ####此允许应用程序给予线程系统一个提示在同一时间给予渴望被运行的线程的数量.  
query_cache_size = 64M     ####查询缓冲的大小。查询缓冲常被用来缓冲 SELECT 的结果并且在下一次同样查询的时候不再执行直接返回结果.  
query_cache_limit = 2M     ####只有小于此设定值的结果才会被缓冲  
ft_min_word_len = 4        #### 被全文检索索引的最小的字长.  
default-storage-engine = MYISAM        ####当创建新表时作为默认使用的表类型  
thread_stack = 192K                    ####线程使用的堆大小. 此容量的内存在每次连接时被预留  
transaction_isolation = REPEATABLE-READ  
tmp_table_size = 64M                   ####内部(内存中)临时表的最大大小  
log-bin=mysql-bin                      ####打开二进制日志功能.  
binlog_format=mixed                    ####设定记录二进制日志的格式,有三种格式,基于语句 statement、 基于行 row、 混合方式 mixed  
slow_query_log                         ####记录慢查询,  
long_query_time = 2                    ####所有的超过这个参数时间的请求将被作为慢查询  
server-id = 1                          ####唯一的服务标识号,它的取值在1到 2^32-1之间,这个值在主服务器和从服务器是被要求设置的。他的默认参数是1,如果是主机不需要设置,但是如果忽略此选项,MySQL不会作为master生效.   
key_buffer_size = 32M                  ####关键词缓冲的大小, 一般用来缓冲MyISAM表的索引块.  
bulk_insert_buffer_size = 64M          ####MyISAM 使用特殊的类似树的cache来使得突发插入,(这些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATA INFILE) 更快. 此变量限制每个进程中缓冲树的字节数.   
myisam_sort_buffer_size = 128M         ####当需要对于执行REPAIR, OPTIMIZE, ALTER 语句重建索引时,MySQL会分配这个缓存,以及LOAD DATA INFILE会加载到一个新表,它会根据最大的配置认真的分配的每个线程。   
myisam_max_sort_file_size = 10G        ####当重新建索引(REPAIR,ALTER,TABLE,或者LOAD,DATA,TNFILE)时,MySQL被允许使用临时文件的最大值。  
myisam_repair_threads = 1              ####如果一个表拥有超过一个索引, MyISAM 可以通过并行排序使用超过一个线程去修复他们.  
myisam_recover                         ####自动检查和修复没有适当关闭的 MyISAM 表.  
innodb_additional_mem_pool_size = 16M  ####附加的内存池被InnoDB用来保存 metadata 信息  
innodb_buffer_pool_size = 2G           ####InnoDB使用一个缓冲池来保存索引和原始数据,   
innodb_data_file_path = ibdata1:10M:autoextend  ####InnoDB 将数据保存在一个或者多个数据文件中成为表空间.  
innodb_write_io_threads = 8          
innodb_read_io_threads = 8             ####用来同步IO操作的IO线程的数量.  
innodb_thread_concurrency = 16         ####使用InnoDB引擎,内核被允许的线程数,这个最佳值取决于应用程序,硬件还有操作系统的调度程序。太高的值肯定会导致线程抖动。  
innodb_flush_log_at_trx_commit = 1     ####如果设置为1 ,InnoDB会在每次提交后刷新(fsync)事务日志到磁盘上,  
innodb_log_buffer_size = 8M            ####用来缓冲日志数据的缓冲区的大小.  
innodb_log_file_size = 256M            ####在日志组中每个日志文件的大小,  
innodb_log_files_in_group = 3          ####在日志组中文件的总量,通常2-3就足够了  
innodb_max_dirty_pages_pct = 90        ####在InnoDB缓冲池中最大允许的脏页面的比例.  
innodb_lock_wait_timeout = 120         ####在被回滚前,一个InnoDB的事务应该等待一个锁被批准多久.  
[mysqldump]  
quick  
max_allowed_packet = 16M    
[mysql]  
no-auto-rehash  
[myisamchk]  
key_buffer_size = 512M  
sort_buffer_size = 512M  
read_buffer = 8M  
write_buffer = 8M  
[mysqlhotcopy]  
interactive-timeout  
[mysqld_safe]  
open-files-limit = 8192               ####每个程序允许打开文件的数量 

猜你喜欢

转载自blog.51cto.com/jungiewolf/2113216