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';