当面对服务器运营商的不确定性时,将网站数据保存在网盘是一个明智的做法。这个自动备份和上传脚本提供了一种方便的方法来定期备份数据库、网站文件和配置,并将它们安全地上传到云存储中。以下是这个脚本的功能和优势:

自动备份和上传脚本

这个脚本旨在解决以下问题:

  1. 数据安全性: 通过定期备份数据库和网站文件,确保网站数据的安全性和完整性。即使在服务器故障或意外删除的情况下,也能够恢复重要数据。
  2. 服务器不确定性: 面对服务器运营商的不确定性,将数据上传到云存储是一种保险措施。即使服务器出现问题,数据仍然安全存储在云端。
  3. 便捷性和自动化: 脚本自动化了整个备份和上传过程。只需设置一次脚本,它就会按计划执行备份和上传操作,省去了手动操作的烦恼。
  4. 多重保障: 通过计算并重命名压缩文件名包含的 SHA-1 值,确保了上传的文件在云端具有唯一的标识符。这增加了数据的完整性和安全性。
  5. 定时备份: 脚本中的 cron 任务可让您定时执行备份,比如每五小时备份一次,以确保数据的及时性和连续性。

注意

该脚本需要配合rclonealist使用。

自动备份和上传脚本

这个脚本是一个自动化的备份工具,用于备份数据库、网站文件和配置文件,并将它们上传到云存储中。

脚本内容

#!/bin/bash

# 设置数据库账号和密码(请替换为实际的数据库账号和密码)
# 多个数据库备份建议用root密码
DB_USER="root"
DB_PASSWORD="你的密码"

# 备份文件夹路径
# 临时存放备份文件的路径
BACKUP_DIR="/data/backup"

# 是否开启压缩加密以及密码
ENABLE_ZIP_ENCRYPTION=true
ZIP_PASSWORD="your_password_here"

# ZIP 压缩率(0-9,0 为最快速但压缩率最低,9 为最慢但压缩率最高)
ZIP_COMPRESSION_LEVEL=5

# rclone 目标路径
RCLONE_DEST="Upload_115:/115/数据备份/网站数据"
# rclone写法为 配置名:上传目录位置

# 清空备份文件夹(请注意这个操作会删除文件夹中的所有内容,请谨慎操作)
rm -rf $BACKUP_DIR/*

# 备份数据库到指定文件(请替换为你的数据库名和备份路径)
# 如果要备份多个就多复制几个 下面的例子
sudo mysqldump -u $DB_USER -p$DB_PASSWORD 你的数据库名字 > $BACKUP_DIR/你保存的文件名.sql
sudo mysqldump -u $DB_USER -p$DB_PASSWORD 你的数据库名字 > $BACKUP_DIR/你保存的文件名.sql
sudo mysqldump -u $DB_USER -p$DB_PASSWORD 你的数据库名字 > $BACKUP_DIR/你保存的文件名.sql


# 复制网站文件和配置到备份文件夹(请替换为实际的文件夹路径)
# 如果要备份多个就多复制几个 下面的例子
cp -r /data/www $BACKUP_DIR/www
cp -r /data/www $BACKUP_DIR/www
cp -r /data/www $BACKUP_DIR/www



#############################################################################
########################上面这些需要你进行更改##################################
#############################################################################

sleep 5

# 打包备份文件夹为压缩文件(请替换为实际的压缩文件路径)
ZIP_FILE="$(dirname $BACKUP_DIR)/backup-$(date +%Y%m%d).zip"
if [ "$ENABLE_ZIP_ENCRYPTION" = true ]; then
    zip -P $ZIP_PASSWORD -r -$ZIP_COMPRESSION_LEVEL $ZIP_FILE $BACKUP_DIR
else
    zip -r -$ZIP_COMPRESSION_LEVEL $ZIP_FILE $BACKUP_DIR
fi

sleep 5

# 检查压缩文件是否成功创建
if [ -f "$ZIP_FILE" ]; then
    echo "压缩文件已成功创建,开始计算 SHA-1 值..."
    # 计算 SHA-1 值
    SHA1SUM=$(sha1sum $ZIP_FILE | awk '{print $1}')
    
    # 重命名文件,包含 SHA-1 值
    NEW_NAME="$(dirname $BACKUP_DIR)/backup-$(date +%Y%m%d)-${SHA1SUM}.zip"
    mv $ZIP_FILE $NEW_NAME
    
    echo "SHA-1 值计算完毕并重命名文件为: $NEW_NAME"
    
    # 使用 rclone 上传到网盘的指定目录(请替换为实际的云存储路径)
    rclone move $NEW_NAME $RCLONE_DEST
else
    echo "压缩文件创建失败,上传操作取消。"
fi
sleep 5

# 清空备份文件夹(请谨慎操作)
rm -rf $BACKUP_DIR/*

脚本功能

  1. 数据库备份: 脚本首先指定了数据库的用户名和密码,并使用 mysqldump 命令将数据库导出到文件夹中的相应 SQL 文件。
  2. 网站文件备份: 然后,脚本将 /data/www 目录、/etc/caddy 目录、/var/log/caddy 目录和 /data/script 目录复制到 /data/backup 文件夹中。这些目录包含了网站的文件、Caddy 配置文件、Caddy 的日志文件和一些脚本文件。你也可以自定义一些文件夹的位置。
  3. 打包和重命名: 接着,脚本将该文件夹打包成一个名为 backup-日期.tar.xz 的压缩文件,日期格式为 YYYYMMDD。然后,它计算该压缩文件的 SHA-1 值,并将文件重命名为 backup-日期-SHA1.tar.xz,以确保文件名包含唯一的 SHA-1 值。
  4. 上传到云存储: 最后,脚本使用 rclone 将生成的备份压缩文件上传到网盘的指定目录下。这样可以确保备份文件存储在安全的地方,并且具有唯一的标识符。
  5. 清理工作: 所有操作完成后,脚本会清空备份 文件夹,以便下一次备份使用。

使用方法

你可以将此脚本保存为 backup.sh,然后在终端中赋予执行权限:

chmod +x backup.sh

之后,可以通过以下方式运行脚本:

./backup.sh

定时运行

如果你想每五小时运行一次这个备份脚本,可以使用 cron 任务来实现。编辑 crontab 文件:

crontab -e

然后在文件中添加以下行:

0 */5 * * * /path/to/backup.sh

这将在每小时的第 0 分钟运行备份脚本,每五小时执行一次。记得将 /path/to/backup.sh 替换为脚本的实际路径。

如果你不清楚cron规则怎么写

可以尝试使用 这个网站

结语

这个脚本提供了一个简单而有效的方法来自动化备份数据库和网站文件,并将它们安全地上传到云存储中。通过定时运行,你可以确保你的重要数据和配置文件在任何意外情况下都得到了备份和保护。

最后修改:2024 年 06 月 26 日
如果觉得我的文章对你有用,请随意赞赏