场景引入:凌晨3点,服务器警报突然响起——磁盘空间仅剩5%!排查发现是测试数据库堆积了上百张过期表,手动删除显然不现实,这时候,一个可靠的Linux数据库删除脚本就是你的救星。
在Linux环境下管理数据库时,常遇到:
手动操作不仅效率低,还容易出错,下面分享几种实战验证过的脚本方案。
#!/bin/bash # 删除指定前缀的旧表(示例:清除所有以'temp_'开头的表) USER="your_username" PASS="your_password" DB="your_database" HOST="localhost" tables=$(mysql -h$HOST -u$USER -p$PASS $DB -e "SHOW TABLES LIKE 'temp_%'" | grep -v "Tables_in") for table in $tables; do echo "删除表: $table" mysql -h$HOST -u$USER -p$PASS $DB -e "DROP TABLE $table" done
安全提示:建议先执行SHOW TABLES
命令确认要删除的表列表。
#!/bin/bash # 删除7天前的订单记录(假设有created_at字段) mysql -u$USER -p$PASS $DB <<EOF DELETE FROM orders WHERE created_at < DATE_SUB(NOW(), INTERVAL 7 DAY); EOF
#!/bin/bash # 删除public schema下所有临时表 PGUSER="postgres" PGDB="your_db" psql -U $PGUSER -d $PGDB <<EOF DO \$\$ DECLARE tbl text; BEGIN FOR tbl IN SELECT tablename FROM pg_tables WHERE schemaname = 'public' AND tablename LIKE 'tmp_%' LOOP EXECUTE 'DROP TABLE IF EXISTS ' || quote_ident(tbl) || ' CASCADE'; RAISE NOTICE '已删除表: %', tbl; END LOOP; END \$\$; EOF
#!/bin/bash # 分批次删除日志记录 psql -U $PGUSER -d $PGDB <<EOF WITH deleted AS ( DELETE FROM app_logs WHERE created_at < NOW() - INTERVAL '30 days' RETURNING * ) SELECT COUNT(*) FROM deleted; EOF
#!/bin/bash # 删除30天前的日志(通过mongo shell执行) mongo your_db --eval ' db.logs.deleteMany({ "timestamp": { "$lt": new Date(ISODate().getTime() - 30*24*60*60*1000) } })'
#!/bin/bash # 快速清空集合(生产环境慎用!) mongo your_db --eval 'db.temp_collection.drop()'
备份优先
执行删除前务必备份:
mysqldump -u$USER -p$PASS $DB > /backups/db_before_clean.sql
使用事务测试
MySQL示例:
START TRANSACTION; DELETE FROM test_table WHERE id > 1000; -- 确认影响行数后执行 COMMIT 或 ROLLBACK
添加执行确认
在脚本开头加入交互确认:
read -p "即将删除$DB数据库中所有测试表,确认继续?[y/N] " confirm [[ $confirm == [yY] ]] || exit 1
# 在删除脚本中添加日志记录 LOGFILE="/var/log/db_clean.log" echo "$(date '+%Y-%m-%d %T') 开始清理数据库" >> $LOGFILE mysql -u$USER -p$PASS $DB -e "DELETE FROM logs WHERE..." 2>&1 | tee -a $LOGFILE
通过crontab每周日凌晨执行:
0 3 * * 0 /path/to/your/clean_script.sh > /dev/null 2>&1
本文由 谷叶彤 于2025-07-29发表在【云服务器提供商】,文中图片由(谷叶彤)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/476451.html
发表评论