TDengine 社区版磁盘空间不足故障处理 SOP:历史日志清理、日志保留策略及数据保留 200 天

一、故障背景

生产环境使用 TDengine TSDB 社区版,服务器出现磁盘空间不足问题,/home 分区使用率达到 100%,影响数据库正常运行。

本次故障主要从三个方面处理:

  1. 清理 TDengine 历史运行日志,释放磁盘空间。

  2. 修改日志保留时间,避免历史日志持续累积。

  3. 设置数据库数据保留 200 天,并主动执行过期数据清理。

1.1 环境信息

项目 配置信息
操作系统 CentOS Linux
数据库 TDengine TSDB 社区版
数据库配置文件 /etc/taos/taos.cfg
数据目录 /home/tdengine/data
日志目录 /home/tdengine/log
临时目录 /home/tdengine/tmp
原日志保留时间 10 天
目标日志保留时间 7 天
目标数据保留时间 200 天

注意: 本次日志目录约占用 20GB,但 /home 分区总容量约 1.7TB。日志清理可以释放部分空间,仍需检查数据目录,不能直接认定全部磁盘占用均由日志造成。


二、故障排查

2.1 查看磁盘使用情况

复制代码
df -h

本次故障中 /home 分区使用率达到 100%。

2.2 查看 TDengine 各目录占用

复制代码
du -sh /home/tdengine/log
du -sh /home/tdengine/data
du -sh /home/tdengine/tmp

其中:

  • log:TDengine 运行日志。

  • data:TDengine 数据存储目录。

  • tmp:TDengine 临时文件目录。

2.3 查看日志文件

复制代码
ls -lhtr /home/tdengine/log/

查看最大的 20 个日志文件:

复制代码
ls -lhS /home/tdengine/log/ | head -20

重点检查 taosdlog 相关日志文件。


三、清理 TDengine 历史日志

3.1 查看历史日志

复制代码
cd /home/tdengine/log

ls -lhtr

TDengine 的运行日志通常包含以下文件:

复制代码
taosdlog.0
taosdlog.1
taosdlog.时间戳
taosdlog.时间戳.gz

其中:

  • taosdlog.0、taosdlog.1:可能正在被数据库使用的轮换日志,不手工删除。

  • 带时间戳的日志:历史归档日志,确认不再使用后可以清理。

3.2 查询超过 7 天的历史归档日志

复制代码
find /home/tdengine/log -maxdepth 1 -type f \
-regextype posix-extended \
-regex '.*/taosdlog\.[0-9]{9,}(\.gz)?' \
-mmin +10080 -print

该命令只查询符合指定归档命名规则、最后修改时间超过 7 天的日志,不会删除文件。

3.3 清理超过 7 天的历史日志

确认查询结果均为无需保留的历史归档后执行:

复制代码
find /home/tdengine/log -maxdepth 1 -type f \
-regextype posix-extended \
-regex '.*/taosdlog\.[0-9]{9,}(\.gz)?' \
-mmin +10080 -delete

注意:该命令只覆盖匹配上述命名规则的历史日志。其他日志文件需要单独判断,不要直接删除整个日志目录。

3.4 检查空间释放情况

复制代码
du -sh /home/tdengine/log

df -h /home

若删除后空间未释放,检查是否有进程仍占用已删除文件:

复制代码
lsof +L1 | grep /home/tdengine/log

如果仍存在占用,需要结合进程状态安排后续处理,不要直接重启生产数据库。


四、修改日志保留时间

4.1 查看数据库版本

复制代码
taosd -V

不同版本的配置参数生效机制不同,修改前应先确认版本。

4.2 修改配置文件

TDengine 配置文件:

复制代码
/etc/taos/taos.cfg

先备份配置文件:

复制代码
cp -a /etc/taos/taos.cfg \
/etc/taos/taos.cfg.bak.$(date +%Y%m%d%H%M%S)

编辑配置:

复制代码
vi /etc/taos/taos.cfg

找到原有配置:

复制代码
logDir /home/tdengine/log
logKeepDays 10

将日志保留时间调整为 7 天,并设置单个日志文件的最大行数:

复制代码
logDir /home/tdengine/log
logKeepDays 7
numOfLogLines 1000000

参数说明:

参数 作用
logDir 日志目录
logKeepDays 日志保留时间,单位为天
numOfLogLines 单个日志文件轮转阈值,单位为行

日志自动清理机制:

当日志达到 100 万行时,触发轮转和归档;超过保留时间的历史归档,在后续日志清理检查中删除。

注意:轮转并不代表立即删除旧日志,日志保留 7 天也不代表总日志大小被限制在固定容量内。

4.3 配置生效方式

TDengine 3.1~3.3.x 社区版通常采用配置文件修改,并在维护窗口重启 taosd 使配置生效:

复制代码
systemctl restart taosd

生产环境不能直接执行上述重启命令,必须提前安排维护窗口。

另外,TDengine 3.4.0.0 及以上版本已调整配置加载机制,正常情况下不再在后续启动时重新读取配置文件中的参数;社区版又不支持通过 SQL 动态修改 logKeepDays 和 numOfLogLines。遇到这种版本组合时,应先核对版本对应的官方配置管理方法,不能简单认为修改配置文件并重启就能生效。


五、设置数据库数据保留 200 天

注意:此操作涉及历史业务数据过期删除,执行前必须确认业务允许删除超过 200 天的数据,并检查备份情况。

5.1 登录 TDengine 数据库

复制代码
taos

5.2 查看数据库列表

复制代码
SHOW DATABASES;

根据查询结果确定需要调整的业务数据库名称。

以下 SQL 中使用 db_name 作为示例,实际执行时需替换为真实数据库名。

5.3 查看数据库当前保留策略

复制代码
SHOW CREATE DATABASE db_name\G;

也可以查询数据库详细参数:

复制代码
SELECT *
FROM INFORMATION_SCHEMA.INS_DATABASES
WHERE NAME = 'db_name'\G;

重点查看:

复制代码
KEEP
DURATION

参数含义:

  • KEEP:数据库数据文件的保留时间。

  • DURATION:数据文件存储数据的时间跨度。

注意: KEEP****必须不小于 DURATION****的 3 倍。 设置 200 天前要确认当前 DURATION 满足要求。

5.4 修改数据保留时间为 200 天

执行:

复制代码
ALTER DATABASE db_name KEEP 200d;

该命令将指定业务数据库的数据保留时间调整为 200 天。

5.5 验证数据保留策略

复制代码
SHOW CREATE DATABASE db_name\G;

或者:

复制代码
SELECT *
FROM INFORMATION_SCHEMA.INS_DATABASES
WHERE NAME = 'db_name'\G;

确认 KEEP 对应的保留时间已经修改为 200 天。

5.6 主动执行过期数据清理

设置 KEEP 后,TDengine 会自动根据该策略管理过期数据,不需要额外启用开关。

如果需要主动触发过期数据清理,可在确认业务允许、版本支持且数据库状态正常后执行:

复制代码
TRIM DATABASE db_name;

TRIM 是英文单词,意思是 修剪、裁剪、去除多余部分。

命令作用:

按照数据库当前保留策略执行过期数据清理。

注意:

  • 不是清空整个数据库。

  • 只针对符合过期条件的数据执行处理。

  • 清理完成和磁盘实际释放之间可能存在时间差。

  • 如果数据库中的数据都没有超过 200 天,执行后不一定能释放空间。

  • 磁盘已严重不足时,应优先恢复足够的可用空间,再执行较大规模的数据清理。


六、不知道日志目录和数据目录时如何查询

如果是其他服务器,目录与本次环境不一致,不能直接套用路径。

6.1 通过 SQL 查询

登录数据库:

复制代码
taos

查看节点:

复制代码
SHOW DNODES;

假设节点 ID 为 1,查询日志目录:

复制代码
SHOW DNODE 1 VARIABLES LIKE 'logDir';

查询数据目录:

复制代码
SHOW DNODE 1 VARIABLES LIKE 'dataDir';

查询当前日志保留配置:

复制代码
SHOW DNODE 1 VARIABLES LIKE 'logKeepDays';

查询日志轮转行数:

复制代码
SHOW DNODE 1 VARIABLES LIKE 'numOfLogLines';

将 1 替换为实际节点 ID。若当前版本不支持对应查询语法,可以查看节点实际启动参数及配置文件。

6.2 通过 Linux 查看

复制代码
grep -Ei '^(logDir|dataDir|tempDir|logKeepDays|numOfLogLines)[[:space:]]+' /etc/taos/taos.cfg

注意:配置文件中的值不一定等于当前正在运行的有效值,优先结合数据库变量查询结果判断。


七、故障处理完成后的验证

7.1 检查磁盘空间

复制代码
df -h /home

7.2 检查日志目录

复制代码
du -sh /home/tdengine/log

7.3 检查数据目录

复制代码
du -sh /home/tdengine/data

7.4 检查数据库节点状态

复制代码
SHOW DNODES;

7.5 检查数据库可用性

复制代码
SHOW db_name.ALIVE;

返回 1 表示数据库完全可用。

7.6 验证数据库保留时间

复制代码
SHOW CREATE DATABASE db_name\G;

确认 KEEP 为 200 天,同时确认业务写入恢复正常。


八、日常巡检建议

建议定期检查以下内容:

检查项目 检查方式
磁盘空间 df -h /home
日志目录占用 du -sh /home/tdengine/log
数据目录占用 du -sh /home/tdengine/data
数据库节点状态 SHOW DNODES;
数据保留策略 SHOW CREATE DATABASE db_name\G;

建议磁盘使用率达到 80% 时开始关注增长趋势,超过 90% 时及时制定清理或扩容方案,避免再次达到 100%。


九、故障处理 SOP 速查表

步骤 操作 命令
1 查看磁盘空间 df -h /home
2 查看日志占用 du -sh /home/tdengine/log
3 查看数据占用 du -sh /home/tdengine/data
4 查看历史日志 ls -lhtr /home/tdengine/log
5 清理历史日志 按第三章先预览、再清理
6 修改日志保留时间 /etc/taos/taos.cfg
7 查看数据库列表 SHOW DATABASES;
8 查看原保留策略 SHOW CREATE DATABASE db_name\G;
9 设置保留 200 天 ALTER DATABASE db_name KEEP 200d;
10 主动清理过期数据 TRIM DATABASE db_name;
11 验证空间释放 df -h /home
12 验证数据库状态 SHOW DNODES;

十、总结

本次 TDengine 社区版磁盘空间不足故障的处理思路:

第一步:释放空间。

确认实际日志路径后,清理不再使用的历史归档日志,缓解磁盘空间不足问题。

第二步:调整日志保留策略。

将日志保留时间由 10 天调整为 7 天,将单个日志文件轮转阈值设置为 100 万行,避免日志长期无序增长。

第三步:调整数据保留策略。

通过:

复制代码
ALTER DATABASE db_name KEEP 200d;

将业务数据保留时间设置为 200 天。

需要主动清理历史过期数据时,执行:

复制代码
TRIM DATABASE db_name;

第四步:验证和巡检。

检查磁盘空间、日志目录、数据库数据目录及业务写入状态,确保数据库恢复稳定运行。

最终形成一套可复用的生产环境处理流程:

磁盘告警 → 定位占用目录 → 清理历史日志 → 调整日志保留时间 → 设置数据保留 200 天 → 清理过期数据 → 验证数据库状态。

生产环境注意事项

  • 严禁直接删除 /home/tdengine/data 下的数据文件。

  • 严禁使用 rm -rf /home/tdengine/log/* 清空日志目录。

  • 不要在业务高峰期随意重启 TDengine。

  • 数据保留周期修改涉及历史数据删除,必须获得业务确认。

  • 日志清理与数据过期清理是两种不同机制。

  • 保留策略无法替代磁盘容量规划,数据增长过快时仍需考虑扩容。

官方参考文档:

关键词: TDengine、TSDB、磁盘空间不足、历史日志清理、logKeepDays、KEEP、TRIM DATABASE、数据库运维 SOP

相关推荐
betazhou1 小时前
MySQL Oracle官方备份工具
数据库·mysql·oracle
一万年太久。2 小时前
mysql主从复制
数据库·mysql
车载中间件通信2 小时前
[TC8测试]TCP_FLAGS_PROCESSING_06
数据库·网络协议·tcp/ip·中间件·tc8
呆萌很2 小时前
达梦数据库(DM)和MySQL核心区别
数据库
l1t2 小时前
DeepSeek总结的pgrust以光速编程:构建 Gravity 查询引擎
数据库·人工智能·postgresql
木木_Q4057733492 小时前
Oracle 增量同步配置指南:只搬变了的数据,不重复也不漏数
数据库·oracle·数据同步·数据库同步·增量同步
升鲜宝供应链及收银系统源代码服务2 小时前
Java Spring Boot 商业版 升鲜宝供应链管理系统--商品模块表与字段分析(商品管理页面业务逻辑与数据表关系分析)
数据库·生鲜配送系统排名·生鲜配送系统架构设计·b2b订货商城解决方案·生鲜配送系统源代码出售·生鲜配送系统设计源代码
灵晔君3 小时前
【MySQL】库的操作
数据库·mysql
2603_969694853 小时前
【MySQL学习笔记】DQL(基础查询/条件/聚合/分组/排序/分页)与 DCL(用户权限)全解析
数据库·笔记·学习·mysql·学习方法