一、日志配置优化
在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),避免日志占满磁盘导致服务中断。