mettre en place un cron job pour sauvegarder MySQL

WRInaute occasionnel
Fais une recherche sur le forum : la question a été souvent abordée, que tu sois sur un mutu ou un dédié.
 
Nouveau WRInaute
Aller pour commencer dans la bonne humeur voila ce que tu peut faire.

Dans my.cnf j'ai tu mets ca pour les logs:
Code:
log             = /var/log/mysql/mysql.log
log-bin                 = /var/log/mysql/mysql-bin.log
log-error       = /var/log/mysql/mysqld.err
log-update      = /var/log/mysql/bdd.log

ensuite tu fait un script bash journalier qui récupére les logs du serveurs (il y a toutes les transactions de la journée dedans)
Code:
tar -cpPzvf bdd.tar.gz `find /var/log/mysql -type f -print | grep "bdd."`

de temps en temps un dump de ta base et en même temp une petite relance des logs :
Code:
for i in `find /var/lib/mysql/* -type d`; do
    a=`echo $i | cut -d / -f 5`
    mysqldump -u dump -pdumppass --opt $a | gzip > bdd.gz
done
rm -rf /var/log/mysql/bdd*
mysqladmin -u flush -pflushpass flush-logs

bien sur l'user qui fait ces manips dans cron doit avoir les bon droits.
dans mysql il faut créer un user flush et un autre dump qui n'ont aucun droit sauf les taches pour lesquels ils sont assignées.

Voila
 
WRInaute impliqué
Personnellement j'utilise ceci et c'est vraiment simple et efficace :

Pour une sauvegarde quotidienne :
Code:
#!/bin/sh
  # sauvegarde des bases de données hebdommadaire
  # A modifier:
  USER=xxxxx
  PASS=xxxxxxxxxxxx
  DESTINATION=/backup/daily/mysql

  DATE=`date +%Y-%m-%d`
  TIME=`date +%H:%M`
  DAY=`date +%d`
  DEL=`TZ=CST+24 date +%Y-%m-%d`

  # backup de la semaine
  mysqldump -u $USER --password=$PASS nomdelabase | gzip > $DESTINATION/nomdelabase-$TIME.$DATE.sql.gz

//répéter les 2 lignes précédentes autant de fois que de bases à sauvegarder

  # efface le backup de la veille
  rm -rf $DESTINATION/*.$DEL.sql.gz

Cela se passe donc en 2 temps : Sauvegarde de (des) bases et suppression des sauvegardes de la veille (inutile de garder plus d'une journée car je fais une sauvegarde toutes les 2 heures + une sauvegarde hebdomadaire et que ce sont des tables qui ont un très grand nombre d'enregistrement par jour donc une sauvegarde de 3 jours n'a aucun intérêt)


Backup hebdommadaire pour les tables qui ont peu d'enregistrements
Code:
 #!/bin/sh
  # sauvegarde des bases de données hebdommadaire
  # A modifier:
  USER=xxxx
  PASS=xxxx
  DESTINATION=/backup/weekly/mysql

  DATE=`date +%Y-%m-%d`
  WEEK=`date +%W`
  let "DEL=$WEEK-2"

  # backup de la semaine
  mysqldump -u $USER --password=$PASS nomdelabase | gzip > $DESTINATION/nomdelabase-$WEEK.$DATE.sql.gz
 
  # efface le backup vieux de 2 semaines
  rm -rf $DESTINATION/*-$DEL.*.sql.gz

Pour la tâche cron, éditer le fichier crontab et ajouter ceci :

Code:
0 0,6,9,12,15,18,21 * * * root /usr/bin/backup-daily-bdd 2>&1 > /dev/null   # Sauvegarde quotidienne des bases de données 
1 0 * * 0 root /usr/bin/backup-weekly-bdd 2>&1 > /dev/null   # Sauvegarde hebdomadaire des bases de données

Dans le premier cas, les bases sont sauvées tous les jours à 00h00, 6h00, 9h00 etc.. dans le 2eme cas, à minuit et 1 minute tous les lundis matins
 
WRInaute occasionnel
code a dit:
Personnellement j'utilise ceci et c'est vraiment simple et efficace :

Pour une sauvegarde quotidienne :
Code:
#!/bin/sh
  # sauvegarde des bases de données hebdommadaire
  # A modifier:
  USER=xxxxx
  PASS=xxxxxxxxxxxx
  DESTINATION=/backup/daily/mysql

  DATE=`date +%Y-%m-%d`
  TIME=`date +%H:%M`
  DAY=`date +%d`
  DEL=`TZ=CST+24 date +%Y-%m-%d`

  # backup de la semaine
  mysqldump -u $USER --password=$PASS nomdelabase | gzip > $DESTINATION/nomdelabase-$TIME.$DATE.sql.gz

//répéter les 2 lignes précédentes autant de fois que de bases à sauvegarder

  # efface le backup de la veille
  rm -rf $DESTINATION/*.$DEL.sql.gz

Cela se passe donc en 2 temps : Sauvegarde de (des) bases et suppression des sauvegardes de la veille (inutile de garder plus d'une journée car je fais une sauvegarde toutes les 2 heures + une sauvegarde hebdomadaire et que ce sont des tables qui ont un très grand nombre d'enregistrement par jour donc une sauvegarde de 3 jours n'a aucun intérêt)


Backup hebdommadaire pour les tables qui ont peu d'enregistrements
Code:
 #!/bin/sh
  # sauvegarde des bases de données hebdommadaire
  # A modifier:
  USER=xxxx
  PASS=xxxx
  DESTINATION=/backup/weekly/mysql

  DATE=`date +%Y-%m-%d`
  WEEK=`date +%W`
  let "DEL=$WEEK-2"

  # backup de la semaine
  mysqldump -u $USER --password=$PASS nomdelabase | gzip > $DESTINATION/nomdelabase-$WEEK.$DATE.sql.gz
 
  # efface le backup vieux de 2 semaines
  rm -rf $DESTINATION/*-$DEL.*.sql.gz

Pour la tâche cron, éditer le fichier crontab et ajouter ceci :

Code:
0 0,6,9,12,15,18,21 * * * root /usr/bin/backup-daily-bdd 2>&1 > /dev/null   # Sauvegarde quotidienne des bases de données 
1 0 * * 0 root /usr/bin/backup-weekly-bdd 2>&1 > /dev/null   # Sauvegarde hebdomadaire des bases de données

Dans le premier cas, les bases sont sauvées tous les jours à 00h00, 6h00, 9h00 etc.. dans le 2eme cas, à minuit et 1 minute tous les lundis matins

ca a l'air super tout ca.mais pour un novice c'est pas tres clair comme explication
faut copier le code en quelle extention ?
finallement il y a combien de fichiers en tout

pensez à des gars qui connaissent pas grande chose , comme moi par exemple .

merci les gars
 
WRInaute discret
Bonjour

Il y a plus simple, tu vas sur webcron.org qui est un cron mais par le web, donc sans chipoter à ton serveur, et en plus ils fournissent un script qui sauve tes bases dans un répertoire, donc tu sauves la totalité en ftp par la suite, et tu as toujours plusieurs versions en ligne de ta DB

Patrick
 
Discussions similaires
Haut