Ubuntu MariaDB日志管理实用技巧
MariaDB的日志主要分为以下几类,需根据需求启用并配置路径:
/etc/mysql/mariadb.conf.d/50-server.cnf):[mysqld]
log_error = /var/log/mysql/mariadb-error.log
log_error_verbosity = 3 # 记录错误、警告、提示(级别越高越详细)
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 2 # 阈值(秒),建议从2开始调整
log_queries_not_using_indexes = 1 # 记录未使用索引的查询
[mysqld]
log_bin = /var/log/mysql/mariadb-bin # 自动追加序号(如.000001)
binlog_format = ROW # 推荐ROW格式(更准确)
expire_logs_days = 7 # 自动过期天数(避免磁盘爆满)
[mysqld]
general_log = 1
general_log_file = /var/log/mysql/mariadb-query.log
general_log_output = FILE
50-server.cnf添加plugin_load_add = server_audit;server_audit_events = CONNECT,QUERY,TABLE # 监听连接、查询、表操作
server_audit_logging = ON
server_audit_file_path = /var/log/mysql/audit.log
server_audit_file_rotate_size = 100M # 单个文件大小
server_audit_file_rotations = 5 # 保留文件数
重启服务使配置生效:sudo systemctl restart mariadb。使用logrotate工具定期轮转日志,避免单个文件过大占用磁盘空间。
logrotate已内置MariaDB配置(/etc/logrotate.d/mysql),内容如下:/var/log/mysql/*.log {
daily # 每天轮转
rotate 7 # 保留7天
missingok # 文件不存在不报错
compress # 压缩旧日志(gzip)
delaycompress # 延迟压缩(避免影响当前日志写入)
notifempty # 空日志不轮转
create 640 mysql adm # 新日志权限(用户:组)
sharedscripts # 所有日志处理完再执行脚本
postrotate
/usr/bin/mysqladmin flush-logs # 刷新日志(重新打开文件句柄)
endscript
}
-v显示详细过程,-f强制轮转:sudo logrotate -vf /etc/logrotate.d/mysqlmysqladmin flush-logs 或 FLUSH LOGS;(SQL命令)。tail -f跟踪日志更新(如错误日志):sudo tail -f /var/log/mysql/mariadb-error.loggrep过滤特定内容(如“error”):sudo grep -i "error" /var/log/mysql/mariadb-error.logmysqldumpslow(内置工具)统计慢查询:mysqldumpslow -s t /var/log/mysql/mariadb-slow.log(按时间排序);pt-query-digest(Percona工具包)生成详细报告:pt-query-digest /var/log/mysql/mariadb-slow.log > slow_report.txtmysqlbinlog查看变更内容(如恢复数据):mysqlbinlog /var/log/mysql/mariadb-bin.000001;mysqlbinlog --start-datetime="2025-10-01 00:00:00" --stop-datetime="2025-10-01 23:59:59" /var/log/mysql/mariadb-bin.000001;mysqlbinlog /var/log/mysql/mariadb-bin.000001 > recovery.sql。journalctl -u mariadb;journalctl --since "2025-10-01" --until "2025-10-02";journalctl --vacuum-size=100M(限制总大小为100M)或journalctl --vacuum-time=2weeks(清理两周前的日志)。/var/log/mysql/)仅允许mysql用户和adm组访问:sudo chown -R mysql:adm /var/log/mysql/;sudo chmod -R 750 /var/log/mysql/。logrotate外,可定期用find命令删除旧日志(如超过30天):find /var/log/mysql/ -type f -name "*.log" -mtime +30 -exec rm {} \;(谨慎使用,建议配合logrotate)。general_log = 0),避免记录所有查询导致磁盘占用过高;log_bin = ON),确保数据可恢复;long_query_time):根据业务需求设置为1-5秒,优先优化高频慢查询。