Typecho 博客全自动异地备份至 GitHub 私有仓库

· 记录

概述

该方案利用Shell脚本和定时任务(Cron),每日自动将您的Typecho博客的数据库核心文件打包,并安全地推送到一个私有的GitHub仓库中,实现免费、可靠的异地灾备。

PS. 我没有用root用户来操作备份,所以下面会有复制密钥、改路径等操作!!


第一阶段:准备工作(一次性配置)

1. 创建私有 GitHub 仓库

2. 在服务器上安装并配置Git

3. 配置SSH密钥,实现免密推送(注意,我没有用root用户生成SSH密钥,所以下面会复制到root下并权限)


第二阶段:编写核心备份脚本

1. 创建脚本文件

mkdir ~/backup_scripts
cd ~/backup_scripts
nano backup.sh

2. 粘贴并修改脚本内容

将以下脚本模板复制并粘贴到nano编辑器中。

#!/bin/bash

# --- ↓↓↓ 请根据您的实际情况修改以下配置信息 ↓↓↓ ---
# 您的数据库信息 (可以在Typecho的config.inc.php文件中找到)
DB_USER="您的数据库用户名"  # <<< 请替换为您的信息
DB_PASS="您的数据库密码"    # <<< 请替换为您的信息
DB_NAME="您的数据库名称"    # <<< 请替换为您的信息

# 您的文件和仓库路径
TYPECHO_ROOT_DIR="/var/www/typecho"               # Typecho网站根目录
BACKUP_REPO_DIR="/home/your_user/typecho_backup_repo" # <<< 请替换为您的实际路径
GIT_REPO_URL="git@github.com:您的GitHub用户名/您的仓库名.git" # <<< 请替换为您的信息
# --- ↑↑↑ 配置结束 ↑↑↑ ---

echo "--- [$(date '+%Y-%m-%d %H:%M:%S')] 开始备份 ---"

# 如果本地Git仓库不存在,则从GitHub克隆
if [ ! -d "$BACKUP_REPO_DIR" ]; then
    echo "本地仓库不存在,正在从GitHub克隆..."
    git clone $GIT_REPO_URL $BACKUP_REPO_DIR
fi
cd $BACKUP_REPO_DIR

# 滚动删除超过30天的旧备份文件
echo "正在清理30天前的旧备份..."
find . -type f -name 'db-backup-*.sql' -mtime +30 -delete
find . -type f -name 'usr-backup-*.tar.gz' -mtime +30 -delete

# 定义新备份的文件名
DATE_FORMAT=$(date "+%Y-%m-%d")
DB_BACKUP_FILE="db-backup-${DATE_FORMAT}.sql"
USR_BACKUP_FILE="usr-backup-${DATE_FORMAT}.tar.gz"

# 1. 备份数据库
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $DB_BACKUP_FILE
if [ $? -eq 0 ]; then
    echo "数据库备份成功: ${DB_BACKUP_FILE}"
else
    echo "错误:数据库备份失败!"
    exit 1
fi

# 2. 备份usr目录
tar -czf $USR_BACKUP_FILE -C $TYPECHO_ROOT_DIR usr
if [ $? -eq 0 ]; then
    echo "usr目录备份成功: ${USR_BACKUP_FILE}"
else
    echo "错误:usr目录备份失败!"
    exit 1
fi

# 3. 将备份推送到GitHub
git pull origin main
git add .
git commit -m "自动备份于 ${DATE_FORMAT}"
git push origin main

echo "--- [$(date '+%Y-%m-%d %H:%M:%S')] 备份完成并已推送到GitHub ---"

3. 保存并赋予权限


第三阶段:设置定时任务(Cron)

  1. 打开crontab编辑器crontab -e
  2. 添加定时任务:在文件末尾添加以下内容,并确保路径正确。
    0 3 * * * sudo /home/your_user/backup_scripts/backup.sh >> /home/your_user/backup_scripts/backup.log 2>&1
    

    /home/your_user/ 替换为实际用户主目录路径。


本文作者: 𝓬𝓸𝓵𝓪 🚀
本文链接: https://bb.bins.fyi/archives/19/
最后修改:
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!