帮我用shell 写一个备份gitlab所有数据库的脚本 要求对每个库单独压缩 并且删除7天之前的备份
时间: 2024-09-30 20:14:57 浏览: 48
在Shell中编写一个备份GitLab数据库的脚本,我们需要考虑到几个关键步骤:连接到数据库、运行查询获取所有的数据库名称、遍历每个数据库进行备份并压缩,以及清理旧的备份。这里是一个基本示例,假设你正在使用MySQL作为GitLab的数据库,并且你知道如何连接到它:
```bash
#!/bin/bash
# MySQL配置
MYSQL_USER="your_mysql_user"
MYSQL_PASSWORD="your_mysql_password"
MYSQL_HOST="your_mysql_host"
# 指定备份目录和保留期限(单位:天)
BACKUP_DIR="/path/to/backup/gitlab_dbs"
RETENTION_DAYS=7
# 创建备份目录如果不存在
mkdir -p $BACKUP_DIR
# 获取GitLab数据库名(请替换为你实际的数据库名)
DB_NAME=$(mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e "show databases like 'gitlab%'")
# 遍历每个数据库
for db in $DB_NAME; do
# 连接到数据库
DB_BACKUP_FILE="$BACKUP_DIR/${db}.sql.gz" $(mysql_config --client)
# 如果文件存在超过7天,则先删除旧备份
if [ -f "$DB_BACKUP_FILE" ]; then
find $BACKUP_DIR -type f -name "${db}*.sql.gz" -mtime +$RETENTION_DAYS -delete
fi
# 执行备份,使用mysqldump命令并将结果压缩
mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD $db | gzip > $DB_BACKUP_FILE
done
echo "Backup completed."
阅读全文