1.常用配置
port = 3306
#默认端口
pid-file = /data/mysql/mysql.pid
basedir = /usr/local/mysql/
#程序安装目录
symbolic-link = 0
#多客户访问同一数据库,该选项默认开启
tmpdir = /usr/local/mysql/tmp/
#此目录被 MySQL用来保存临时文件
open_files_limit = 65535
#打开时,和max_connections对比,取大数
datadir = /var/lib/mysql
#数据库目录
log-error = /var/lib/mysql/error.log
#错误日志路径
slow_query_log=on
#开启慢查询日志相关
long_query_time=2
#默认10秒
slow_query_log_file = /var/log/mysql/slow_query.log
#慢查询日志路径
log-queries-not-using-indexes = 1
#记录没有使用索引的sql
auto-rehash
#允许通过 TAB 键提示
default-character-set = utf8
#数据库字符集
default-time-zone = system
#服务器时区,或者'+08:00'
socket=/var/lib/mysql/mysql.sock
#该条配置需在[client]段同时配置
default_storage_engine=InnoDB
#默认存储引擎,InnoDB数据表都创建一个和业务无关的自增数字型作为主键,对保证性能很有帮助
default_table_type = InnoDB
#默认表类型
innodb_file_per_table = on
#InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间
innodb_buffer_pool_size=4G
#生产中要改,建议为操作系统内存的70%-80%,需重启服务生效
skip_name_resolve = on
#忽略主机名解析,提高访问速度(注意配置文件中使用主机名将不能解析)
lower_case_table_names = 1
#忽略表单大小写
character-set-server=utf8mb4
#设定默认字符为utf8mb4
2.查询缓存相关
query_cache_type=1
#0表示禁用缓存,1表示会缓存所有的结果,但是当SELECT语句中使用了SQL_NO_CACHE选项之后,将不会使用Query Cache。2只有当SELECT语句中使用了SQL_CACHE选项之后,才会使用Query Cache。
query_cache_limit = 2M
#可以缓存的单条查询的最大结果集的大小,默认值为1MB。
#如果某次查询的结果集大小超过这个系统变量的值,那么Query Cache就不会缓存这次查询的结果集
query_cache_size = 64M 或32M 或128M
#可以使用的最大内存空间的大小,默认值为1MB。
#设置的值必须是1024的整数倍,若不是整数倍,MySQL则会自动调整降低至达到1024倍数的最大值
query_cache_min_res_unit = 2M
#每次分配内存的最小空间大小,也就是用于缓存查询结果的最小内存空间的大小,默认值为4KB。
query_cache_wlock_invalidate = 0
#是否先让该表相关的Query Cahce失效,具有1(ON)和0(OFF)两种取值:
#0(OFF):在写锁定的同时仍然允许读取该表相关的Query Cache。
#1(ON):在写锁定的同时将使该表相关的所有Query Cache失效。
3.系统资源相关
back_log = 500
#在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。
#也就是说,如果MySql的连接数达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源
max_connections = 1000
#最大连接数,默认100,生产则需要增大该参数值,最大连接数16384
max_connect_errors = 10000
#如果某个用户发起的连接 error 超过该数值,则该用户的下次连接将被阻塞,直到管理员执行 flush hosts命令或者服务重启, 防止非法的密码以及其他在链接时的错误会增加此值
connect-timeout = 10
#连接超时之前的最大秒数,在 Linux 平台上,该超时也用作等待服务器首次回应的时间
wait_timeout = 28800
#等待关闭连接的时间
interactive_timeout = 28800
#关闭连接之前,允许 interactive_timeout(取代了wait_timeout)秒的不活动时间。客户端的会话 wait_timeout 变量被设为会话interactive_timeout 变量的值。如果前端程序采用短连接,建议缩短这2个值, 如果前端程序采用长连接,可直接注释掉这两个选项,默认配置(8小时)
slave-net-timeout = 600
#从服务器也能够处理网络连接中断。但是,只有从服务器超过slave_net_timeout 秒没有从主服务器收到数据才通知网络中断
net_read_timeout = 30
#从服务器读取信息的超时
net_write_timeout = 60
#从服务器写入信息的超时
net_retry_count = 10
#如果某个通信端口的读操作中断了,在放弃前重试多次。
net_buffer_length = 16384
#包消息缓冲区初始化为 net_buffer_length 字节,但需要时可以增长到 max_allowed_packet 字节
max_allowed_packet = 64M
#服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小
#当与大的BLOB 字段一起工作时相当必要, 每个连接独立的大小.大小动态增加。
#设置最大包,限制server接受的数据包大小,避免超长SQL的执行有问题 默认值为16M,
#当MySQL客户端或mysqld服务器收到大于 max_allowed_packet 字节的信息包时,将发出“信息包过大”错误,并关闭连接。
#对于某些客户端,如果通信信息包过大,在执行查询期间,可能会遇到“丢失与 MySQL 服务器的连接”错误。默认值 16M。
table_cache = 512
# 所有线程所打开表的数量. 增加此值就增加了mysqld所需要的文件描述符的数量这样你需要确认在
# [mysqld_safe]中 “open-files-limit” 变量设置打开文件数量允许至少4096
thread_stack = 192K
# 线程使用的堆大小. 此容量的内存在每次连接时被预留.
# MySQL本身常不会需要超过 64K 的内存如果你使用你自己的需要大量堆的 UDF 函数
# 或者你的操作系统对于某些操作需要更多的堆,你也许需要将其设置的更高一点.默认设置足以满足大多数应用
thread_cache_size = 20
#在 cache 中保留多少线程用于重用.当一个客户端断开连接后,
#如果 cache 中的线程还少于 thread_cache_size,则客户端线程被放入 cache 中.
#这可以在你需要大量新连接的时候极大的减少线程创建的开销(一般来说如果你有好的线程模型的话,这不会有明显的性能提升.)
thread_concurrency = 8
#允许应用程序给予线程系统一个提示在同一时间给予渴望被运行的线程的数量.该参数取值为服务器逻辑CPU数量×2
query_cache_min_res_unit = 2K
#查询缓存分配的最小块大小.默认是 4KB,设置值大对大数据查询有好处,但如果你的查询都是小数据查询,
#就容易造成内存碎片和浪费查询缓存碎片率=Qcache_free_blocks/Qcache_total_blocks*100%
#如果查询缓存碎片率超过 20%,可以用 FLUSH QUERY CACHE 整理缓存碎片,
#或者试试减小query_cache_min_res_unit,
#如果你的查询都是小数据量的话。查询缓存利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size *100%
#查询缓存利用率在25%以下的话说明 query_cache_size 设置的过大,可适当减小;
#查询缓存利用率在 80%以上而且 Qcache_lowmem_prunes > 50 的话
#说明 query_cache_size 可能有点小,要不就是碎片太多。
#查询缓存命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%
tmp_table_size = 512M
#临时表的最大大小,如果超过该值,则结果放到磁盘中,此限制是针对单个表的,而不是总和
max_heap_table_size = 512M
#独立的内存表所允许的最大容量.此选项为了防止意外创建一个超大的内存表导致用尽所有的内存资源
4.二进制日志相关
server_id=1 #主从服务器唯一标识
log_bin=mysql-bin #启动二级制日志
log-bin-index=master-bin.index #指定二进制索引文件的路径与名称
expire_logs_days = 7 #日志有效期天数
binlog_format = row #默认为mix,新版中设为这两项可提高安全性
binlog_row_image = minimal
max_binlog_size = 100m #Binlog最大值,最大和默认值是1GB,该设置并不能严格控制Binlog的大小,尤其是Binlog比较靠近最大值而又遇到一个比较大事务时,为了保证事务的完整性,不可能做切换日志的动作,只能将该事务的所有SQL都记录进当前日志,直到事务结束
binlog-do-db = DBNAME #指定mysql的binlog日志只记录哪个库
binlog_ignore_db = DBNAME #不记录指定的数据库的二进制日志
max_binlog_cache_size = 512m #表示binlog使用的内存最大的尺寸
binlog_cache_size = 4m #表示binlog使用的内存大小,可以通过状态变量binlog_cache_use和binlog_cache_disk_use来帮助测试。
binlog_cache_use = 10 #使用二进制日志缓存的事务数量
binlog_cache_disk_use = 10 #使用二进制日志缓存但超过binlog_cache_size值并使用临时文件来保存事务中的语句的事务数量
sync_binlog=0 #直接影响mysql的性能和完整性,0当事务提交后,Mysql仅仅是将binlog_cache中的数据写入Binlog文件,但不执行fsync之类的磁盘 同步指令通知文件系统将缓存刷新到磁盘,而让Filesystem自行决定什么时候来做同步,这个是性能最好的。n在进行n次事务提交以后,Mysql将执行一次fsync之类的磁盘同步指令,同志文件系统将Binlog文件缓存刷新到磁盘。