mongodb 删除数据库脚本

需求:应用会根据日期,每日创建以日期为名称的database用于记录应用日志。完成日志保留90天的策略,每日检查,删除过期数据

#!/bin/bash

set -e  # 遇到错误时立即退出

# 使用环境变量存储敏感信息
MONGO_PASSWORD="${MONGO_PASSWORD:-"passwd"}"  # 默认值为 "passwd"

# 获取脚本所在目录
script_directory=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)

# 计算90天前的日期
target_db_prefix=$(date +%Y%m%d -d "90 day ago")

# 定义常量路径和参数
MONGOSH_BIN="${script_directory}/bin/mongosh"
HOST="127.0.0.1"
PORT="28017"
TLS_CA_FILE="ca/ca.pem"
TLS_CERT_FILE="ca/xxx.pem"

# 检查 mongosh 是否存在
if [[ ! -x "$MONGOSH_BIN" ]]; then
    echo "$(date '+%Y-%m-%d %H:%M:%S')  --  Error: mongosh not found at $MONGOSH_BIN"
    exit 1
fi

# 检查 TLS 证书文件是否存在
if [[ ! -f "$TLS_CA_FILE" || ! -f "$TLS_CERT_FILE" ]]; then
    echo "$(date '+%Y-%m-%d %H:%M:%S')  --  Error: TLS certificate files not found"
    exit 1
fi

# 构建 mongosh 命令
mongosh_command=(
    "$MONGOSH_BIN"
    --host "$HOST"
    --port "$PORT"
    --username admin
    --password "$MONGO_PASSWORD"
    --tls
    --tlsCAFile "$TLS_CA_FILE"
    --tlsCertificateKeyFile "$TLS_CERT_FILE"
    --quiet
    --eval "db.getMongo().getDBNames().filter(function(dbName) { return dbName.startsWith('${target_db_prefix}'); }).forEach(function(dbName) { db.getSiblingDB(dbName).dropDatabase(); });"
)

# 执行 mongosh 命令并捕获返回值
if ! output=$("${mongosh_command[@]}" 2>&1); then
    echo "$(date '+%Y-%m-%d %H:%M:%S')  --  Error: $output"
    exit 1
else
    echo "$(date '+%Y-%m-%d %H:%M:%S')  --  db<$target_db_prefix> del"
fi
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容