乐趣区

关于mysql:Mysql配置详解

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 
退出移动版