作用:记录MySQL服务启动、运行及停止过程中的错误信息,是排查数据库故障的核心日志。
默认路径:Ubuntu下通常位于/var/log/mysql/error.log(部分安装方式可能为/var/log/mysqld.log)。
查看命令:
sudo tail -f /var/log/mysql/error.logjournalctl查看系统日志中的MySQL错误(需systemd支持):sudo journalctl -u mysql.service -fSHOW VARIABLES LIKE 'log_error';作用:记录执行时间超过阈值的SQL语句,是数据库性能优化的关键依据。
启用步骤:
/etc/mysql/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf),在[mysqld]部分添加:slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow-query.log
long_query_time = 2 # 设置慢查询阈值为2秒(可根据需求调整)
log_queries_not_using_indexes = 1 # 记录未使用索引的查询
sudo systemctl restart mysqlsudo tail -f /var/log/mysql/slow-query.logmysqldumpslow工具分析(按执行时间排序前10条):sudo mysqldumpslow -s t -t 10 /var/log/mysql/slow-query.logpt-query-digest工具生成详细报告(需安装Percona Toolkit):sudo pt-query-digest /var/log/mysql/slow-query.log作用:记录所有客户端执行的SQL语句(包括连接、断开、查询等),用于审计或追踪操作历史。
启用步骤:
[mysqld]部分添加:general_log = 1
general_log_file = /var/log/mysql/general.log
log_output = FILE # 设置日志输出为文件(可选:TABLE、NONE)
sudo systemctl restart mysqlsudo tail -f /var/log/mysql/general.logSET GLOBAL general_log = 'ON';
SET GLOBAL log_output = 'FILE';
SET GLOBAL general_log_file = '/var/log/mysql/general.log';
作用:记录所有修改数据的SQL语句(如INSERT、UPDATE、DELETE),用于数据恢复、主从复制。
启用步骤:
[mysqld]部分添加:log_bin = mysql-bin # 启用二进制日志(默认路径为/var/lib/mysql/)
binlog_format = ROW # 推荐使用ROW格式(更精确)
expire_logs_days = 7 # 自动清理7天前的日志(可选)
sudo systemctl restart mysqlSHOW BINARY LOGS;mysqlbinlog工具查看具体日志内容:sudo mysqlbinlog /var/lib/mysql/mysql-bin.000001sudo mysqlbinlog /var/lib/mysql/mysql-bin.000001 > recovery.sql作用:自动压缩、删除旧日志,避免日志文件占用过多磁盘空间。
默认配置:Ubuntu下MySQL的日志轮转配置通常位于/etc/logrotate.d/mysql,内容示例:
/var/log/mysql/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 mysql adm
sharedscripts
postrotate
systemctl restart mysql > /dev/null
endscript
}
参数说明:
daily:每日轮转;rotate 7:保留7个旧日志文件;compress:压缩旧日志;postrotate:轮转后重启MySQL以重新打开日志文件。sudo logrotate -vf /etc/logrotate.d/mysql(-v显示详细信息,-f强制轮转)grep "ERROR" /var/log/mysql/error.logawk '{print $1}' /var/log/mysql/error.log | sort | uniq -c | sort -nrsudo),部分日志(如通用查询日志)可能需要调整log_output参数为FILE才能保存到文件。logrotate或sudo journalctl --vacuum-size=500M清理journal日志),避免磁盘空间耗尽。