Le site s'est récemment planté, il vient d'être récupéré, écrire un Wordpress en utilisant des scripts gratuits de sauvegarde automatique sur disque dans le nuage.

Une panne de serveur entraînant la perte des données d'un site web n'est rien de moins qu'une catastrophe ! Si vous n'êtes qu'un petit site web et que vous n'avez pas les moyens de vous offrir plusieurs serveurs de sauvegarde et de configurer des sauvegardes de site web, j'espère que ces informations aideront ceux qui sont confrontés au même problème.

concerner Serveur Linux Il garantit la sécurité des données du site web et la récupération des données même si le serveur est endommagé.

spécificités : :

  • Sauvegardes programmées Spécification des répertoires et des bases de données par WordPress
  • Mise à jour du jugement Déterminer si un article a été mis à jour pour effectuer une tâche de sauvegarde
  • Téléchargement automatique Aller sur AliCloud Disc
  • Auto Clean Des sauvegardes plus anciennes pour éviter d'occuper trop d'espace de stockage

 

Installer le client AliCloudDisk

💡 L'installation d'abord CLI AliCloud Disk utilisé pour les téléchargements de fichiers.

🔹 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

Se connecter à AliCloud Drive

aliyunpan login

🔹 Ouvrez l'URL pop-up dans votre navigateur et scannez le code pour vous connecter. Retournez ensuite au terminal et attendez que le message "Login Successful" s'affiche.

Créer un répertoire de sauvegarde local

mkdir -p /www/backup

Ce répertoire sera utilisé pour stocker les sauvegardes locales, modifiez-le vous-même.

Création de scripts de sauvegarde automatisés

existent /www/backup/ créer un nouveau répertoire backup_wp.sh Le scénario :

nano /www/backup/backup_wp.sh

Collez ensuite le texte suivant :

#!/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"

Sauvegarder et quitter : :

presse Ctrl + X → Entrée Y → Appuyer sur Enter

📌 5. l'octroi de droits d'exécution

chmod +x /www/backup/backup_wp.sh

📌 6. mise en place de tâches chronométrées (panneau pagode)

🔹 Ajouter des tâches planifiées à la pagode

  1. Ouvrir le panneau de la pagode
  2. entrer dans Tâches planifiées → Ajout de tâches programmées
  3. Type de mission option Shell 脚本
  4. Nom de la tâche : :WordPress 自动备份
  5. période de mise en œuvre : :每 6 小时
  6. exécuter une commande : :
bash /www/backup/backup_wp.sh
  1. Sauvegarde des tâches

📌 7. tester manuellement les sauvegardes

Vous pouvez effectuer une sauvegarde immédiatement pour voir si cela fonctionne :

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

Vérifiez ensuite le journal :

tail -f /www/backup/backup.log

Si tout va bien, la tâche programmée s'exécutera automatiquement.

🚨 Dépannage des anomalies courantes

🔍 1. la sauvegarde est bloquée à "Compressing WordPress directory" (compression du répertoire WordPress)

📌 Solution :

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

Si la charge du processeur est élevée, il se peut que le catalogue soit trop volumineux.

La tâche s'arrête après la déconnexion du SSH

📌 Solution : utiliser la fonction nohup

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

De cette manière, la déconnexion SSH n'affecte pas la tâche.

Comment reprendre l'affichage des journaux ?

tail -f /www/backup/backup.log

Vous pouvez visualiser la progression de la sauvegarde en temps réel.

🔍 4. comment éviter les conflits lorsque l'exécution des tâches prend trop de temps

📌 Solution :mécanisme de verrouillage
existent backup_wp.sh Ajouter au début :

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

Ainsi, une nouvelle tâche ne sera pas lancée si la dernière n'est pas terminée.

🎉 Votre site WordPress est maintenant entièrement automatisé avec des sauvegardes !

🚀 Même si le serveur tombe en panne, vous pouvez toujours récupérer vos données !

© déclaration de droits d'auteur

Articles connexes

Pas de commentaires

Vous devez être connecté pour participer aux commentaires !
S'inscrire maintenant
aucun
Pas de commentaires...