MariaDB在Linux中的日志管理如何操作
导读:MariaDB 在 Linux 的日志管理实操指南 一 日志类型与用途 错误日志 Error Log:记录服务启动/停止、运行错误、事件调度器与复制从库线程信息等,定位故障首选。常见路径:/var/log/mysql/error.log...
MariaDB 在 Linux 的日志管理实操指南
一 日志类型与用途
- 错误日志 Error Log:记录服务启动/停止、运行错误、事件调度器与复制从库线程信息等,定位故障首选。常见路径:/var/log/mysql/error.log 或 /var/log/mariadb/error.log。
- 通用查询日志 General Query Log:记录所有 SQL 语句,便于审计与排错;对性能影响大,生产环境通常关闭或按需临时开启。
- 慢查询日志 Slow Query Log:记录超过阈值的 SQL,用于性能分析与优化。
- 二进制日志 Binary Log binlog:记录会修改数据或结构的事件,支撑主从复制与时间点恢复。
- 中继日志 Relay Log:仅复制从库使用,保存主库传来的事件。
- InnoDB 事务日志 Redo/Undo:保障事务持久性与回滚,无需人工轮转。
- 审计日志 Audit Log(可选):通过插件记录连接、查询、表访问等细粒度行为,满足合规审计。
二 启用与配置常用日志
- 错误日志
- 配置示例:
[mariadb] log_error = /var/log/mysql/error.log log_warnings = 2 - 动态查看:
SHOW GLOBAL VARIABLES LIKE 'log_error'; - 若未自定义路径,可用系统日志查看:
sudo journalctl -u mariadb -f
- 配置示例:
- 通用查询日志
- 输出到表(重启生效):
查询:SELECT * FROM mysql.general_log;[mariadb] log_output = TABLE general_log = 1 - 输出到文件(重启生效):
[mariadb] log_output = FILE general_log = 1 general_log_file = /var/log/mysql/queries.log - 动态开关(无需重启):
SET GLOBAL general_log = 1; -- 开启 SET GLOBAL general_log = 0; -- 关闭
- 输出到表(重启生效):
- 慢查询日志
[mariadb] slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 1 log_slow_verbosity = full - 二进制日志(用于复制与时间点恢复)
提示:开启 binlog 会带来一定性能开销;ROW 格式更利于精确恢复与闪回。[mariadb] log_bin = /var/log/mysql/mysql-bin binlog_format = ROW server_id = 1 sync_binlog = 1 max_binlog_size = 1073741824 expire_logs_days = 7
三 日志轮转与清理
- 二进制日志清理(推荐在库内操作,安全可控)
- 按文件名删除:
PURGE BINARY LOGS TO 'mysql-bin.000063'; - 按时间删除:
PURGE BINARY LOGS BEFORE '2025-12-01 00:00:00'; - 全部重置(慎用):
RESET MASTER; - 自动过期(按天):设置 expire_logs_days(如 7 天)。
- 按文件名删除:
- 文件轮转方案
- 通用查询日志、慢查询日志等文本日志建议使用 logrotate 管理(示例):
- 新建配置 /etc/logrotate.d/mysql:
/var/log/mysql/*.log { daily rotate 7 missingok compress delaycompress notifempty create 640 mysql mysql sharedscripts postrotate systemctl reload mariadb > /dev/null 2> & 1 || true endscript } - 测试与生效:
sudo logrotate -vf /etc/logrotate.d/mysql
- 新建配置 /etc/logrotate.d/mysql:
- 审计日志轮转(若启用 server_audit 插件):
SET GLOBAL server_audit_file_rotate_size = 1073741824; -- 1GB SET GLOBAL server_audit_file_rotations = 10; SET GLOBAL server_audit_file_rotate_now = ON; - 不建议直接用 rm 删除 binlog,否则需同步维护索引文件且风险较高。
- 通用查询日志、慢查询日志等文本日志建议使用 logrotate 管理(示例):
四 查看与分析日志
- 实时查看错误日志:
sudo tail -f /var/log/mysql/error.log sudo journalctl -u mariadb -f - 查看与过滤通用查询日志(文件输出):
sudo tail -f /var/log/mysql/queries.log grep -i "SELECT\|UPDATE" /var/log/mysql/queries.log - 查看慢查询日志:
sudo mysqldumpslow -s t /var/log/mysql/slow.log - 解析与回放二进制日志(时间点/位置恢复):
mysqlbinlog /var/log/mysql/mysql-bin.000001 | mysql -u root -p mysqlbinlog mysql-bin.000001 --start-datetime='2025-12-01 10:00:00' \ --stop-datetime='2025-12-01 10:05:00' | mysql -u root -p- 若 mysqlbinlog 报 unknown variable ‘default-character-set=utf8mb4’,可用:
mysqlbinlog --no-defaults mysql-bin.000001 | mysql -u root -p
- 若 mysqlbinlog 报 unknown variable ‘default-character-set=utf8mb4’,可用:
- 常用状态与定位命令:
SHOW VARIABLES LIKE 'log_%'; SHOW BINARY LOGS; SHOW MASTER STATUS; SHOW BINLOG EVENTS IN 'mysql-bin.000001' LIMIT 10\G; FLUSH LOGS;
五 安全与性能建议
- 目录与权限:日志目录(如 /var/log/mysql 或自定义目录)需归属 mysql:mysql,否则服务无法写入;变更路径后务必校正权限并重启。
- 通用查询日志:仅在排障或审计短时开启,避免高 IO 与磁盘占满。
- 二进制日志:
- 选择 ROW 格式以获得更可靠的数据变更记录与更安全的回放/闪回能力(闪回需 MariaDB 10.2.4+ 且 binlog_format=ROW)。
- 合理设置 max_binlog_size 与 expire_logs_days,并采用库内 PURGE 定期清理。
- 审计日志:按需开启,控制事件范围与输出方式(文件或 syslog),并设置合理的单文件大小与保留个数,避免磁盘膨胀。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: MariaDB在Linux中的日志管理如何操作
本文地址: https://pptw.com/jishu/789290.html
