一、日志配置優化
在CentOS中,MySQL日志的配置主要通過/etc/my.cnf
(或/etc/mysql/my.cnf
)文件完成,合理配置是高效管理的基礎。需重點設置以下參數:
log_error = /var/log/mysql/error.log
(指定錯誤日志路徑,記錄啟動、運行及錯誤信息);slow_query_log = 1
(啟用慢查詢)、slow_query_log_file = /var/log/mysql/slow-query.log
(指定日志路徑)、long_query_time = 2
(設置慢查詢閾值,默認10秒,可根據業務調整);general_log = 1
(啟用,記錄所有客戶端查詢,生產環境慎用)、general_log_file = /var/log/mysql/mysql.log
(指定路徑);log_bin = /var/log/mysql/mysql-bin
(啟用,記錄數據變更語句,用于復制和恢復)、expire_logs_days = 7
(自動清理7天前的二進制日志,減少磁盤占用)。sudo systemctl restart mysqld
。二、常用日志查看命令
tail -f
命令跟蹤日志文件的實時更新,例如查看錯誤日志:sudo tail -f /var/log/mysql/error.log
;grep
篩選特定信息,如查找錯誤日志中的“ERROR”記錄:sudo grep 'ERROR' /var/log/mysql/error.log
;less
命令分頁瀏覽大日志文件,例如:sudo less /var/log/mysql/slow-query.log
(按空格
翻頁,q
退出);mysqlbinlog
工具解析二進制日志(位于/var/lib/mysql/
目錄,文件名如hostname-bin.000001
),例如:sudo mysqlbinlog /var/lib/mysql/hostname-bin.000001
。三、日志輪轉配置(避免磁盤爆滿)
使用CentOS自帶的logrotate
工具定期輪轉日志,防止日志文件過大。創建/etc/logrotate.d/mysql
配置文件,添加以下內容:
/var/log/mysql/*.log {
daily # 每天輪轉
rotate 14 # 保留14個舊日志
compress # 壓縮舊日志(節省空間)
delaycompress # 延遲壓縮(避免壓縮當天日志)
missingok # 忽略缺失的日志文件
notifempty # 空日志不輪轉
create 640 mysql mysql # 創建新日志文件并設置權限
sharedscripts # 所有日志輪轉完成后執行腳本
postrotate
/usr/bin/mysqladmin flush-logs > /dev/null 2>&1 || true # 通知MySQL刷新日志
endscript
}
配置完成后,logrotate
會自動按計劃執行(默認每天),無需手動干預。
四、日志清理策略
expire_logs_days
參數設置保留天數(如expire_logs_days = 7
),MySQL會自動刪除過期日志;PURGE BINARY LOGS
命令,例如刪除2025-10-01之前的日志:PURGE BINARY LOGS BEFORE '2025-10-01';
;find
命令定期清理舊日志(如7天前),例如清理慢查詢日志:find /var/log/mysql/ -type f -name "*.log" -mtime +7 -exec rm {} \;
(需謹慎操作,避免誤刪)。五、日志分析技巧
mysqldumpslow
(MySQL自帶):mysqldumpslow -s t /var/log/mysql/slow-query.log
(按查詢時間排序,找出最耗時的查詢);pt-query-digest
(Percona Toolkit):pt-query-digest /var/log/mysql/slow-query.log > slow_query_analysis.txt
(生成詳細分析報告,包含慢查詢占比、執行頻率等);grep
篩選錯誤類型,例如查找“Connection refused”錯誤:sudo grep 'Connection refused' /var/log/mysql/error.log
;六、注意事項
mysql
用戶或root
)可訪問,避免數據泄露;/var/log/mysql/
目錄的磁盤使用情況(如df -h /var/log/mysql
),避免日志占滿磁盤導致服務中斷。