You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Debian系统下MariaDB的error log与slow query log突然变空不生成新日志原因问询

MariaDB两类日志同时清空且停止写入的常见原因
  • 日志轮转配置异常
    Debian系统默认会通过logrotate服务定期轮转MariaDB的日志,默认配置路径为/etc/logrotate.d/mariadb-server。如果轮转配置中的postrotate段执行失败(比如配置的mysqladmin flush-logs命令没有权限连接MariaDB、执行报错),会出现如下情况:logrotate将原有日志归档后创建了同名的空日志文件,但MariaDB仍然持有已被归档的旧日志文件句柄,不会向新的空日志文件写入内容,最终表现为日志文件大小为0且无新记录。
    验证方法:查看/var/lib/logrotate/status文件确认故障时间点附近是否执行了MariaDB日志轮转,检查logrotate配置中postrotate脚本的执行权限与逻辑正确性。
  • 日志文件权限异常
    MariaDB默认以mysql用户身份运行,要求日志文件的所有者为mysql,且具备写入权限。如果故障发生前有脚本或手动操作修改了日志文件的所有者/权限(比如改为root用户所有、权限设为仅root可写),MariaDB无法写入日志,若此时触发了日志重建就会出现空文件且无新写入的情况。
    验证方法:执行ls -l [日志文件路径]检查文件所有者与权限配置,确认mysql用户具备写入权限。
  • 运行时日志参数被动态关闭
    即使配置文件中开启了错误日志与慢查询日志,若有用户在MariaDB运行时执行了动态修改参数的命令,比如SET GLOBAL slow_query_log = OFF、修改log_error参数指向空路径,也会导致日志停止写入。如果期间日志文件被手动清空,就会出现大小为0的情况。
    验证方法:登录MariaDB执行SHOW GLOBAL VARIABLES LIKE '%slow_query_log%'、SHOW GLOBAL VARIABLES LIKE 'log_error',确认日志开关状态与路径配置是否符合预期。
  • 日志文件被手动替换未刷新句柄
    如果故障发生前有人手动删除了原日志文件,又新建了同名的空日志文件,MariaDB会继续持有已被删除的旧日志文件的句柄,向不可见的旧文件写入内容,新创建的同名空文件不会收到任何新日志。
    验证方法:执行lsof | grep [日志文件名]获取MariaDB打开的日志文件inode,再执行ls -i [日志文件路径]对比inode是否一致,二者不一致即可确认该问题。
  • 磁盘资源耗尽后未恢复写入状态
    如果故障时间点附近出现过磁盘空间满、inode耗尽的情况,MariaDB写入日志失败后会停止写入动作,即使后续清理了磁盘空间,若没有执行flush logs刷新日志句柄,也会继续停写,若此时日志被清空就会显示为0大小。
    验证方法:执行df -h检查磁盘使用率,df -i检查inode使用率,查看历史监控确认故障时间点是否有磁盘资源耗尽的情况。

内容的提问来源于stack exchange,提问作者Frank Martin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 03:15:02