---
title: MySQL配置调优
description: "由于MySQL是动态管理系统，在实际应用中，有时会因参数调整不当而降低MySQL的性能，因此需要通过调节MySQL参数来优化它的性能。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengcpfs/systuningguide/systemtg/kunpengtypical_05_0015.html
sourcePath: /source/zh/kunpengcpfs/systuningguide/systemtg/kunpengtypical_05_0015.html
indexId: 0407c61a519f254188e9c6df558fcd7d1ddf646896603ed7fc3eb1ad9a472d3074
---
# MySQL配置调优

由于MySQL是动态管理系统，在实际应用中，有时会因参数调整不当而降低MySQL的性能，因此需要通过调节MySQL参数来优化它的性能。

可以通过修改默认配置路径“/etc/my.cnf”下的文件来调整MySQL的配置。以下是一个经过优化的MySQL配置文件示例，供用户参考。配置文件示例仅供参考，在实际应用中，用户应根据具体硬件环境以及业务需求等进行适当调整。


```
[mysqld_safe]
log-error=/data/mysql/log/mysql.log
pid-file=/data/mysql/run/mysqld.pid
[client]
socket=/data/mysql/run/mysql.sock
default-character-set=utf8
[mysqld]
basedir=/usr/local/mysql
tmpdir=/data/mysql/tmp
datadir=/data/mysql/data
socket=/data/mysql/run/mysql.sock
default_authentication_plugin=mysql_native_password
port=3306
user=root
max_connections=6000  #设置最大连接数
back_log=4000  #设置会话请求缓存个数
performance_schema=OFF  #关闭性能模式
max_prepared_stmt_count=1280000
large-pages  #使用大页
#file
innodb_file_per_table  #设置为每个表一个文件
innodb_log_file_size=2048M  #设置日志文件大小
innodb_log_files_in_group=8  #设置日志文件组个数
innodb_open_files=10000  #设置最大打开表个数
table_open_cache_instances=24  #设置打开句柄分区数
#buffers
innodb_buffer_pool_size=24G  #设置缓冲池大小,通常为虚拟机内存的75%
innodb_buffer_pool_instances=16  #设置缓冲池实例个数，提高并发能力
#tune
default_time_zone=+8:00
thread_cache_size=2000
sync_binlog=1  #每次事务提交时同步二进制日志
innodb_flush_log_at_trx_commit=1  #每次事务提交时MySQL都会把log buffer的数据写入日志文件，并且刷新日志到磁盘
innodb_use_native_aio=1  #开启异步IO
innodb_spin_wait_delay=4  #设置spin_wait_delay参数，防止进入系统自旋
innodb_sync_spin_loops=6  #设置spin_loops 循环次数，防止进入系统自旋
innodb_flush_method=O_DIRECT  #设置InnoDB数据文件和重做日志（redo log）的直接打开与刷写模式
innodb_io_capacity=20000  #设置InnoDB后台线程每秒最大IOPS上限
innodb_io_capacity_max=40000  #设置压力下InnoDB后台线程每秒最大IOPS上限
innodb_lru_scan_depth=8000  #设置page cleaner线程每次刷脏页的数量
innodb_page_cleaners=14  #设置将脏数据写入磁盘的线程数
innodb_spin_wait_pause_multiplier=2  #设置spin lock循环随机数
#perf special
innodb_flush_neighbors=0  #对同一区（extent）内的所有脏页进行刷新。对于SSD，建议关闭此功能
innodb_write_io_threads=5 #设置写线程数
innodb_read_io_threads=2  #设置读线程数
innodb_purge_threads=1  #设置回收已经使用并分配的undo页的线程数
innodb_read_ahead_threshold=70
innodb_random_read_ahead=OFF
innodb_old_blocks_pct=44
innodb_old_blocks_time=800
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO,STRICT_ALL_TABLES
log-bin=mysql-bin  #启用二进制日志
ssl=0  #关闭SSL
table_open_cache=30000  #设置打开表的数量
max_connect_errors=2000
innodb_adaptive_hash_index=0
mysqlx=0
```
