Ubuntu系统中,MySQL的日志主要分为以下几类,每种日志的默认路径和作用如下:
/var/log/mysql/error.log。/var/log/mysql/mysql-query.log(需手动启用)。long_query_time=2秒),用于性能优化(如索引调整)。默认路径为/var/log/mysql/slow.log(需手动启用)。/var/log/mysql/mysql-bin.*(需手动启用)。MySQL的日志配置需通过编辑配置文件实现,Ubuntu中配置文件通常为/etc/mysql/mysql.conf.d/mysqld.cnf(或/etc/mysql/my.cnf)。以下是常见日志的配置项:
log_error参数指定路径(如log_error = /var/log/mysql/error.log)。general_log = ON(启用)和general_log_file(指定路径,如general_log_file = /var/log/mysql/general.log)。slow_query_log = ON(启用)、long_query_time(阈值,单位:秒,如long_query_time = 2)和slow_query_log_file(指定路径,如slow_query_log_file = /var/log/mysql/slow.log)。log_bin = ON(启用)和binlog_format(格式,推荐ROW,如binlog_format = ROW);还可通过expire_logs_days设置自动清理天数(如expire_logs_days = 7,保留最近7天)。注意:修改配置文件后,需重启MySQL服务使配置生效:
sudo systemctl restart mysql
根据日志类型,使用不同命令查看内容:
sudo tail -f /var/log/mysql/error.log
sudo tail -f /var/log/mysql/general.log
sudo tail -f /var/log/mysql/slow.log
mysqlbinlog工具查看(需指定日志文件路径):sudo mysqlbinlog /var/log/mysql/mysql-bin.000001
若要导出为SQL文件(便于分析):sudo mysqlbinlog /var/log/mysql/mysql-bin.000001 > /tmp/binlog.sql
日志文件会随时间增长而变大,需通过logrotate工具实现自动轮转(Ubuntu默认已配置MySQL日志轮转)。
默认配置路径:/etc/logrotate.d/mysql(若不存在,可手动创建)。
示例配置(保留90天日志,每天轮转,压缩旧日志):
/var/log/mysql/*.log {
daily
rotate 90
compress
missingok
notifempty
create 0640 mysql mysql
sharedscripts
postrotate
if [ -f /var/run/mysqld/mysqld.pid ]; then
kill -USR1 `cat /var/run/mysqld/mysqld.pid`
fi
endscript
}
参数说明:
daily:每天轮转一次;rotate 90:保留90个轮转后的日志文件(约3个月);compress:压缩旧日志(节省空间);postrotate:轮转后执行的命令(向MySQL发送USR1信号,使其重新打开日志文件)。手动测试轮转:
sudo logrotate -vf /etc/logrotate.d/mysql # 强制立即轮转(-v显示详细信息,-f强制)
expire_logs_days参数设置保留天数(如expire_logs_days = 7),MySQL会自动删除过期日志。PURGE BINARY LOGS命令删除指定日志(如删除mysql-bin.000001之前的所有日志):PURGE BINARY LOGS TO 'mysql-bin.000001';
或删除指定时间之前的日志(如删除7天前的日志):PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);
FLUSH LOGS重新生成):sudo rm /var/log/mysql/general.log
sudo rm /var/log/mysql/slow.log
sudo systemctl restart mysql # 重启MySQL以重新生成日志文件
logrotate配置(参考第四节,添加general_log和slow_query_log的轮转规则)。mysql用户或root权限(如sudo tail -f /var/log/mysql/error.log)。