MySQL配置文件my.cnf 例子最详细翻译,能够保存作笔记用。
#BEGIN CONFIG INFO
#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少许的链接, 队列负载大
#TYPE: SYSTEM
#END CONFIG INFO
#
# 此mysql配置文件例子针对4G内存。
# 主要使用INNODB
#处理复杂队列而且链接数量较少的mysql服务器
#
# 将此文件复制到/etc/my.cnf 做为全局设置,
# mysql-data-dir/my.cnf 做为服务器指定设置
# (@localstatedir@ for this installation) 或者放入
# ~/.my.cnf 做为用户设置.
#
# 在此配置文件中, 你可使用全部程序支持的长选项.
# 若是想获悉程序支持的全部选项
# 请在程序后加上”–help”参数运行程序.
#
# 关于独立选项更多的细节信息能够在手册内找到
#
#
# 如下选项会被MySQL客户端应用读取.
# 注意只有MySQL附带的客户端应用程序保证能够读取这段内容.
# 若是你想你本身的MySQL应用程序获取这些值
# 须要在MySQL客户端库初始化的时候指定这些选项
#
[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 = 50
# 不在TCP/IP端口上进行监听.
# 若是全部的进程都是在同一台服务器链接到本地的mysqld,
# 这样设置将是加强安全的方法
# 全部mysqld的链接都是经过Unix sockets 或者命名管道进行的.
# 注意在windows下若是没有打开命名管道选项而只是用此项
# (经过 “enable-named-pipe” 选项) 将会致使mysql服务没有任何做用!
#skip-networking
# MySQL 服务所容许的同时会话数的上限
# 其中一个链接将被SUPER权限保留做为管理员登陆.
# 即使已经达到了链接数的上限.
max_connections = 100
# 每一个客户端链接最大的错误容许数量,若是达到了此限制.
# 这个客户端将会被MySQL服务阻止直到执行了”FLUSH HOSTS” 或者服务重启
# 非法的密码以及其余在连接时的错误会增长此值.
# 查看 “Aborted_connects” 状态来获取全局计数器.
max_connect_errors = 10
# 全部线程所打开表的数量.
# 增长此值就增长了mysqld所须要的文件描述符的数量
# 这样你须要确认在[mysqld_safe]中 “open-files-limit” 变量设置打开文件数量容许至少4096
table_cache = 2048
# 容许外部文件级别的锁. 打开文件锁会对性能形成负面影响
# 因此只有在你在一样的文件上运行多个数据库实例时才使用此选项(注意仍会有其余约束!)
# 或者你在文件层面上使用了其余一些软件依赖来锁定MyISAM表
#external-locking
# 服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小(当与大的BLOB字段一块儿工做时至关必要)
# 每一个链接独立的大小.大小动态增长
max_allowed_packet = 16M
# 在一个事务中binlog为了记录SQL状态所持有的cache大小
# 若是你常用大的,多声明的事务,你能够增长此值来获取更大的性能.
# 全部从事务来的状态都将被缓冲在binlog缓冲中而后在提交后一次性写入到binlog中
# 若是事务比此值大, 会使用磁盘上的临时文件来替代.
# 此缓冲在每一个链接的事务第一次更新状态时被建立
binlog_cache_size = 1M
# 独立的内存表所容许的最大容量.
# 此选项为了防止意外建立一个超大的内存表致使永尽全部的内存资源.
max_heap_table_size = 64M
# 排序缓冲被用来处理相似ORDER BY以及GROUP BY队列所引发的排序
# 若是排序后的数据没法放入排序缓冲,
# 一个用来替代的基于磁盘的合并分类会被使用
# 查看 “Sort_merge_passes” 状态变量.
# 在排序发生时由每一个线程分配
sort_buffer_size = 8M
# 此缓冲被使用来优化全联合(full JOINs 不带索引的联合).
# 相似的联合在极大多数状况下有很是糟糕的性能表现,
# 可是将此值设大可以减轻性能影响.
# 经过 “Select_full_join” 状态变量查看全联合的数量
# 当全联合发生时,在每一个线程中分配
join_buffer_size = 8M
# 咱们在cache中保留多少线程用于重用
# 当一个客户端断开链接后,若是cache中的线程还少于thread_cache_size,
# 则客户端线程被放入cache中.
# 这能够在你须要大量新链接的时候极大的减小线程建立的开销
# (通常来讲若是你有好的线程模型的话,这不会有明显的性能提高.)
thread_cache_size = 8
# 此容许应用程序给予线程系统一个提示在同一时间给予渴望被运行的线程的数量.
# 此值只对于支持 thread_concurrency() 函数的系统有意义( 例如Sun Solaris).
# 你可能够尝试使用 [CPU数量]*(2..4) 来做为thread_concurrency的值
thread_concurrency = 8
# 查询缓冲常被用来缓冲 SELECT 的结果而且在下一次一样查询的时候再也不执行直接返回结果.
# 打开查询缓冲能够极大的提升服务器速度, 若是你有大量的相同的查询而且不多修改表.
# 查看 “Qcache_lowmem_prunes” 状态变量来检查是否当前值对于你的负载来讲是否足够高.
# 注意: 在你表常常变化的状况下或者若是你的查询原文每次都不一样,
# 查询缓冲也许引发性能降低而不是性能提高.
query_cache_size = 64M
# 只有小于此设定值的结果才会被缓冲
# 此设置用来保护查询缓冲,防止一个极大的结果集将其余全部的查询结果都覆盖.
query_cache_limit = 2M
# 被全文检索索引的最小的字长.
# 你也许但愿减小它,若是你须要搜索更短字的时候.
# 注意在你修改此值以后,
# 你须要重建你的 FULLTEXT 索引
ft_min_word_len = 4
# 若是你的系统支持 memlock() 函数,你也许但愿打开此选项用以让运行中的mysql在在内存高度紧张的时候,数据在内存中保持锁定而且防止可能被swapping out
# 此选项对于性能有益
#memlock
# 当建立新表时做为默认使用的表类型,
# 若是在建立表示没有特别执行表类型,将会使用此值
default_table_type = MYISAM
# 线程使用的堆大小. 此容量的内存在每次链接时被预留.
# MySQL 自己常不会须要超过64K的内存
# 若是你使用你本身的须要大量堆的UDF函数
# 或者你的操做系统对于某些操做须要更多的堆,
# 你也许须要将其设置的更高一点.
thread_stack = 192K
# 设定默认的事务隔离级别.可用的级别以下:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE
transaction_isolation = REPEATABLE-READ
# 内部(内存中)临时表的最大大小
# 若是一个表增加到比此值更大,将会自动转换为基于磁盘的表.
# 此限制是针对单个表的,而不是总和.
tmp_table_size = 64M
# 打开二进制日志功能.
# 在复制(replication)配置中,做为MASTER主服务器必须打开此项
# 若是你须要从你最后的备份中作基于时间点的恢复,你也一样须要二进制日志.
log-bin=mysql-bin
# 若是你在使用链式从服务器结构的复制模式 (A->B->C),
# 你须要在服务器B上打开此项.
# 此选项打开在从线程上重作过的更新的日志,
# 并将其写入从服务器的二进制日志.
#log_slave_updates
# 打开全查询日志. 全部的由服务器接收到的查询 (甚至对于一个错误语法的查询)
# 都会被记录下来. 这对于调试很是有用, 在生产环境中经常关闭此项.
#log
# 将警告打印输出到错误log文件. 若是你对于MySQL有任何问题
# 你应该打开警告log而且仔细审查错误日志,查出可能的缘由.
#log_warnings
# 记录慢速查询. 慢速查询是指消耗了比 “long_query_time” 定义的更多时间的查询.
# 若是 log_long_format 被打开,那些没有使用索引的查询也会被记录.
# 若是你常常增长新查询到已有的系统内的话. 通常来讲这是一个好主意,
log_slow_queries
# 全部的使用了比这个时间(以秒为单位)更多的查询会被认为是慢速查询.
# 不要在这里使用”1″, 不然会致使全部的查询,甚至很是快的查询页被记录下来(因为MySQL 目前时间的精确度只能达到秒的级别).
long_query_time = 2
# 在慢速日志中记录更多的信息.
# 通常此项最好打开.
# 打开此项会记录使得那些没有使用索引的查询也被做为到慢速查询附加到慢速日志里
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段的注释来使其生效)
#
# 为了配置此主机做为复制的slave服务器,你能够选择两种方法:
#
# 1) 使用 CHANGE MASTER TO 命令 (在咱们的手册中有完整描述) -
# 语法以下:
#
# CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
# MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
# 你须要替换掉 <host>, <user>, <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 = <hostname>
#
# 当链接到master上时slave所用来认证的用户名 - 必须
#master-user = <username>
#
# 当链接到master上时slave所用来认证的密码 - 必须
#master-password = <password>
#
# master监听的端口.
# 可选 - 默认是3306
#master-port = <port>
# 使得slave只读.只有用户拥有SUPER权限和在上面的slave线程可以修改数据.
# 你可使用此项去保证没有应用程序会意外的修改slave而不是master上的数据
#read_only
#*** MyISAM 相关选项
# 关键词缓冲的大小, 通常用来缓冲MyISAM表的索引块.
# 不要将其设置大于你可用内存的30%,
# 由于一部份内存一样被OS用来缓冲行数据
# 甚至在你并不使用MyISAM 表的状况下, 你也须要仍旧设置起 8-64M 内存因为它一样会被内部临时磁盘表使用.
key_buffer_size = 32M
# 用来作MyISAM表全表扫描的缓冲大小.
# 当全表扫描须要时,在对应线程中分配.
read_buffer_size = 2M
# 当在排序以后,从一个已经排序好的序列中读取行时,行数据将从这个缓冲中读取来防止磁盘寻道.
# 若是你增高此值,能够提升不少ORDER BY的性能.
# 当须要时由每一个线程分配
read_rnd_buffer_size = 16M
# MyISAM 使用特殊的相似树的cache来使得突发插入
# (这些插入是,INSERT SELECT, INSERT VALUES (), (), , 以及 LOAD DATA
# INFILE) 更快. 此变量限制每一个进程中缓冲树的字节数.
# 设置为 0 会关闭此优化.
# 为了最优化不要将此值设置大于 “key_buffer_size”.
# 当突发插入被检测到时此缓冲将被分配.
bulk_insert_buffer_size = 64M
# 此缓冲当MySQL须要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE 到一个空表中引发重建索引时被分配.
# 这在每一个线程中被分配.因此在设置大值时须要当心.
myisam_sort_buffer_size = 128M
# 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 = 16M
# InnoDB使用一个缓冲池来保存索引和原始数据, 不像 MyISAM.
# 这里你设置越大,你在存取表里面数据时所须要的磁盘I/O越少.
# 在一个独立使用的数据库服务器上,你能够设置这个变量到服务器物理内存大小的80%
# 不要设置过大,不然,因为物理内存的竞争可能致使操做系统的换页颠簸.
# 注意在32位系统上你每一个进程可能被限制在 2-3.5G 用户层面内存限制,
# 因此不要设置的过高.
innodb_buffer_pool_size = 2G
# InnoDB 将数据保存在一个或者多个数据文件中成为表空间.
# 若是你只有单个逻辑驱动保存你的数据,一个单个的自增文件就足够好了.
# 其余状况下.每一个设备一个文件通常都是个好的选择.
# 你也能够配置InnoDB来使用裸盘分区 - 请参考手册来获取更多相关内容
innodb_data_file_path = ibdata1:10M:autoextend
# 设置此选项若是你但愿InnoDB表空间文件被保存在其余分区.
# 默认保存在MySQL的datadir中.
#innodb_data_home_dir = <directory>
# 用来同步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 = 1
# 加速InnoDB的关闭. 这会阻止InnoDB在关闭时作全清除以及插入缓冲合并.
# 这可能极大增长关机时间, 可是取而代之的是InnoDB可能在下次启动时作这些操做.
#innodb_fast_shutdown
# 用来缓冲日志数据的缓冲区的大小.
# 当此值快满时, InnoDB将必须刷新数据到磁盘上.
# 因为基本上每秒都会刷新一次,因此没有必要将此值设置的太大(甚至对于长事务而言)
innodb_log_buffer_size = 8M
# 在日志组中每一个日志文件的大小.
# 你应该设置日志文件总合大小到你缓冲池大小的25%~100%
# 来避免在日志文件覆写上没必要要的缓冲池刷新行为.
# 不论如何, 请注意一个大的日志文件大小会增长恢复进程所须要的时间.
innodb_log_file_size = 256M
# 在日志组中的文件总数.
# 一般来讲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 = 16M
[mysql]
no-auto-rehash
# 仅仅容许使用键值的 UPDATEs 和 DELETEs .
#safe-updates
[isamchk]
key_buffer = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[myisamchk]
key_buffer = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
# 增长每一个进程的可打开文件数量.
# 警告: 确认你已经将全系统限制设定的足够高!
# 打开大量表须要将此值设b
open-files-limit = 8192
======================================================================
Mysql参数优化对于新手来说,是比较难懂的东西,其实这个参数优化,是个很复杂的东西,对于不一样的网站,及其在线量,访问量,帖子数量,网络状况,以及机器硬件配置都有关系,优化不可能一次性完成,须要不断的观察以及调试,才有可能获得最佳效果。
下面先说个人服务器的硬件以及论坛状况,
CPU: 2颗四核Intel Xeon 2.00GHz
内存: 4GB DDR
硬盘: SCSI 146GB
论坛:在线会员 通常在 5000 人左右 - 最高记录是 13264.
下面,咱们根据以上硬件配置结合一份已经作过一次优化的my.cnf进行分析说明:有些参数可能还得根据论坛的变化状况以及程序员的程序进行再调整。
[mysqld]
port = 3306
serverid = 1
socket = /tmp/mysql.sock
skip-locking # 避免MySQL的外部锁定,减小出错概率加强稳定性。 skip-name-resolve
禁止MySQL对外部链接进行DNS解析,使用这一选项能够消除MySQL进行DNS解析的时间。但须要注意,若是开启该选项,则全部远程主机链接受权都要使用IP地址方式,不然MySQL将没法正常处理链接请求!
back_log = 500
要求 MySQL 能有的链接数量。当主要MySQL线程在一个很短期内获得很是多的链接请求,这就起做用,而后主线程花些时间(尽管很短)检查链接而且启动一个新线程。
back_log值指出在MySQL暂时中止回答新请求以前的短期内多少个请求能够被存在堆栈中。只有若是指望在一个短期内有不少链接,你须要增长 它,换句话说,这值对到来的TCP/IP链接的侦听队列的大小。你的操做系统在这个队列大小上有它本身的限制。试图设定back_log高于你的操做系统 的限制将是无效的。当你观察你的主机进程列表,发现大量 264084 | unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待链接进程时,就要加大 back_log 的值了。默认数值是50,我把它改成500。
key_buffer_size = 384M
# key_buffer_size指定用于索引的缓冲区大小,增长它可获得更好处理的索引(对全部读和多重写),到你能负担得起那样多。若是你使它太大,系 统将开始换页而且真的变慢了。对于内存在4GB左右的服务器该参数可设置为384M或512M。经过检查状态值Key_read_requests和 Key_reads,能够知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽量的低,至少是1:100,1:1000更好(上述状态值可使用SHOW STATUS LIKE ‘key_read%’得到)。注意:该参数值设置的过大反而会是服务器总体效率下降!
max_allowed_packet = 32M
增长该变量的值十分安全,这是由于仅当须要时才会分配额外内存。例如,仅当你发出长查询或mysqld必须返回大的结果行时mysqld才会分配更多内 存。该变量之因此取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而致使内存溢出。
table_cache = 512
table_cache指定表高速缓存的大小。每当MySQL访问一个表时,若是在表缓冲区中还有空间,该表就被打开并放入其中,这样能够更快地访问表内 容。经过检查峰值时间的状态值Open_tables和Opened_tables,能够决定是否须要增长table_cache的值。若是你发现 open_tables等于table_cache,而且opened_tables在不断增加,那么你就须要增长table_cache的值了(上述状 态值可使用SHOW STATUS LIKE ‘Open%tables’得到)。注意,不能盲目地把table_cache设置成很大的值。若是设置得过高,可能会形成文件描述符不足,从而形成性能 不稳定或者链接失败。
sort_buffer_size = 4M
查询排序时所能使用的缓冲区大小。注意:该参数对应的分配内存是每链接独占!若是有100个链接,那么实际分配的总共排序缓冲区大小为100 × 4 = 400MB。因此,对于内存在4GB左右的服务器推荐设置为4-8M。
read_buffer_size = 4M
读查询操做所能使用的缓冲区大小。和sort_buffer_size同样,该参数对应的分配内存也是每链接独享!
join_buffer_size = 8M
联合查询操做所能使用的缓冲区大小,和sort_buffer_size同样,该参数对应的分配内存也是每链接独享!
myisam_sort_buffer_size = 64M
MyISAM表发生变化时从新排序所需的缓冲
query_cache_size = 64M
指定MySQL查询缓冲区的大小。能够经过在MySQL控制台执行如下命令观察:
# > SHOW VARIABLES LIKE ‘%query_cache%’; # > SHOW STATUS LIKE ‘Qcache%’; # 若是Qcache_lowmem_prunes的值很是大,则代表常常出现缓冲不够的状况;
若是Qcache_hits的值很是大,则代表查询缓冲使用很是频繁,若是该值较小反而会影响效率,那么能够考虑不用查询缓冲;Qcache_free_blocks,若是该值很是大,则代表缓冲区中碎片不少。
thread_cache_size = 64
能够复用的保存在中的线程的数量。若是有,新的线程从缓存中取得,当断开链接的时候若是有空间,客户的线置在缓存中。若是有不少新的线程,为了提升性能可 以这个变量值。经过比较 Connections 和 Threads_created 状态的变量,能够看到这个变量的做用
tmp_table_size = 256M
max_connections = 1000
指定MySQL容许的最大链接进程数。若是在访问论坛时常常出现Too Many Connections的错误提示,则须要增大该参数值。
max_connect_errors = 10000000
对于同一主机,若是有超出该参数值个数的中断错误链接,则该主机将被禁止链接。如需对该主机进行解禁,执行:FLUSH HOST;。
wait_timeout = 10
指定一个请求的最大链接时间,对于4GB左右内存的服务器能够设置为5-10。
thread_concurrency = 8
该参数取值为服务器逻辑CPU数量×2,在本例中,服务器有2颗物理CPU,而每颗物理CPU又支持H.T超线程,因此实际取值为4 × 2 = 8
skip-networking
开启该选项能够完全关闭MySQL的TCP/IP链接方式,若是WEB服务器是以远程链接的方式访问MySQL数据库服务器则不要开启该选项!不然将没法正常链接!
long_query_time = 10
log-slow-queries =
log-queries-not-using-indexes
开启慢查询日志( slow query log )
慢查询日志对于跟踪有问题的查询很是有用。它记录全部查过long_query_time的查询,若是须要,还能够记录不使用索引的记录。下面是一个慢查询日志的例子:
开启慢查询日志,须要设置参数log_slow_queries、long_query_times、log-queries-not-using-indexes。
log_slow_queries指定日志文件,若是不提供文件名,MySQL将本身产生缺省文件名。long_query_times指定慢查询的阈 值,缺省是10秒。log-queries-not-using-indexes是4.1.0之后引入的参数,它指示记录不使用索引的查询。设置 long_query_time=10
外附上使用show status命令查看mysql状态相关的值及其含义:
使用show status命令
含义以下:
aborted_clients 客户端非法中断链接次数
aborted_connects 链接mysql失败次数
com_xxx xxx命令执行次数,有不少条
connections 链接mysql的数量
Created_tmp_disk_tables 在磁盘上建立的临时表
Created_tmp_tables 在内存里建立的临时表
Created_tmp_files 临时文件数
Key_read_requests The number of requests to read a key block from the cache
Key_reads The number of physical reads of a key block from disk
Max_used_connections 同时使用的链接数
Open_tables 开放的表
Open_files 开放的文件
Opened_tables 打开的表
Questions 提交到server的查询数
Sort_merge_passes 若是这个值很大,应该增长my.cnf中的sort_buffer值
Uptime 服务器已经工做的秒数
提高性能的建议:
1.若是opened_tables太大,应该把my.cnf中的table_cache变大
2.若是Key_reads太大,则应该把my.cnf中key_buffer_size变大.能够用Key_reads/Key_read_requests计算出cache失败率
3.若是Handler_read_rnd太大,则你写的SQL语句里不少查询都是要扫描整个表,而没有发挥索引的键的做用
4.若是Threads_created太大,就要增长my.cnf中thread_cache_size的值.能够用Threads_created/Connections计算cache命中率
5.若是Created_tmp_disk_tables太大,就要增长my.cnf中tmp_table_size的值,用基于内存的临时表代替基于磁盘的
===================================================================
存储引擎是什么?MySQL中的数据用各类不一样的技术存储在文件(或者内 正确的编译方法当然重要,但它只是提升MySQL服务器性能工做的一部分。MySQL服务器的许多参数会影响服务器的性能表现,并且咱们能够把这些参数保 存到配置文件,使得每次MySQL服务器启动时这些参数都自动发挥做用。这个配置文件就是my.cnf。
MySQL服务器提供了my.cnf文件的几个示例,它们能够在/usr/local/mysql/share/mysql/目录下找到,名字分别为 my-small.cnf、my-medium.cnf、my-large.cnf以及my-huge.cnf。文件名字中关于规模的说明描述了该配置文 件适用的系统类型。例如,若是运行MySQL服务器的系统内存很少,并且MySQL只是偶尔使用,那么使用my-small.cnf配置文件最为理想,这 个配置文件告诉mysqld daemon使用最少的系统资源。反之,若是MySQL服务器用于支持一个大规模的在线商场,系统拥有2G的内存,那么使用mysql-huge.cnf 最为合适。
要使用上述示例配置文件,咱们应该先复制一个最适合要求的配置文件,并把它命名为my.cnf。这个复制获得的配置文件能够按照以下三种方式使用:
全局:把这个my.cnf文件复制到服务器的/etc目录,此时文件中所定义的参数将全局有效,即对该服务器上运行的全部MySQL数据库服务器都有效。
局部:把这个my.cnf文件复制到[MYSQL-INSTALL-DIR]/var/将使该文件只对指定的服务器有效,其中[MYSQL-INSTALL-DIR]表示安装MySQL的目录。
用户:最后,咱们还能够把该文件的做用范围局限到指定的用户,这只需把my.cnf文件复制到用户的根目录便可。
那么,如何设置my.cnf文件中的参数呢?或者进一步说,哪些参数是咱们能够设置的呢?全部这些参数都对MySQL服务器有着全局性的影响,但同时每一 个参数都和MySQL的特定部分关系较为密切。例如,max_connections参数属于mysqld一类。那么,如何才能得知这一点呢?这只需执行 以下命令:
% >/usr/local/mysql/libexec/mysqld –help
该命令将显示出和mysqld有关的各类选项和参数。要寻找这些参数很是方便,由于这些参数都在“Possible variables for option –set-variable (-O) are”这行内容的后面。找到这些参数以后,咱们就能够在my.cnf文件中按照以下方式设置全部这些参数:
set-variable = max_connections=100
这行代码的效果是:同时链接MySQL服务器的最大链接数量限制为100。不要忘了在my.cnf文件[mysqld]小节加上一个set-variable指令,具体请参见配置文件中的示例
文章来自: 好喜好学习网(http://www.haoxiai.net/) 网址:http://www.haoxiai.net/shujuku/mysql/102251.html
==================================================================
确的编译方法当然重要,但它只是提升MySQL服务器性能工做的一部分。MySQL服务器的许多参数会影响服务器的性能表现,并且咱们能够把这些参数保存到配置文件,使得每次MySQL服务器启动时这些参数都自动发挥做用。这个配置文件就是my.cnf。
MySQL服务器提供了my.cnf文件的几个示例,它们能够在/usr/local/mysql/share/mysql/目录下找到,名字分别为 my-small.cnf、my-medium.cnf、my-large.cnf以及my-huge.cnf。文件名字中关于规模的说明描述了该配置文 件适用的系统类型。例如,若是运行MySQL服务器的系统内存很少,并且MySQL只是偶尔使用,那么使用my-small.cnf配置文件最为理想,这 个配置文件告诉mysqld daemon使用最少的系统资源。反之,若是MySQL服务器用于支持一个大规模的在线商场,系统拥有2G的内存,那么使用mysql-huge.cnf 最为合适。
要使用上述示例配置文件,咱们应该先复制一个最适合要求的配置文件,并把它命名为my.cnf。这个复制获得的配置文件能够按照以下三种方式使用:
全局:把这个my.cnf文件复制到服务器的/etc目录,此时文件中所定义的参数将全局有效,即对该服务器上运行的全部MySQL数据库服务器都有效。
局部:把这个my.cnf文件复制到[MYSQL-INSTALL-DIR]/var/将使该文件只对指定的服务器有效,其中[MYSQL-INSTALL-DIR]表示安装MySQL的目录。
用户:最后,咱们还能够把该文件的做用范围局限到指定的用户,这只需把my.cnf文件复制到用户的根目录便可。
那么,如何设置my.cnf文件中的参数呢?或者进一步说,哪些参数是咱们能够设置的呢?全部这些参数都对MySQL服务器有着全局性的影响,但同时每一 个参数都和MySQL的特定部分关系较为密切。例如,max_connections参数属于mysqld一类。那么,如何才能得知这一点呢?这只需执行 以下命令:
% >/usr/local/mysql/libexec/mysqld –help
该命令将显示出和mysqld有关的各类选项和参数。要寻找这些参数很是方便,由于这些参数都在“Possible variables for option –set-variable (-O) are”这行内容的后面。找到这些参数以后,咱们就能够在my.cnf文件中按照以下方式设置全部这些参数:
set-variable = max_connections=100
这行代码的效果是:同时链接MySQL服务器的最大链接数量限制为100。不要忘了在my.cnf文件[mysqld]小节加上一个set-variable指令,具体请参见配置文件中的示例html
转自mysql
my.cnf 详解与优化 - CSDN博客
http://blog.csdn.net/mr_mablevi/article/details/5587878程序员