Mysql 配置调优【16G/32G】
先确定 mysql 配置文件(my.ini)位置,一般在 ProgramData/MySQL/MySQL Server 5.7 目录下,备份原文件,然后根据下面的内存配置进行对应修改,没有的配置项则进行对应增加,修改完成之后重启 Mysql 服务。
配置详解
参数项
参数值
参数说明
[client]
客户端设置(当前为客户端默认参数)
port
3306
默认连接端口为3306
socket
/tmp/mysql.sock
本地连接的socket套接字
default_character_set
utf8
设置字符集,通常使用utf8
[mysqld_safe]
mysqld_safe是服务器端工具,用于启动mysqld,也是mysqld的守护进程。当mysql被kill时,mysqld_safe负责重启启动它。
open_files_limit
8192
此为MySQL打开的文件描述符限制,它是MySQL中的一个全局变量且不可动态修改。它控制着mysqld进程能使用的最大文件描述符数量。默认最小值为1024。需要注意的是这个变量的值并不一定是你在这里设置的值,mysqld会在系统允许的情况下尽量取最大值。当open_files_limit没有被配置时,比较max_connections5和ulimit -n的值,取最大值。当open_file_limit被配置时,比较open_files_limit和max_connections5的值,取最大值
user
mysql
用户名
log-error
error.log
错误log记录文件
[mysqld]
服务端基本配置
port
3306
mysqld服务端监听端口
socket
/tmp/mysql.sock
MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
max_allowed_packet
16M
允许最大接收数据包的大小,防止服务器发送过大的数据包。当发出长查询或mysqld返回较大结果时,mysqld才会分配内存,所以增大这个值风险不大,默认16M,也可以根据需求改大,但太大会有溢出风险。取较小值是一种安全措施,避免偶然出现但大数据包导致内存溢出。
default_storage_engine
InnoDB
创建数据表时,默认使用的存储引擎。这个变量还可以通过–default-table-type进行设置
max_connections
512
最大连接数,当前服务器允许多少并发连接。默认为100,一般设置为小于1000即可。太高会导致内存占用过多,MySQL服务器会卡死。作为参考,小型站设置100-300
max_user_connections
50
用户最大的连接数,默认值为50 一般使用默认即可。
thread_cache_size
64
线程缓存,用于缓存空闲的线程。这个数表示可重新使用保存在缓存中的线程数,当对方断开连接时,如果缓存还有空间,那么客户端的线程就会被放到缓存中,以便提高系统性能。我们可根据物理内存来对这个值进行设置,对应规则 1G 为 8;2G 为 16;3G 为 32;4G 为 64 等。
query_cache_type
1
设置为0时,则禁用查询缓存(尽管仍分配query_cache_size个字节的缓冲区)。设置为1时,除非指定SQL_NO_CACHE,否则所有SELECT查询都将被缓存。设置为2时,则仅缓存带有SQL CACHE子句的查询。请注意,如果在禁用查询缓存的情况下启动服务器,则无法在运行时启用服务器。
query_cache_size
64M
缓存select语句和结果集大小的参数。查询缓存会存储一个select查询的文本与被传送到客户端的相应结果。如果之后接收到一个相同的查询,服务器会从查询缓存中检索结果,而不是再次分析和执行这个同样的查询。如果你的环境中写操作很少,读操作频繁,那么打开query_cache_type=1,会对性能有明显提升。如果写操作频繁,则应该关闭它(query_cache_type=0)。
sort_buffer_size
2M
排序缓冲区的大小。增加这个值加速ORDER BY或GROUP BY操作。
join_buffer_size
128K
联接缓冲区大小。增加这个值加速联接查询。
table_definition_cache
400
这个参数控制着可以同时打开的.frm文件数,即表描述符缓存大小,默认为1400。增大该值可以减少打开表的时间。但设置太高会导致mysqld占用过多内存。
table_open_cache
400
这个参数控制着可以同时打开的表缓存数,默认为400。增大该值可以提高性能,但设置太高会导致mysqld占用过多内存。
log_error
error.log
记录启动,运行或停止 mysqld 时出现的问题的日志文件
log_warnings
2
日志记录级别,默认为1。可选值:1(记录错误和关键的警告)、2(记录错误、警告和信息性消息)、3(记录错误、警告、信息和调试消息)
slow_query_log
1
是否记录慢查询,默认不开启。可选值:1(开启)、0(关闭)
slow_query_log_file
slow.log
慢查询日志文件
long_query_time
0.5
日志记录的慢查询阈值,单位秒。超过这个时间将记录到慢查询日志中。
log_queries_not_using_indexes
1
是否记录未使用索引的查询,默认不记录。可选值:1(开启)、0(关闭)
min_examined_row_limit
100
未使用索引的查询最小检查行数,超过这个数值将会记录日志。默认为0,表示不限制。
general_log_file
general.log
普通查询日志文件,记录执行过的所有SQL语句,默认关闭
general_log
0
是否开启普通查询日志,可选值:1(开启)、0(关闭),默认关闭
server_id
42
服务器唯一ID,主从复制需要配置,范围1-232。每个ID必须不同。
log_bin
mysql-bin
二进制日志文件前缀
binlog_cache_size
1M
二进制日志缓存大小,非事务性表的增删改的数据,先存到这个缓存中,再定期写入二进制日志中。可以加速事务提交及增删改的速度,但需要消耗一些内存。
max_binlog_size
128M
单个二进制文件的最大大小,达到后会自动滚动生成新的二进制日志文件。可以通过expire_logs_days限制日志总大小。
sync_binlog
0
二进制日志同步模式,可选值:0 - 根据binlog_format的值判断是否同步;1 - 强制同步;N - 每N次事件同步一次
expire_logs_days
5
二进制日志自动删除/过期的天数。过期日志将被purge线程自动删除。0表示不自动删除。
binlog_format
ROW
二进制日志格式,可选值:STATEMENT、ROW、MIXED。建议使用ROW。
binlog_row_image
MINIMAL
二进制日志存储行图像的格式。FULL保存完整的行数据;MINIMAL只保存被修改的列及所需的其它列。MINIMAL可以减少日志量,节省IO开销。
key_buffer_size
8M
MyISAM引擎索引缓存区大小。增大可获取更好的索引处理性能,特别是对于读密集的应用,但会占用更多内存。一般设置为物理内存的15-25%。
innodb_buffer_pool_size
128M
InnoDB存储引擎表数据缓存区大小,对于InnoDB来说,是最重要的参数之一。默认为8M,通常设置为实例物理内存的50-80%,最大不要超过物理内存的80%。
innodb_log_file_size
48M
Redo log文件大小,建议设置为innodb_buffer_pool_size的1/4到1/2。
innodb_log_buffer_size
8M
Redo log buffer大小,用于写入redo log的内存缓冲区大小。
max_heap_table_size
32M
内存临时表最大大小。MYSQL会在需要时自动将大表或结果集放到磁盘上,已避免内存耗尽。默认为16M,可以根据需要调大,但不要超过物理内存的50%。
tmp_table_size
32M
内存临时表大小,默认32M。MYSQL在需要时也会自动将大表或结果集放到磁盘上,以避免内存耗尽。可根据需要调大,但不要超过物理内存的50%。
innodb_file_per_table
1
是否给每个InnoDB表分配独立的表空间文件。启用这个参数,可以减少表空间碎片,提高存储利用率。默认为0,即所有表共享一个系统表空间ibdata1文件。
innodb_flush_log_at_trx_commit
1
决定了事务提交时刷新日志到磁盘的频率。建议保持默认值1,以获得完全的事务安全性。
innodb_flush_method
O_DIRECT
InnoDB刷新数据文件和日志文件到磁盘的方法。建议使用O_DIRECT避免进行双写入。
skip_name_resolve
1
是否跳过DNS解析。设置为1可以加速新连接的建立,但无法使用主机名连接MYSQL。
slave_compressed_protocol
1
是否压缩主从复制通信协议的数据流。开启可以减少网络开销。
sync_master_info
10000
主从同步的master信息写入间隔,默认10000(10秒)。缩短这个时间可以减少主从同步中断时丢失的二进制日志量,但会增加一些IO消耗。
sync_relay_log
10000
中继日志同步到磁盘的时间间隔,默认10000(10秒)。缩短这个时间可以减少主从中断时丢失的中继日志量,但会增加IO消耗。
sync_relay_log_info
10000
中继日志信息同步到磁盘的时间间隔,默认10000(10秒)。
推荐数据库配置
16G 内存
参数名称
推荐值
key_buffer_size
128M
max_allowed_packet
256M
table_open_cache
4096
sort_buffer_size
16M
read_buffer_size
32M
read_rnd_buffer_size
16M
myisam_sort_buffer_size
128M
thread_cache_size
64
query_cache_type
0
tmp_table_size
64M
max_connections
500
max_connect_errors
100
open_files_limit
65535
innodb_file_per_table
1
innodb_buffer_pool_instances
4~8
innodb_buffer_pool_size
4G~8G
innodb_log_file_size
1G~2G
innodb_log_buffer_size
64
innodb_flush_log_at_trx_commit
2
innodb_lock_wait_timeout
60
back_log
128
32G 内存
参数名称
推荐值
key_buffer_size
128M
max_allowed_packet
256M
table_open_cache
4096
sort_buffer_size
16M
read_buffer_size
32M
read_rnd_buffer_size
16M
myisam_sort_buffer_size
128M
thread_cache_size
64
query_cache_type
0
tmp_table_size
128M
max_connections
500
max_connect_errors
100
open_files_limit
65535
innodb_file_per_table
1
innodb_buffer_pool_instances
8
innodb_buffer_pool_size
8G~16G
innodb_log_file_size
2G~4G
innodb_log_buffer_size
256M
innodb_flush_log_at_trx_commit
2
innodb_lock_wait_timeout
60
back_log
128
注意事项
innodb_buffer_pool_instances,innodb_log_file_size 参数调节注意
设置 innodb_buffer_pool_size 参数的时候,innodb_buffer_pool_instances 的取值约为 innodb_buffer_pool_size/1G,innodb_log_file_size 取值最小为 innodb_buffer_pool_size/4,向上取整数。
max_connections 参数调节
目前查询了线上几个数据库的 Max_used_connections 参数,平均为 200~300 左右,max_connections 的取值推荐为 Max_used_connections / 0.85,比如数据库的 Max_used_connections= 256,则 max_connections = 256 /0.85 = 300,最大不超过 2 倍 Max_used_connections,也就是 512。不太确定的直接 500~1000 即可,值过大可能导致性能损耗。
show global status like 'Max_used_connections';
!