최근 빈번한 사이트 충돌, 방금 복구, 무료 클라우드 디스크 자동 백업 스크립트를 사용하여 Wordpress 작성

AI 실습 튜토리얼6개월 전 업데이트 AI 공유 서클
1.4K 00

서버가 다운되어 웹사이트 데이터가 손실되는 것은 재앙과 다름없습니다! 소규모 웹사이트로 여러 대의 백업 서버를 운영할 여력이 없고 웹사이트 백업을 구성할 수 없다면 이 글이 같은 문제에 직면한 분들에게 도움이 되길 바랍니다.

관련 Linux 서버 서버가 손상되더라도 웹사이트 데이터의 보안과 데이터 복구를 보장합니다.

특수성 ::

  • 예약 백업 워드프레스 디렉토리 및 데이터베이스 지정하기
  • 판단 업데이트 백업 작업을 수행하기 위해 문서가 업데이트되었는지 확인합니다.
  • 자동 업로드 알리클라우드 디스크로 이동
  • 자동 청소 너무 많은 저장 공간을 차지하지 않도록 이전 백업하기

 

1. 알리클라우드디스크 클라이언트를 설치합니다.

💡 먼저 설치 알리클라우드 디스크 CLI 파일 업로드에 사용됩니다.

🔹 우분투 / 데비안

sudo curl -fsSL http://file.tickstep.com/apt/pgp | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/tickstep-packages-archive-keyring.gpg > /dev/null && echo "deb [signed-by=/etc/apt/trusted.gpg.d/tickstep-packages-archive-keyring.gpg arch=amd64,arm64] http://file.tickstep.com/apt aliyunpan main" | sudo tee /etc/apt/sources.list.d/tickstep-aliyunpan.list > /dev/null && sudo apt-get update && sudo apt-get install -y aliyunpan

🔹 CentOS/RHEL

sudo curl -fsSL http://file.tickstep.com/rpm/aliyunpan/aliyunpan.repo | sudo tee /etc/yum.repos.d/tickstep-aliyunpan.repo > /dev/null && sudo yum install aliyunpan -y

2. 알리클라우드 드라이브에 로그인합니다.

aliyunpan login

🔹 브라우저에서 팝업 URL을 열고 코드를 스캔하여 로그인합니다. 그런 다음 터미널로 돌아가서 '로그인 성공'이 표시될 때까지 기다립니다.

3. 로컬 백업 디렉터리 만들기

mkdir -p /www/backup

이 디렉토리는 로컬 백업을 저장하고 직접 수정하는 데 사용됩니다.

4. 자동 백업 스크립트 만들기

존재 /www/backup/ 디렉토리에 새 backup_wp.sh 스크립트:

nano /www/backup/backup_wp.sh

그런 다음 다음을 붙여넣습니다:

#!/bin/bash
# 备份目录
BACKUP_DIR="/www/backup"
WP_DIR="/home/www/wp-content" //替换为你要备份的目录地址
DB_NAME="数据库名"
DB_USER="数据库账号"
DB_PASS="数据库密码"
DB_HOST="localhost"
# 文章数量存储文件
NO_FILE="$BACKUP_DIR/no.md"
# 备份文件命名
DATE=$(date +"%Y%m%d-%H%M%S")
WP_BACKUP="$BACKUP_DIR/wp-content-$DATE.tar.gz"
DB_BACKUP="$BACKUP_DIR/db-$DATE.sql"
DB_BACKUP_GZ="$DB_BACKUP.gz"
LOG_FILE="$BACKUP_DIR/backup.log"
# 定义日志函数(既输出到终端,又写入日志)
log() {
echo -e "$1" | tee -a "$LOG_FILE"
}
log "---------------------------"
log "[`date`] 🚀 开始备份 WordPress 目录..."
# 检查 WordPress 目录是否存在且非空
if [ ! -d "$WP_DIR" ] || [ -z "$(ls -A "$WP_DIR")" ]; then
log "[`date`] 🚨 WordPress 目录为空,备份失败!"
exit 1
fi
# 获取数据库文章数量
ARTICLE_COUNT=$(mysql -u "$DB_USER" -p"$DB_PASS" -h "$DB_HOST" -D "$DB_NAME" -se "SELECT COUNT(*) FROM wp_posts WHERE post_type='post' AND post_status='publish';")
log "[`date`] 📊 数据库中文章总数: $ARTICLE_COUNT"
# 确保 no.md 文件存在,如果不存在,则创建并初始化
if [ ! -f "$NO_FILE" ]; then
echo "0" > "$NO_FILE"
log "[`date`] 🆕 no.md 文件不存在,已创建: $NO_FILE"
fi
# 读取 no.md 中的文章数量
PREVIOUS_COUNT=$(cat "$NO_FILE")
log "[`date`] 📋 读取 no.md 文件 ($NO_FILE) 中的文章数量: $PREVIOUS_COUNT"
# 如果文章数量未变化,则跳过备份
if [ "$ARTICLE_COUNT" -eq "$PREVIOUS_COUNT" ]; then
log "[`date`] 🛑 文章数量未变化,跳过备份流程。"
exit 0
fi
# 更新 no.md 文件
echo "$ARTICLE_COUNT" > "$NO_FILE"
log "[`date`] ✍️ 更新 no.md 文件,记录最新的文章数量: $ARTICLE_COUNT"
# 继续执行备份流程
log "[`date`] 📦 开始备份 WordPress 目录..."
tar -czf "$WP_BACKUP" "$WP_DIR" >> "$LOG_FILE" 2>&1
log "[`date`] ✅ WordPress 目录备份完成: $WP_BACKUP"
log "[`date`] 📦 开始备份数据库..."
if ! mysql -u "$DB_USER" -p"$DB_PASS" -h "$DB_HOST" -e "USE $DB_NAME" > /dev/null 2>&1; then
log "[`date`] 🚨 数据库连接失败,请检查数据库配置!"
exit 1
fi
mysqldump -u "$DB_USER" -p"$DB_PASS" -h "$DB_HOST" "$DB_NAME" > "$DB_BACKUP"
log "[`date`] ✅ 数据库导出完成: $DB_BACKUP"
log "[`date`] 📦 压缩数据库文件..."
gzip "$DB_BACKUP"
log "[`date`] ✅ 数据库压缩完成: $DB_BACKUP_GZ"
log "[`date`] ☁️  开始上传到阿里云盘..."
aliyunpan upload "$WP_BACKUP" /backup/ | tee -a "$LOG_FILE"
aliyunpan upload "$DB_BACKUP_GZ" /backup/ | tee -a "$LOG_FILE"
log "[`date`] ✅ 上传完成!"
log "[`date`] 🧹 删除 7 天前的本地备份..."
find "$BACKUP_DIR" -type f -mtime +7 -print -exec rm -f {} \; | tee -a "$LOG_FILE"
log "[`date`] ✅ 备份任务完成!"
# 删除日志文件
rm -f "$LOG_FILE"

저장하고 종료 ::

를 누릅니다. Ctrl + X → 입력 Y → 누르기 Enter

📌 5. 실행 권한 부여

chmod +x /www/backup/backup_wp.sh

📌 6. 시간 제한 작업 설정하기(파고다 패널)

🔹 파고다에 예약된 작업 추가하기

  1. 파고다 패널 열기
  2. 로 이동 계획된 작업 → 예약된 작업 추가하기
  3. 미션 유형 옵션 Shell 脚本
  4. 작업 이름 ::WordPress 自动备份
  5. 구현 기간 ::每 6 小时
  6. 명령을 실행합니다. ::
bash /www/backup/backup_wp.sh
  1. 작업 저장

수동으로 백업 테스트하기

즉시 백업을 수행하여 작동하는지 확인할 수 있습니다:

/bin/bash /www/backup/backup_wp.sh

그런 다음 로그를 확인합니다:

tail -f /www/backup/backup.log

모든 것이 정상이면 시간 제한 작업이 자동으로 실행됩니다.

🚨 일반적인 이상 현상 문제 해결하기

🔍 1. 백업이 "WordPress 디렉토리 압축 중"에서 멈춤

📌 솔루션:

ps aux | grep backup_wp.sh
top -c  # 查看 CPU 负载
ls -lh /www/backup/

CPU 부하가 높으면 카탈로그가 너무 클 수 있으니 조금만 기다려주세요.

🔍 2. SSH 연결 해제 후 작업 중지

📌 해결 방법 nohup

nohup /bin/bash /www/backup/backup_wp.sh > /www/backup/backup.log 2>&1 &

이렇게 하면 SSH 연결이 끊겨도 작업에 영향을 미치지 않습니다.

🔍 3. 로그 보기 재개 방법

tail -f /www/backup/backup.log

백업 진행 상황을 실시간으로 확인할 수 있습니다.

🔍 4. 작업 수행에 너무 오래 걸리는 경우 충돌을 피하는 방법

📌 솔루션:잠금 메커니즘
존재 backup_wp.sh 처음에 추가합니다:

if pgrep -f "backup_wp.sh" > /dev/null; then
echo "已有备份任务在运行,跳过此次执行。" >> /www/backup/backup.log
exit 1
fi

이렇게 하면 마지막 작업이 완료되지 않은 경우 새 작업이 시작되지 않습니다.

이제 워드프레스 사이트가 백업을 통해 완전히 자동화되었습니다!

🚀 서버가 다운되더라도 언제든지 데이터를 복구할 수 있습니다!

© 저작권 정책

관련 문서

댓글 없음

댓글에 참여하려면 로그인해야 합니다!
지금 로그인
없음
댓글 없음...