Sauvegardes MySQL / Fichiers

#1
Bonjour,
je suis hyper inquiet : la solution de backup R1Soft fournie par PlanetHoster ne m'affiche pas les sauvegardes réalisées les 15 derniers jours. Et encore, avant mon ticket au support, je n'avais aucune sauvegarde.
Cette mésaventure, couplée au fait que je n'ai pas la possibilité de sauvegarder mes bases SQL (j'en ai une 15aine) me fait craindre le pire.
Donc question à la communauté : De quelles solutions dispose-je pour réaliser un backup de l'ensemble de mes données (fichiers + Bases SQL) ? quelqu'un a-t'il mis en place un script CRON pour réaliser ces tâches et serait prêt à le partager ?

En vous remerciant par avance pour votre aide,
Bob
 
#2
Bonjour,

Ce sujet a été abordé ici : https://forums.planethoster.com/threads/sauvegarde-batabases-via-mysqldump-impossible-1045.2039/

Pour résumer voilà un exemple de contenu d'un fichier backup.sh qui est appelé par tache cron pour sauvegarder ton répertoire public_html et 2 bases de données :
Code:
#!/bin/sh

USER="usercpanel"

DBADMIN="backup"
DBPW="password"

DB1="base1"
DB2="base2"

DATE=`date -I`


find /home/$USER/backups/files/public_html* -mtime -1 -exec rm {} \;
find /home/$USER/backups/bdd/bdd* -mtime -1 -exec rm {} \;


mysqldump -u ${USER}_${DBADMIN} -p$DBPW ${USER}_${DB1} | gzip > /home/$USER/backups/bdd/bddbackup_${DB1}_${DATE}.sql.gz
mysqldump -u ${USER}_${DBADMIN} -p$DBPW ${USER}_${DB2} | gzip > /home/$USER/backups/bdd/bddbackup_${DB2}_${DATE}.sql.gz

tar czf /home/$USER/backups/files/public_html_$DATE.tar.gz -C / home/$USER/public_html;
Pour précision :
  • DBADMIN est un utilisateur mysql qui doit avoir accés à toutes les bases de données que tu veux sauvegarder avec tous les droits sur chacune
  • "find /home/$USER/backups/files/public_html* -mtime -1 -exec rm {} \;" permet d'effacer automatiquement la sauvegarde de la veille afin de ne pas surcharger l'espace disque
    C'est une boucle qui cherchera tous les fichiers commençant de la même façon (ici "public_html")
    Cette fonction a été mis en place car nous téléchargeons quotidiennement et automatiquement les sauvegarde sur un PC (méthodes éxpliqués sur le post cité en début)
Le reste des lignes doit te parler normalement ;)


Et l'appel de la tache cron se fait ainsi :
Code:
30 2 * * * /home/usercpanel/backups/backup.sh
Ici tous les jours de tous les mois à 2h30 du matin
 
#3
Bonjour,

Ce sujet a été abordé ici : https://forums.planethoster.com/threads/sauvegarde-batabases-via-mysqldump-impossible-1045.2039/

Pour résumer voilà un exemple de contenu d'un fichier backup.sh qui est appelé par tache cron pour sauvegarder ton répertoire public_html et 2 bases de données :
Merci beaucoup pour ton aide, j'avais effectivement vu ce post, mais vu son âge il me semblait devenu obsolète :)
Encore merci, je vais tester.
Bonne journée,
Bob
 
#4
Petite alternative... principalement pour ceux qui ont plusieurs domaines

Code:
#! /bin/bash

# USER CPANEL
USER=""

# USER MYSQL ADMIN
DBADMIN=""

# MOT DE PASSE ADMIN
DBPW=""

# REPERTOIRE DE SAUVEGARDE
BACKUP_DIR="/home/$USER/backups"

# JOURS A GARDER
NBJOURS=7

# REPERTOIRES de vos SITES SUPPLEMENTAIRES- séparés par un espace. Exemple "monsite.com monsite2.com"
WEBSITES="monsite.com monsite2.com"

# RIEN A CHANGER APRES
############################################

# Détermine la date du jour
DATE=$(date +"%F")

# MYSQL
# CREATION DE LA LISTE DES BASES ACCESSIBLES
databases=`mysql --user=$DBADMIN -p$DBPW -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)"`

# LOOP A TRAVERS LES BASES ET DUMP
for db in $databases; do
  mysqldump --force --opt --user=$DBADMIN -p$DBPW --databases $db | gzip > "$BACKUP_DIR/bdd/${db}_${DATE}.gz"
done

# SAUVEGARDE du site principal (public_html)
find /home/$USER/public_html -type f -size -3M -print0 | tar -czf /home/$USER/backups/files/${USER}_${DATE}.tar.gz --null -T -

# SAUVEGARDE SITES SUPPLEMENTAIRES
for WEBSITE in $WEBSITES; do
  if [ -d /home/$USER/${WEBSITE} ]; then
    find /home/$USER/${WEBSITE} -type f -size -3M -print0 | tar -czf /home/$USER/backups/files/${WEBSITE}_${DATE}.tar.gz --null -T -
  fi
done

# SAUVEGARDE EMAILS
tar cf /home/$USER/backups/mail/${USER}_${DATE}.tar.gz -C / home/$USER/mail ;

for WEBSITE in $WEBSITES; do
  if [ -d /home/$USER/mail/${WEBSITE} ]; then
    tar cf /home/$USER/backups/mail/${WEBSITE}_${DATE}.tar.gz -C / home/$USER/mail/${WEBSITE} ;
  fi
done

find /home/$USER/backups/bdd/bdd* -mtime +${NBJOURS} -exec rm {} \;
find /home/$USER/backups/files/site* -mtime +${NBJOURS} -exec rm {} \;
find /home/$USER/backups/mail/mail* -mtime +${NBJOURS} -exec rm {} \;
C'est à peu près la même chose sauf que :
Pour les bases, la commande se charge elle-même de lister les bases et d'en faire la sauvegarde.

Le site principal est sauvegardé (public_html)

Une boucle lit la variable WEBSITES et sauvegarde chaque site séparément (en vérifiant si évidemment le dossier existe).

Le dossier mail est sauvegardé au complet mais aussi, chaque site a son propre dossier
home/$USER/mail/monsite.com

Donc, une boucle les sauvegarde séparément.
 
Dernière édition:
#5
Note 2:

Ma commande sauvegarde les fichier plus petits que 3M. Je fournis parfois de gros fichiers en téléchargement mais ces fichiers ne sont pas essentiels au site.

Si cela n'a pas d'importance, changer :
Code:
find /home/$USER/${WEBSITE} -type f -size -3M -print0 | tar -czvf /home/$USER/backups/files/${WEBSITE}_${DATE}.tar.gz --null -T -
pour
Code:
find /home/$USER/${WEBSITE} -type f -print0 | tar -czvf /home/$USER/backups/files/${WEBSITE}_${DATE}.tar.gz --null -T -
 
Haut