管理员经常遇到的一个问题。我有一个数据库,我想每天备份一次。另外,我只想保留上周的 n 个副本。
您对基本 Linux 命令有什么建议吗?
答案1
将此命令与 cronjob 结合使用。让我们一步一步来
mysqldump -u root db_name | gzip > /srv/backup/db_name-$(date "+%Y.%m.%d-%H.%M.%S").sql.gz && ls -t /srv/backup/* | sed -e "1,7d" | xargs rm
- mysqldump 获取备份。
- gzip 压缩输出
- ls、sed 和 xargs 命令删除 7 以上的所有附加文件。
(我更喜欢这个解决方案,而不是其他基于“超过 x 天”的解决方案,因为如果转储失败,您总是会保留至少 7 份副本。)
运行命令以验证是否有效。如果有效,请将其放入 bash 文件中,例如 /root/bin/backup_db.sh
现在,编辑您的 crontab(crontab -e)并添加此新行。首先,我会每 2 分钟运行一次,以确保命令正常工作:
*/2 * * * * bash /root/bin/backup_db.sh
等待几分钟,观察文件是否按预期创建
watch ls /srv/backup
看起来它有效了!现在将你的 cronjob 改为按所需的时间表运行(在我的情况下,每天凌晨 1:10 运行)
10 1 * * * bash /root/bin/backup_db.sh
希望这可以帮助!
答案2
确保用您的实际数据库凭据和所需的备份目录替换占位符(、、your_database_user
和) 。your_database_password
your_database_name
/path/to/backup/directory
#!/bin/bash
# Set your database credentials and other parameters
DB_USER="your_database_user"
DB_PASSWORD="your_database_password"
DB_NAME="your_database_name"
BACKUP_DIR="/path/to/backup/directory"
DAYS_TO_KEEP=7
# Create a timestamp for the backup file
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
# Dump the database to a SQL file
mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME > $BACKUP_DIR/backup_$TIMESTAMP.sql
# Compress the backup file
gzip $BACKUP_DIR/backup_$TIMESTAMP.sql
# Remove backups older than the specified number of days
find $BACKUP_DIR -name "backup_*" -type f -mtime +$DAYS_TO_KEEP -exec rm {} \;