每天创建 MySQL 数据库备份并仅保留最后 N 个副本

每天创建 MySQL 数据库备份并仅保留最后 N 个副本

管理员经常遇到的一个问题。我有一个数据库,我想每天备份一次。另外,我只想保留上周的 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
  1. mysqldump 获取备份。
  2. gzip 压缩输出
  3. 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_passwordyour_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 {} \;

相关内容