サーバーがクラッシュしてウェブサイトのデータが失われることは、大惨事にほかなりません!もしあなたが小さなウェブサイトを運営しているに過ぎず、複数のバックアップサーバーを用意する余裕もなく、ウェブサイトのバックアップを設定することもできないのであれば、同じ問題に直面している方々のお役に立てれば幸いです。
係る Linuxサーバー ウェブサイトのデータの安全性を保証し、サーバーが破損してもデータを復元できる。
特性 ::
- スケジュールバックアップ WordPress ディレクトリとデータベースの指定
- 更新の判断 バックアップタスクを実行するために記事が更新されたかどうかを判断する
- 自動アップロード AliCloudディスクへ
- オートクリーン 古いバックアップを保存することで、ストレージを圧迫しない
1.AliCloudDiskクライアントをインストールします。
最初に 💡 設置する AliCloud Disk CLI ファイルのアップロードに使用される。
Ubuntu / Debian
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
AliCloud Driveにログインします。
aliyunpan login
🔹 ブラウザでポップアップURLを開き、コードをスキャンしてサインインする。 その後、端末に戻り、「Login Successful」と表示されるのを待つ。
📌 ローカルバックアップディレクトリの作成
mkdir -p /www/backup
このディレクトリはローカルのバックアップを保存するために使用されるので、自分で変更してください。
自動バックアップスクリプトの作成
ある /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
時間指定タスクの設定 (パゴダパネル)
パゴダへのスケジュールされたタスクの追加
- パゴダパネルを開く
- 入る 計画されたタスク → スケジュールされたタスクの追加
- ミッションの種類 オプション
Shell 脚本
- タスク名 ::
WordPress 自动备份
- 実施期間 ::
每 6 小时
- コマンドを実行する ::
bash /www/backup/backup_wp.sh
- タスクの保存
📌 手動でバックアップをテストする。
すぐにバックアップを実行し、動作するかどうかを確認することができます:
/bin/bash /www/backup/backup_wp.sh
そしてログをチェックする:
tail -f /www/backup/backup.log
問題がなければ、時間指定タスクは自動的に実行される。
🚨 一般的な異常のトラブルシューティング
バックアップが "WordPressディレクトリの圧縮 "で止まっています。
📌 解決策:
ps aux | grep backup_wp.sh
top -c # 查看 CPU 负载
ls -lh /www/backup/
CPU負荷が高い場合、カタログのサイズが大きすぎる可能性があります。
SSH が切断されるとタスクが停止する。
解決策:次のようにします。 nohup
nohup /bin/bash /www/backup/backup_wp.sh > /www/backup/backup.log 2>&1 &
こうすることで、SSHの切断がタスクに影響することはない。
ᔍ ログの閲覧を再開する方法
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
こうすれば、最後のタスクが完了していなければ、新しいタスクは開始されない。
🎉 これでWordPressサイトのバックアップが完全に自動化されました!
🚀 サーバーがクラッシュしても、いつでもデータを復旧できる!