1.配置文件路径
/etc/my.cnf # CentOS/RHEL
/etc/mysql/my.cnf # Debian/Ubuntu
/etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu/Debian
检查当前配置文件
sudo grep -v "^#" /etc/mysql/mysql.conf.d/mysqld.cnf | grep -v "^$"
备份
sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.bak
2.优化参数
InnoDB 缓冲池优化
# 设置为物理内存的 50%-70%(例如 8GB 内存设为 4-6GB)
innodb_buffer_pool_size = 4G# 缓冲池实例数(建议:1-8,大内存服务器可增加)
innodb_buffer_pool_instances = 4# 日志文件大小(建议:1-2GB)
innodb_log_file_size = 1G# 日志缓冲区大小(建议:16-64MB)
innodb_log_buffer_size = 64M
连接与线程优化
# 最大连接数(根据业务需求调整)
max_connections = 200# 线程缓存(建议:max_connections 的 10%)
thread_cache_size = 20# 连接超时(减少空闲连接占用)
wait_timeout = 300
interactive_timeout = 300
临时表与排序优化
# 临时表内存大小(建议:32-256MB)
tmp_table_size = 128M
max_heap_table_size = 128M# 排序缓冲区(建议:2-8MB)
sort_buffer_size = 4M
join_buffer_size = 4M
日志与持久化
# 禁用二进制日志(非主从复制可关闭)
# skip-log-bin# 事务提交方式(建议:1,兼顾性能与安全)
innodb_flush_log_at_trx_commit = 1# 数据写入方式(建议:O_DIRECT,避免双缓冲)
innodb_flush_method = O_DIRECT
启用性能模式(监控 SQL 性能)
performance_schema = ON
优化 InnoDB I/O
# 预读(建议:0 或 1)
innodb_read_ahead_threshold = 0# I/O 线程数(建议:4-8)
innodb_read_io_threads = 4
innodb_write_io_threads = 4
内存管理
# 表缓存(建议:2000-4000)
table_open_cache = 2000# 表定义缓存(建议:2000)
table_definition_cache = 2000
限制最大连接数
max_connections = 200
max_user_connections = 100
启用 SSL
ssl-ca=/etc/mysql/ssl/ca.pem
ssl-cert=/etc/mysql/ssl/server-cert.pem
ssl-key=/etc/mysql/ssl/server-key.pem
3.写入配置文件方式
方法 1:使用 echo 和 >> 追加内容
适用场景:在文件末尾追加新配置(不会覆盖原有内容)。
# 使用 echo 追加内容(需 sudo 权限)
echo "innodb_buffer_pool_size = 4G" | sudo tee -a /etc/mysql/mysql.conf.d/mysqld.cnf验证
sudo tail -n 5 /etc/mysql/mysql.conf.d/mysqld.cnf
方法 2:使用 sed 插入或替换内容
适用场景:修改已有配置或插入到指定位置。
1.替换已有参数
# 如果参数已存在,替换其值(例如修改 bind-address)
sudo sed -i 's/^bind-address.*/bind-address = 0.0.0.0/' /etc/mysql/mysql.conf.d/mysqld.cnf2.在指定行后插入新配置
# 在 [mysqld] 段落下方插入新配置
sudo sed -i '/^$$mysqld$$$/a innodb_buffer_pool_size = 4G' /etc/mysql/mysql.conf.d/mysqld.cnf
方法 3:使用 tee 直接写入
适用场景:覆盖或追加多行配置。
# 覆盖写入(慎用!会清空原文件)
cat <<EOF | sudo tee /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
innodb_buffer_pool_size = 4G
max_connections = 200
EOF# 追加写入(推荐)
cat <<EOF | sudo tee -a /etc/mysql/mysql.conf.d/mysqld.cnf
[mysqld]
innodb_log_file_size = 1G
EOF
方法 4:使用 vim 或 nano 手动编辑
# 使用 nano(适合新手)
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf操作步骤:1.按 i 进入编辑模式。2.修改或添加配置(例如在 [mysqld] 段落下添加参数)。3.按 Esc 退出编辑,输入 :wq 保存并退出。# 使用 vim
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf操作步骤:1. 修改文件后,按以下组合键:Ctrl + O(字母O) 2. 底部会显示 File Name to Write: mysqld.cnf,按 Enter 确认保存3. 退出编辑器:Ctrl + X如果已保存,会直接退出如果未保存,会提示 Save modified buffer?,按 Y 确认保存后退出
4.优化后检查
修改后验证配置是否正确:
sudo mysqld --validate-config
重启 MySQL 生效:
sudo systemctl restart mysql
监控 MySQL 状态
# 查看当前连接数
mysqladmin -u root -p status# 查看 InnoDB 状态
mysql -u root -p -e "SHOW ENGINE INNODB STATUS\G"
数据库sql语句验证
-- 查看所有参数
SHOW VARIABLES-- 查看所有 InnoDB 相关参数
SHOW VARIABLES LIKE 'innodb_%';-- 查看指定参数
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'max_connections';