centos简单文件备份

1. 背景

现在有一个正在使用的服务器, 需要对服务器上的数据库数据、实验室文件以及采购平台文件进行备份,

将备份文件存储到另外一个服务器上, 要求留存最近七天的备份文件.

2.详细步骤

2.1 备份环境

  • 在新服务器创建备份目录: mkdir /opt/backup
  • 目录权限: chmod 700 /opt/backup

2.2 SSH免密

  • 旧服务器生成密钥对: ssh-keygen -t rsa
  • 配置免密(需要输入备份服务器密码): ssh-copy-id -i ~/.ssh/id_rsa.pub user@new_server_ip
  • 验证能否直接登录: ssh user@new_server_ip

2.3 备份脚本

vim /opt/backup.sh

bash 复制代码
#!/bin/bash

# 备份日期
BACKUP_DATE=$(date +%Y%m%d)
# 备份服务器信息
NEW_SERVER="user@new_server_ip"
# 数据库用户
MYSQL_USER="backup_user"
# 数据库密码
MYSQL_PASS="your_password"
# 现有服务器临时备份目录
BACKUP_DIR="/tmp/backup/${BACKUP_DATE}"
# 现有服务器日志文件目录(存备份过程中的日志)
BACKUP_LOG_DIR="/var/log/backup/"
# 备份服务器备份目录
BACKUP_TAR_DIR="/opt/backup/"

# 创建临时目录
mkdir -p ${BACKUP_DIR}

# 创建备份日志目录
mkdir -p ${BACKUP_LOG_DIR}

{
        # 备份MySQL数据库并压缩(-u和-p后面不要有空格)
        mysqldump --single-transaction -u${MYSQL_USER} -p${MYSQL_PASS} --databases "db1" "db2" | gzip > ${BACKUP_DIR}/db_${BACKUP_DATE}.sql.gz

        # 备份采购文件
        rsync -avz --delete /var/www/uploads/purchase/ ${BACKUP_DIR}/files-purchase/

        # 备份实验室文件
        rsync -avz --delete /var/www/uploads/lab/ ${BACKUP_DIR}/files-lab/

        # 打包文件备份并压缩(${BACKUP_DIR}目录下现在有一个文件和两个文件夹)
        tar czf ${BACKUP_DIR}/${BACKUP_DATE}.tar.gz -C ${BACKUP_DIR} .

        # 打包文件传输到备份服务器的BACKUP_TAR_DIR目录
        scp -r ${BACKUP_DIR}/${BACKUP_DATE}.tar.gz ${NEW_SERVER}:${BACKUP_TAR_DIR}

        # 清理备份服务器旧备份(保留7天)
        # -mindepth 是保护不会将${BACKUP_TAR_DIR}删除的,如果scp失败了目录日期是不会修改的
        ssh ${NEW_SERVER} "find ${BACKUP_TAR_DIR} -mindepth 1 -type d -mtime +7 -exec rm -rf {} \;"

        # 清理临时文件
        rm -rf ${BACKUP_DIR}

        # 输出完成,添加时间记录
        echo "backup done.  timedatectl:";
        timedatectl;
} >> "${BACKUP_LOG_DIR}/${BACKUP_DATE}.log" 2>&1

2.4 脚本执行权限

chmod +x /opt/backup.sh

2.5 定时任务

echo "0 2 * * * root /opt/backup.sh" > /etc/cron.d/backup_job

2.6 恢复流程

根据实际情况可以现解压再覆盖, 覆盖前做好备份

  • 数据库: zcat /backup/db_20250408.sql.gz | mysql -u root -p
  • 文件: tar xzf /opt/backup/20231001.tar.gz -C /var/www/uploads/