my.cnf配置
生产环境配置案例:
参考硬件: 内存32G
#MySQL 服务所允许的同时会话数的上限,经常出现Too Many Connections的错误提示,则需要增大此值
max_connections = 8000
#所有线程所打开表的数量
open_files_limit = 10240
#back_log 是操作系统在监听队列中所能保持的连接数
back_log = 300
#每个客户端连接最大的错误允许数量,当超过该次数,MYSQL服务器将禁止此主机的连接请求,直到MYSQL服务器重启或通过flush hosts命令清空此主机的相关信息
max_connect_errors = 1000000
#每个连接传输数据大小.最大1G,须是1024的倍数,一般设为最大的BLOB的值
max_allowed_packet = 32M
#指定一个请求的最大连接时间
wait_timeout = 10
# 排序缓冲被用来处理类似ORDER BY以及GROUP BY队列所引起的排序
sort_buffer_size = 16M
#读查询操作所能使用的缓冲区大小
read_buffer_size = 16M
#不带索引的全表扫描.使用的buffer的最小值
join_buffer_size = 16M
#myisam的索引高速缓冲区大小
key_buffer_size = 256M
#全文索引支持的索引最大长度,中文占位2个
ft_min_word_len = 4
#查询缓冲大小
query_cache_size = 128M
#指定单个查询能够使用的缓冲区大小,缺省为1M
query_cache_limit = 4M
# 设定默认的事务隔离级别
transaction_isolation = REPEATABLE-READ
# 线程使用的堆大小. 此值限制内存中能处理的存储过程的递归深度和SQL语句复杂性,此容量的内存在每次连接时被预留.
thread_stack = 512K
# 二进制日志功能
log-bin=/data/mysqlbinlogs/
#二进制日志格式,纯文本就是row,数据和文本混用就是mixed
binlog_format=mixed
#二进制日志自动清除时间,0为关闭,单位d
expire_logs_days = 7
#二进制日志缓存
binlog_cache_size = 16M
#二进制日志最大缓存,用于缓存事物写入
max_binlog_cache_size = 16M
#日志中基于sql语句的缓存
max_binlog_stmt_cache_size= 16M
#InnoDB使用一个缓冲池来保存索引和原始数据, 可设置这个变量到物理内存大小的80%
innodb_buffer_pool_size = 24G
#用来同步IO操作的IO线程的数量
innodb_file_io_threads = 4
#读写操作io线程数,默认CPU核心数,
innodb_write_io_threads = 16
innodb_read_io_threads = 16
#清除数据线程,默认cpu核心数
innodb_purge_threads = 16
#打开独立表空间
innodb_file_per_table = 1
#在InnoDb核心内的允许线程数量,建议的设置是CPU数量加上磁盘数量的两倍
innodb_thread_concurrency = 16
# 用来缓冲日志数据的缓冲区的大小
innodb_log_buffer_size = 16M
#在日志组中每个日志文件的大小
innodb_log_file_size = 512M
# 在日志组中的文件总数
innodb_log_files_in_group = 3
# SQL语句在被回滚前,InnoDB事务等待InnoDB行锁的时间
innodb_lock_wait_timeout = 120
#innodb缓冲池中,关于更新缓冲大小允许使用整个缓冲池的占比。更新数据时,数据在内存页则直接更新,不在则写入更新缓冲池(读该数据、关闭数据库会将缓冲池刷写磁盘,默认也会定时刷写),写多读少时(日志系统、账单类等),可以适当增加,减少从加载磁盘数据更新
innodb_change_buffer_max_size = 25
#innodb的脏数据在缓冲中的占比,超出时自动刷新脏数据
innodb_max_dirty_pages_pct = 90
#配置innodb的事物日志写入方式,2为折中方案,参考前面日志类容博客
innodb_flush_log_at_trx_commit = 2
#innodb的脏数据在刷写磁盘时的io能力,这个值建议设置成磁盘的IOPS,磁盘的IOPS可以通过fio这个工具来测试
#innodb_io_capacity = 17400
#刷写脏页数据到磁盘时,如果该页旁边都是连续的脏页,则连带一起同时写磁盘(机械盘时性能会好一些,一次io完成所有),固态盘的话则可以关掉,mysql 8.0以后默认关闭了
innodb_flush_neighbors = 0
#慢查询时长
long_query_time = 2
#将没有使用索引的查询也记录下来
log-queries-not-using-indexes
#开启慢查询日志
slow_query_log = 1
#线程缓存区,客户端连接断开后,会放入此,如果再次连接就能直接从缓冲区读取
thread-cache-size = 100
#打开表的高速缓冲区,加速表内容读取
table-open-cache = 1000
#打开临时表时开辟的最大内存空间
tmp-table-size = 32M
#独立一个内存表所允许使用的做大的缓存,防止一个表的缓存太大,将所有缓存都耗尽
max-heap-table-size = 32M
#关闭主机名反向解析
skip_name_resolve = 1
#字段使用timestamp类型时,不再自动使用当前时间,根据业务需求配置
#explicit_defaults_for_timestamp
#数据库大小写敏感,0为敏感,默认1为不敏感,2为不敏感,但建表时大小写都是原样不动。最好在初始化时指定,或第一次启动数据库时配置好
#初始化命令:mysqld -initialize --lower-case-table-names=1
lower_case_table_names = 1
#必须等待写锁解开,用于多进程同时访问表避免数据不一致,单服务器单库开了性能会下降。1为关闭,0为关闭。开了后,如果MyISAMChk检查数据库或者修复、优化表时,必须要停数据库或者mysqladmin flush-tables 解锁所有表再执行
skip-external-locking
#批量插入数据时缓存大小,提高插入数据的速度
bulk_insert_buffer_size = 8M
#指定线程缓存的数量。线程缓存用于存储已创建的线程,以便在需要时可以重用它们,而不需要频繁地创建和销毁线程,如果线程缓存中没有可用的线程,服务器将创建新的线程以处理新的连接请求
thread_cache_size = 32
#sql执行后空闲等待时间
interactive_timeout = 28800
#设置字符集
character_set_server = utf8mb4
collation_server = utf8mb4_general_ci
[client]
default-character-set=utf8mb4
[mysql]
prompt="MySQL [\d]> "
default-character-set=utf8mb4
[mysqldump]
quick
max_allowed_packet = 500M