name, description, group
| name |
description |
group |
| 数据库管理 |
数据库运维和优化。触发词:清理数据库、MySQL优化、MongoDB清理、数据库日志、数据库占用、binlog、慢查询、数据库备份、腾讯云数据库。包含日志清理、空间优化、定时维护脚本、自动化清理。 |
金 |
数据库管理
管理卡若本地和云端数据库,提供日志清理、空间优化、定时维护服务。
数据库概览
本地数据库
| 类型 |
路径 |
大小 |
| MongoDB |
~/数据库/mongodb |
211GB |
| MongoDB日志 |
~/数据库/mongodb/logs/mongod.log |
可截断 |
腾讯云 MySQL
| 项目 |
值 |
| 地址 |
56b4c23f6853c.gz.cdb.myqcloud.com:14413 |
| 用户 |
cdb_outerroot |
| 磁盘 |
25GB(需保持 <80% 使用率) |
MySQL 日志管理
查看日志占用
清理二进制日志
设置自动过期
MySQL 自动清理脚本
Python 定时清理脚本
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
腾讯云MySQL自动清理脚本
用途:定期清理日志表,防止磁盘再次爆满
建议:设置 crontab 每天凌晨执行
0 3 * * * /usr/bin/python3 /path/to/mysql_cleanup.py >> /tmp/mysql_cleanup.log 2>&1
"""
import pymysql
from datetime import datetime
DB_CONFIG = {
'host': '56b4c23f6853c.gz.cdb.myqcloud.com',
'port': 14413,
'user': 'cdb_outerroot',
'password': 'Zhiqun1984',
'charset': 'utf8mb4'
}
# 清理配置:(数据库, 表名, 日期列, 保留天数)
CLEANUP_TASKS = [
# lytiaocom 日志
('lytiaocom', 'log_v8', 'createdTime', 30),
('lytiaocom', 'log', 'createdTime', 30),
('lytiaocom', 'biz_scheduler_job_log', 'created_time', 7),
('lytiaocom', 'biz_scheduler_job_process', 'created_time', 3),
('lytiaocom', 'biz_queue_failed_job', 'failed_time', 7),
('lytiaocom', 'activity_learn_log', 'createdTime', 30),
('lytiaocom', 'user_active_log', 'createdTime', 7),
('lytiaocom', 'referer_log', 'createdTime', 7),
('lytiaocom', 'user_token', 'expiredTime', 7),
# cunkebao 日志
('cunkebao', 'MaterialPushLog', 'dNewTime', 30),
('cunkebao', 'SysOperaLog', 'dNewTime', 30),
# dygqshop 日志
('dygqshop', 'SysTaskLog', 'createTime', 30),
# lkdie 日志
('lkdie', 'pre_security_failedlog', 'createtime', 30),
# hx-private-server_v2
('hx-private-server_v2', 'WechatMomentTask', 'createdTime', 30),
]
def main():
print(f"\n{'='*60}")
print(f"🧹 MySQL自动清理 - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print(f"{'='*60}")
try:
conn = pymysql.connect(**DB_CONFIG)
cursor = conn.cursor()
total_deleted = 0
for db, table, date_col, days in CLEANUP_TASKS:
try:
deleted = 0
while True:
cursor.execute(f"""
DELETE FROM `{db}`.`{table}`
WHERE `{date_col}` < DATE_SUB(NOW(), INTERVAL {days} DAY)
LIMIT 50000
""")
batch = cursor.rowcount
conn.commit()
deleted += batch
if batch < 50000:
break
if deleted > 0:
print(f"✅ {db}.{table}: 删除 {deleted:,} 行")
total_deleted += deleted
except Exception as e:
if 'Unknown column' not in str(e) and "doesn't exist" not in str(e):
print(f"⚠️ {db}.{table}: {e}")
print(f"\n📊 总计删除: {total_deleted:,} 行")
# 获取当前数据库大小
cursor.execute("""
SELECT ROUND(SUM(data_length + index_length)/1024/1024/1024, 2)
FROM information_schema.tables
WHERE table_schema NOT IN ('information_schema', 'performance_schema', 'mysql', 'sys')
""")
total_size = cursor.fetchone()[0]
print(f"📦 当前数据库大小: {total_size} GB")
cursor.close()
conn.close()
except Exception as e:
print(f"❌ 错误: {e}")
if __name__ == "__main__":
main()
设置 Crontab 定时任务
MongoDB 日志管理
日志清理
清理旧数据
腾讯云 MySQL 控制台操作
步骤1:清理 Binlog 日志
- 登录腾讯云控制台:https://console.cloud.tencent.com/cdb
- 找到实例 → 点击实例ID进入详情
- 左侧菜单 → 备份恢复
- 找到 binlog 日志 选项卡
- 设置 binlog 保留时间 为 3天
- 点击 手动清理 按钮
步骤2:修改参数
- 左侧菜单 → 参数设置
- 搜索并修改:
| 参数名 |
当前值 |
建议值 |
说明 |
| expire_logs_days |
0 |
3 |
binlog保留3天 |
| long_query_time |
10 |
2 |
慢查询阈值降低 |
| slow_query_log |
ON |
ON |
保持开启 |
- 点击 提交修改 → 确认重启
步骤3:考虑扩容(可选)
如果清理后磁盘仍然紧张:
- 左侧菜单 → 配置调整
- 将磁盘从 25GB 扩容到 50GB
- 费用约增加 ¥8-10/月
数据库备份
MySQL 备份
MongoDB 备份
监控和告警
磁盘使用率检查
慢查询分析
安全原则
| 原则 |
说明 |
| 保留日志 |
至少保留3天日志用于排查问题 |
| 备份优先 |
生产库清理前先备份 |
| 控制台优先 |
腾讯云操作优先使用控制台 |
| 分批删除 |
大量数据分批删除,避免锁表 |
| 低峰操作 |
选择凌晨低峰期执行清理 |
预期效果
执行完整优化后:
| 项目 |
清理前 |
清理后 |
| 磁盘使用 |
27.5GB (100%) |
~15GB (~60%) |
| 日志文件 |
11.9GB |
~1GB |
| 数据文件 |
12GB |
~8GB |