mysql配置文件my.cnf的事例并附解释

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql配置文件my.cnf的事例并附解释相关的知识,希望对你有一定的参考价值。

[client]

port            = 3306

socket          = /tmp/mysql.sock

[mysqld]

port            = 3306

socket          = /tmp/mysql.sock

log-error        = /data/mysql/data/mysql.err

#默认存储引擎,5.5之后默认就都是innodb

default-storage-engine=INNODB

#默认表的存储引擎,5.5之后默认就都是innodb

default_table_type = InnoDB

#安装MySQL的路径,代码调用路径

basedir=/usr/local/services/mysql

#全局数据文件及结构的存放位置;表数据(包括innodb引擎),索引,日志(除非单独设置)等文件都会存放在这里

datadir=/data/mysql/data

#innodb引擎的共享表空间数据文件根目录,如果不设置,默认使用datadir

#innodb_data_home_dir = /data/mysql/data

#默认字符集类型,按需求设定

character-set-server = utf8

#关闭一个非交互的连接之前所要等待的秒数,其取值范围为1-31536000(linux),默认值28800。太长不利于高效利用.

wait_timeout=100

#禁用DNS查找,但是就不能在mysql的授权表中使用主机名了,只能使用IP

skip-name-resolve

#跳过外部锁定,防止文件目录不可用

skip-external-locking

#使用InnoDB引擎独立表空间,每个表独立表空间,不使用共享表空间

innodb_file_per_table = 1

#在MySQL暂时停止响应新请求之前的短时间内多少个请求可以被存在堆栈中,默认值为50。并发高需要调高这个值,但是太高会占内存,不能超过系统设定值.

back_log = 103

#安全参数,与性能无关,阻止设定值次数尝试登陆失败后的客户端登陆,以防止暴力破解密码,内网安全要求低的可以适当增加

max_connect_errors = 100000

#线程处理模式,no-threads(单线程处理),one-thread-per-connection(每个请求对应一个线程),dynamically-loaded/pool-of-threads(线程池模式,官方mysql和Percona参数名字不一样)

#thread_handling = pool-of-threads

#线程池中连接超时的时间,默认500ms,调低可以提高连接池的利用

#thread_pool_stall_limit = 200

#索引缓冲区的大小,只对MyISAM表起作用,但是系统表和临时磁盘表都还是MyISAM表,要想加快这些的运行速度,这个值还是不能太低

key_buffer_size = 32M

#批量插入缓存大小,只对MyISAM表起作用,适用于在一次性插入100-1000+条记录时,提高效率。默认值是8M

bulk_insert_buffer_size = 64M

#有时候较大的插入和更新会受max_allowed_packet 参数限制,导致写入或者更新失败,按实际情况配置。

max_allowed_packet = 32M

#允许存到缓存里的表的数量,增大可改善频繁打开和关闭表的操作,有一定加快sql速度的意义,默认是64

table_open_cache = 512

#排序缓存,会话级别内存缓存,一般OLTP超过512K性能增加不明显,建议值为56K-1M,如果是数据仓库(OLAP)设置8M以上能进一步提升效果

sort_buffer_size = 512K

#TCP/IP和套接字通信缓冲区大小,创建长度达net_buffer_length的行,主要影响导入导出

net_buffer_length = 8K

#会话级别内存缓存,以顺序读扫描的方式扫描表数据的时候使用缓冲区的大小,如果很多顺序扫描,可以适当增加,只对MyISAM表起作用,

read_buffer_size = 1M

#会话级别内存缓存,以随机读扫描的方式扫描表数据的时候使用缓冲区的大小,也会用做新特性mrr的buffer

read_rnd_buffer_size = 16M

#MyISAM表发生变化时重新排序所需的缓冲,临时磁盘表都是MyISAM表,要加快临时表排序,这个值不能低,特别是数据仓库(OLAP)

myisam_sort_buffer_size = 128M

#MySQL重建索引时所允许的最大临时文件的最大大小

myisam_max_sort_file_size = 10G

#自动检查和修复没有适当关闭的 MyISAM 表

myisam_repair_threads = 1

#MyISAM表在打开的时候被自动检查,如果表被不恰当地关闭,就修复表。

myisam_recover

#启用binlog,并指定存储位置,默认存到数据目录,主库一定要开,从库可适当关闭

log-bin=/data/mysql/data/mysql-bin

#binlog类型,建议用mixed或row

binlog_format=mixed

#数据库ID号,主要用于主从复制相关

server-id = 1

#共享表空间,至少1G以上

innodb_data_file_path = ibdata1:1G:autoextend

#实例级别内存参数innodb缓存总量(包含一些其他缓存),单实例建议50%-70%,多实例建议20%左右

innodb_buffer_pool_size = 830M

#设置 InnoDB 存储的数据目录信息和其它内部数据结构的内存池大小。表越多需要分配越多的内存。如果超出设定值,会在错误日志写警告信息。默认值是 1MB.

innodb_additional_mem_pool_size = 2M

#默认为关闭OFF。如果开启该参数,启动MySQL服务时,MySQL将本地热数据加载到InnoDB缓冲池中。

innodb_buffer_pool_load_at_startup = 1

#默认为关闭OFF。在关闭时把热数据dump到本地磁盘。

innodb_buffer_pool_dump_at_shutdown = 1

#redolog硬盘参数,建议1-2G或以上

innodb_log_file_size = 1024M

#redolog内存参数,8-32M即可

innodb_log_buffer_size = 16M

#DB中设置几组redolog,默认是2,设置多一些可以减少磁盘压力,特别是大事务的情况

innodb_log_files_in_group = 3

#redolog存放目录,建议不设置,ib_logfile默认存在数据文件目录下,使用它主要是分散磁盘压力

#innodb_log_group_home_dir = /data/mysql/data

#控制innodb数据文件及redo log的打开、刷写模式,有三个值:fdatasync(默认且速度最快),O_DSYNC,O_DIRECT(禁用了系统缓存,速度慢但最安全),看需求设定

#innodb_flush_method = O_DIRECT

#事务隔离级别,总共四种:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE,默认是RR

transaction_isolation = REPEATABLE-READ

#事务提交写到硬盘的频率,0是一定量再写入,1是立刻写入(最拖慢速度最安全),2是由系统决定

innodb_flush_log_at_trx_commit = 2

#刷新binlog的频率,0由系统决定什么时候刷新,1每次事务都刷新一次(最安全),N(其他数量)每N个事务刷新一次,如果不支持group commit那么就表示n个event刷新一次,如果是支持group commit,那么就表示攒够n个binlog group才刷新一次,即支持group commit的性能更好,减少IO次数。

sync_binlog = 0

#行格式定义,有Antelope(支持冗余,紧凑行格式)和Barracuda(支持数据压缩,动态行格式,改善blob,text字段存储布局)两种,要想支持压缩类型,必须先定义Barracuda.

innodb_file_format_max = Barracuda

#当脏页占了多少百分比后就开始刷新脏页,写得越多,应该设置越低,根据LSN来参考log sequence number,Log flushed up to的差距

innodb_max_dirty_pages_pct = 35

#刷新到磁盘的脏页数量,根据硬盘性能判定,机械硬盘1千左右,SSD硬盘4-5千左右,PCIE-SSD可以1-2万以上

innodb_io_capacity = 1000

#最大刷新到磁盘的脏页数量,根据上面参数设定,但一定要比他多

innodb_io_capacity_max = 2000

#doublewrite开关,如果存储设备支持原子写,可以关闭,写入速度增加明显,其他情况建议开启

innodb_doublewrite = 1

#限制并发线程的数量,一旦执行线程的数量达到这个限制,额外的线程在被放置到对队列中之前,会睡眠数微秒,可以通过设定参数innodb_thread_sleep_delay来配置睡眠时间。默认值为0,它表示默认情况下不限制线程并发执行的数量。

innodb_thread_concurrency = 0

#在新版本mysql中,query_cache已失去意义,并且偶尔会造成query_cache锁,增加额外开销,建议直接关闭

query_cache_size=0

query_cache_type=0

#数据结构ddl操作的锁的等待时间

lock_wait_timeout = 300

#innodb的dml操作的行级锁的等待时间,innodb有自旋锁,等待时间太长会耗费资源

innodb_lock_wait_timeout = 10

#默认值为OFF,如果事务因为加锁超时,会回滚上一条语句执行的操作.如果设置ON,则整个事务都会回滚.注重事务一致性的需要开启

innodb_rollback_on_timeout = 1

#用来配置从服务器的更新是否写入二进制日志,如果有层级从库就必须开,没有的话建议关闭,能有效提高性能

log_slave_updates

#当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性。默认情况下该功能是关闭的,建议开启,可以有效保证数据一致性.

relay_log_recovery = 1

#临时表缓存,会话级别内存缓存,超过之后临时表会转到磁盘上,视乎表的空间大小而衡量设置,磁盘上的临时表引擎默认是myisam,内存的临时表引擎是memory,均不可读写

tmp_table_size=320M

#临时表缓存,会话级别内存缓存,和tmp_table_size一起限制临时表大小,可以创建的内存表(memory table)的最大行数,一般默认16M(不设置)就可以.

#max_heap_table_size=96M

#如果临时表实在太大,磁盘空间压力增大,则需要考虑设置临时表存储位置,默认是/tmp

#tmpdir=/tmp

#最大连接数限制,建议设置成历史最大连接数的80%,不然可能全部卡死

max_connections=638

#可以重新利用保存在缓存中线程的数量.当线程断开后不会立刻关闭,会保存到缓存中等待被再利用,并发高建议调大,且设置成与threads_connected一样,最好少于200,因为会耗内存.

thread_cache_size = 51

#会话级别缓存,按实际情况配置,join比较多就调大。

join_buffer_size = 32M

#开启慢查询参数,0关闭,1开启

slow_query_log = 0

#设置慢查询存储路径

slow_query_log_file = /tmp/slow_querys.log

#慢查询记录时间,建议少于0.1秒

long_query_time = 0.1

#用来设置是否记录没有使用索引的查询到慢查询记录,看需求开启。

#log_queries_not_using_indexes = OFF

#管理指令也会被记录到慢查询。比如OPTIMEZE TABLE, ALTER TABLE,看需求开启

#log-slow-admin-statements = OFF

#全局最大打开文件数,不可以超过系统设定的最大文件数,不然无效

open_files_limit = 65535

#innodb引擎最大打开文件数,不可以超过全局最大文件数.

innodb_open_files = 65535

#binlog会话级别内存缓存,事务没有提交的时候,产生的日志记录到Cache中;等到事务需要提交的时候,则把日志持久化到磁盘。 

binlog_cache_size = 4M

#最大binlog日志的缓存区大小,所有会话的binlog_cache_size总数不能超过这个值,默认就是最大值,在32位的系统中是4G,64位的是16P,设置它是防止mysql内存溢出

max_binlog_cache_size = 4G

#binlog二进制日志写入给定值,默认值是1GB,最大不能大于1G,根据实际产生情况设置,文件太大不利于打开,但是如果你正使用大的事务,二进制日志还是会超过限制

max_binlog_size = 500M

#binlog保存天数,过期自动删除

expire_logs_days=7

#mysql5.6后参数,开启后,会将所有deadlock记录在error_log中,作为dba,你应该需要知道有多少死锁信息

#innodb_print_all_deadlocks = 1

#在5.6.2之前,slave记录的master信息以及slave应用binlog的信息存放在文件中,即master.info与relay-log.info。在5.6.2版本之后,允许记录到table中

#master_info_repository = TABLE

#同上信息

#relay_log_info_repository = TABLE

#GTID模式,5.6新功能,新的复制方式,需要就打开,binlog要改成row

#gtid_mode = on

#强制GTID的一致性,一般和上面参数一起使用,但要慎重开启,开启后只允许能够保障事务安全,并且能够被日志记录的SQL语句被执行,像create table ... select 和 create temporarytable语句,以及同时更新事务表和非事务表的SQL语句或事务都不允许执行。

#enforce_gtid_consistency = 1

#关闭numa功能,5.6.27新参数

#innodb_numa_interleave = 1

#用于从flush队列中取事务的超时时间,这主要是防止并发事务过高,导致某些事务的RT上升,单位微秒,默认是0.

#binlog_max_flush_queue_time = 0


[mysqldump]

quick

max_allowed_packet = 32M

[mysql]

no-auto-rehash

prompt="\[email protected]\h \R:\m:\s [\d]> "

[myisamchk]

key_buffer_size = 20M

sort_buffer_size = 20M

read_buffer = 2M

write_buffer = 2M

[mysqlhotcopy]

interactive-timeout


以上是关于mysql配置文件my.cnf的事例并附解释的主要内容,如果未能解决你的问题,请参考以下文章

mysql my.cnf 或my.ini配置文件参数解释(转):

MySQL配置文件生效顺序

详解MySql的配置文件my.cnf

mysql 配置my.cnf时出状况了,mysql无法启动!

从启动脚本分析mysql读取my.cnf配置的顺序

MySQL配置文件my.ini或my.cnf的位置