WordPress 6.6.x nécessite PHP 7.4 ou plus, ainsi que MySQL 8.0 ou MariaDB 10.5 ou plus.
Pour cette version, vous pouvez obtenir les fichiers d’installation depuis le site officiel : https://wordpress.org/download/
Cependant, chez Free, les versions de WordPress au-delà de 4.9.x ne sont pas compatibles.
Il est donc recommandé de télécharger la version 4.9.x ou inférieure pour éviter les problèmes de compatibilité.
Vous pouvez accéder aux versions précédentes ici : https://fr.wordpress.org/download/releases/#branch-49
Sauvegardes depuis un serveur Linux
À la suite d’un crash de ma base de données chez Free et d’un manque de sauvegardes régulières (une grave erreur de ma part), j’ai perdu une grande quantité d’articles et suis contraint de repartir de zéro.
Pour éviter une telle situation à l’avenir, il est essentiel de mettre en place une procédure de sauvegarde fiable pour sauvegarder non seulement les articles mais aussi l’ensemble des données du site.
Base de données
Sur le serveur FTP, un dossier nommé « wp-backups » a été créé, contenant un script « backup_db.php ».
Ce script est conçu pour effectuer une sauvegarde de la base de données SQL et sera exécuté automatiquement par un script de sauvegarde nommé « save.sh » sur le serveur Linux.
Le fichier « backup_db.php » réalise une sauvegarde complète des tables de la base de données.
Il enregistre chaque table et ses données dans des fichiers « .sql » distincts au sein du dossier « wp-backups ».
Le script « save.sh », quant à lui, permet de gérer l’exécution et la sauvegarde automatisée en incluant d’autres éléments du site si nécessaire.
backup_db.php :
<?php
// Informations de connexion à la base de données
$db_host = 'sql.free.fr';
$db_user = userdb;
$db_pass = passdb;
$db_name = namedb;
// Préfixes à sauvegarder
$prefixes = ['lab_', 'tips_'];
// Effacer l'affichage précédent
ob_start(); // Démarre la mise en tampon de sortie
?>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sauvegarde de la Base de Données</title>
<style>
body { font-family: Arial, sans-serif; background-color: #f9f9f9; color: #333; padding: 20px; }
h1 { color: #4CAF50; }
</style>
</head>
<body>
<h1>Sauvegarde de la Base de Données - <?= date("Y-m-d H:i:s") ?></h1>
<?php
try {
// Connexion à la base de données
$pdo = new PDO("mysql:host=$db_host;dbname=$db_name;charset=utf8", $db_user, $db_pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
foreach ($prefixes as $prefix) {
// Nom de fichier pour la sauvegarde du préfixe actuel
$backup_file = __DIR__ . '/' . $prefix . 'backup_' . date("Ymd_His") . '.sql';
$fp = fopen($backup_file, 'w');
// Récupération des tables correspondant au préfixe
$tables = $pdo->query("SHOW TABLES LIKE '{$prefix}%'")->fetchAll(PDO::FETCH_COLUMN);
foreach ($tables as $table) {
// Ajout de DELETE pour vider la table si elle existe
fwrite($fp, "DELETE FROM `$table`;\n");
// Création de la commande de création de table
$create_table_stmt = $pdo->query("SHOW CREATE TABLE `$table`")->fetch(PDO::FETCH_ASSOC)['Create Table'];
fwrite($fp, "CREATE TABLE IF NOT EXISTS `$table` " . substr($create_table_stmt, strpos($create_table_stmt, '(')) . ";\n\n");
// Récupération des données de la table
$rows = $pdo->query("SELECT * FROM `$table`", PDO::FETCH_ASSOC);
foreach ($rows as $row) {
$values = array_map([$pdo, 'quote'], $row);
$insert_stmt = "INSERT INTO `$table` VALUES (" . implode(", ", $values) . ");\n";
fwrite($fp, $insert_stmt);
}
fwrite($fp, "\n\n");
}
fclose($fp);
echo "Sauvegarde réussie pour les tables avec le préfixe '$prefix' dans $backup_file<br>";
}
} catch (PDOException $e) {
echo "Erreur lors de la sauvegarde de la base de données : " . $e->getMessage();
}
// Fermeture de la connexion à la base de données
$pdo = null; // Cela ferme explicitement la connexion à la base de données
// Affichage du contenu tamponné
ob_end_flush();
?>
</body>
</html>
Sauvegarde du dossier WordPress depuis un serveur Linux
Le script de sauvegarde « save.sh » est utilisé pour automatiser la sauvegarde complète du dossier WordPress ainsi que des fichiers de base de données.
Le script « save.sh » réalise les étapes suivantes pour sauvegarder l’ensemble du site :
- Configuration des variables de sauvegarde : Le script définit les informations de connexion FTP ainsi que les dossiers de sauvegarde locaux pour organiser les fichiers et les bases de données SQL.
- Création des dossiers de sauvegarde : Il crée un dossier spécifique pour chaque exécution de sauvegarde avec un horodatage pour une meilleure gestion des versions, ainsi qu’un dossier dédié aux fichiers SQL.
- Téléchargement du script PHP de sauvegarde de la base de données :
- Le script télécharge « backup_db.php » depuis le serveur FTP et l’exécute pour générer une sauvegarde SQL.
- Une fois la sauvegarde terminée, les fichiers SQL sont déplacés dans le dossier dédié.
- Téléchargement des fichiers WordPress : En utilisant lftp, le script copie l’ensemble des fichiers WordPress depuis le serveur FTP vers le dossier de sauvegarde local.
- Compression des fichiers de sauvegarde : Une fois le téléchargement terminé, tous les fichiers sont compressés en un fichier ZIP unique pour économiser de l’espace et faciliter le stockage.
- Nettoyage et suppression : Après la compression, le dossier de sauvegarde temporaire est supprimé, ne laissant que le fichier ZIP final et les fichiers SQL.
save.sh :
#!/bin/bash
# Informations de connexion FTP pour les fichiers
FTP_HOST="ftpperso.free.fr"
FTP_USER="userftp"
FTP_PASS="passftp"
REMOTE_DIR="/wordpress"
# Dossier principal de sauvegarde
LOCAL_MAIN_FOLDER="/mnt/nas/wordpress_backups"
# Dossier de sauvegarde local avec date et heure
LOCAL_BACKUP_DIR="$LOCAL_MAIN_FOLDER"/wordpress_backup_$(date +"%Y%m%d_%H%M%S")
mkdir -p "$LOCAL_BACKUP_DIR"
log "Dossier de sauvegarde créé : $LOCAL_BACKUP_DIR"
# Dossier de sauvegarde pour les fichiers SQL
SQL_BACKUP_DIR="$LOCAL_MAIN_FOLDER"/sql_backups
mkdir -p "$SQL_BACKUP_DIR"
log "Dossier de sauvegarde SQL créé : $SQL_BACKUP_DIR"
# Fichier de log
LOG_FILE="$LOCAL_MAIN_FOLDER"/backup_log_$(date +"%Y%m%d").log
# Fonction pour enregistrer les logs
log() {
echo "$(date +"%Y-%m-%d %H:%M:%S") - $1" >> "$LOG_FILE"
}
# Exécution du script PHP pour la sauvegarde complète
PHP_SCRIPT_URL='http://site.free.fr/wordpress/wp-backups/backup_db.php'
log "Téléchargement du script PHP depuis $PHP_SCRIPT_URL..."
curl -o "$LOCAL_BACKUP_DIR/backup_db.php" "$PHP_SCRIPT_URL"
if [ $? -ne 0 ]; then
log "Erreur lors du téléchargement de $PHP_SCRIPT_URL."
exit 1
fi
log "Script PHP téléchargé avec succès."
# Exécution du script PHP
log "Exécution du script PHP..."
php "$LOCAL_BACKUP_DIR/backup_db.php"
if [ $? -ne 0 ]; then
log "Erreur lors de l'exécution de $LOCAL_BACKUP_DIR/backup_db.php."
exit 1
fi
log "Script PHP exécuté avec succès."
# Pause de 5 secondes
sleep 5
# Téléchargement des fichiers WordPress
log "Téléchargement des fichiers WordPress..."
lftp -f "
open $FTP_HOST
user $FTP_USER $FTP_PASS
mirror --verbose $REMOTE_DIR $LOCAL_BACKUP_DIR
bye
"
if [ $? -ne 0 ]; then
log "Erreur lors du téléchargement des fichiers WordPress."
exit 1
fi
log "Téléchargement des fichiers WordPress terminé."
# Déplacement des fichiers SQL vers le dossier de sauvegarde
log "Déplacement des fichiers SQL vers $SQL_BACKUP_DIR..."
if compgen -G "$LOCAL_BACKUP_DIR/wp-backups/*.sql" > /dev/null; then
sudo mv "$LOCAL_BACKUP_DIR/wp-backups/"*.sql "$SQL_BACKUP_DIR/"
if [ $? -eq 0 ]; then
log "Fichiers SQL déplacés vers $SQL_BACKUP_DIR."
else
log "Erreur lors du déplacement des fichiers SQL."
fi
else
log "Aucun fichier SQL trouvé dans $LOCAL_BACKUP_DIR/wp-backups."
fi
# Compression des fichiers en un fichier ZIP
ZIP_FILE="$LOCAL_MAIN_FOLDER"/wordpress_backup_$(date +"%Y%m%d_%H%M%S").zip
log "Compression des fichiers dans $ZIP_FILE..."
zip -r "$ZIP_FILE" "$LOCAL_BACKUP_DIR"
if [ $? -eq 0 ]; then
log "Sauvegarde réussie et compressée dans $ZIP_FILE."
else
log "Erreur lors de la compression des fichiers."
fi
# Suppression du dossier de sauvegarde après compression (optionnel)
log "Suppression du dossier de sauvegarde : $LOCAL_BACKUP_DIR"
rm -rf "$LOCAL_BACKUP_DIR"
log "Sauvegarde terminée."
# Fin du script
Planifier la sauvegarde
Pour garantir une sauvegarde régulière et automatisée du site WordPress, vous pouvez configurer une tâche cron sur un serveur Linux.
Cela permet de lancer automatiquement le script de sauvegarde « save.sh » à une fréquence définie, sans intervention manuelle.
Automatiser avec cron sur un serveur Linux
Suivez les étapes ci-dessous pour configurer la tâche planifiée avec cron :
- Ouvrez le fichier crontab pour éditer les tâches cron de l’utilisateur actuel :
crontab -e
- Ajouter une ligne pour automatiser l’exécution quotidienne :
0 3 * * * /chemin/vers/save.sh
Cette syntaxe signifie que le script sera lancé :
– À 3 heures et 0 minute chaque jour (premier 0 3)
– Tous les jours du mois (* pour chaque valeur suivant l’heure)
– Pour spécifier une autre heure, modifiez le premier et le deuxième champ en conséquence
- Enregistrer et fermer le fichier crontab (dans l’éditeur choisi) pour que la tâche soit ajoutée à la liste des exécutions planifiées de cron.
Résultat :
Une fois configuré, le script de sauvegarde s’exécutera automatiquement à l’heure définie, garantissant des copies de sauvegarde quotidiennes sans intervention manuelle.
Conseil :
Vérifiez régulièrement que les sauvegardes s’exécutent comme prévu en consultant les logs ou les fichiers générés dans le dossier de sauvegarde.