centos实现定时自动备份

在centos系统中,备份是一项非常重要的任务。无论是为了保护数据,还是预防数据免受意外删除、损坏,还是为了能够快速迁移数据到其他服务器,都是必不可少的。

备份文件夹

  • 使用crontab -e命令编辑当前用户的cron定时任务
1
crontab -e
  • 在打开的编辑器中,添加一个新的定时任务。例如,如果您想每天凌晨1点备份/myblog文件夹到/data/backup,并且保留最近30天的备份,可以添加如下任务:
1
0 1 * * * /bin/bash /run/backup_script.sh
  • 创建一个备份脚本backup_script.sh,并添加以下内容(注意修改路径和日期格式)
1
2
3
4
5
6
7
8
9
10
11
12
#!/bin/bash  
DATE=$(date +%Y%m%d) # 当前的日期作为备份文件的名称
BACKUP_DIR="/data/backup"
SOURCE_DIR="/myblog"
BACKUP_FILE="$BACKUP_DIR/wwwroot_bak_$DATE.tar.gz"

# 创建备份
tar -czvf $BACKUP_FILE $SOURCE_DIR

# 删除超过30天的备份
FIND_DAYS_AGO=$(date -d "-30 days" +%Y%m%d)
find $BACKUP_DIR -name "wwwroot_bak_*.tar.gz" -type f -newermt "$FIND_DAYS_AGO" ! -newermt "$(date +%Y%m%d)" -delete
  • 保存并关闭脚本文件,确保它有执行权限:
1
chmod +x /path/to/backup_script.sh
  • 重新启动cron服务以使更改生效
1
sudo systemctl restart crond

备份数据库

以mysql为例

  • 创建备份脚本backup_script
1
2
3
4
5
6
7
8
#!/bin/bash
dataname="[数据库名]"
#!备份地址
backdir="/data/backup/mysql/"
backtime=$(date +"%Y%m%d%H")
backfile=$dataname$backtime".sql.zst"
cd $backdir
mysqldump -u用户名 -p'【密码】' $dataname | zstd > $backfile
  • 添加一个新的定时任务
1
0 */12 * * * /data/bash/mysql_back