Auteur Sujet: [MySQL] Faire des sauvegardes régulières simplement  (Lu 527 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne majinboo

  • Disque externe
  • *
  • Messages: 35
    • Voir le profil
[MySQL] Faire des sauvegardes régulières simplement
« le: 07 Octobre 2006 à 13:51:31 »
La solution la plus simple est de faire des backup via PHPMyAdmin, c'est fonctionnel, relativement rapide mais ça demande d'y penser et c'est difficillement automatisable.

La solution la plus propre est d'utiliser mysqlhotcopy . Ce petit script perl est en effet bien utile. Il permet de se connecter à la base de données et de faire un backup très facilement et très rapidement. La seule condition est de l'executer sur la machine qui contient le serveur mysql. (Donc ça marchera pas pour recuperrer la base de données d'un site sur un hebergeur web en mutualisé mais dans le cas d'un serveur SOHO, ça pose pas de problèmes)

1.Utilisation simple
La syntaxe pour sauvegarder une base de donnée dbname dans /path/backup est la suivante :
mysqlhotcopy dbname -u user -p pass /path/backup
Il est possible de sauvegarder plusieurs base de données en même temps :
mysqlhotcopy db1 db2 db3 db4 -u user -p pass /path/backup
Une documentation complete de l'outil est disponible :
perldoc mysqlhotcopy
2. Scripting
Pour automatiser l'opération, il suffit de faire un peu de shell scripting et d'ajouter le script à la crontab :

#/bin/sh
mkdir -p /backup/mysql.`date +"%F"`
mysqlhotcopy db1 db2 db3 db4 -u user -p pass /backup/mysql.`date +"%F"`

Avec ce script, on sauvegarde les bases dans un nouveau dossier nommé mysql.date. Attention à l'espace disque avec ce genre de script au bout d'un mois, on aurra déjà 30 fois la place occupée par la base de données sur le disque dur. Selon les besoins, il faudrait au moins compresser en tar et bz2, et effacer regulierement des sauvegardes.


#/bin/sh
mkdir -p /backup/mysql.`date +"%F"`
mysqlhotcopy db1 db2 db3 db4 -u user -p pass /backup/mysql.`date +"%F"`
tar cjf /backup/mysql.`date +"%F"`.tbz /backup/mysql.`date +"%F"`
rm -rf /backup/mysql.`date +"%F"`

La compression en tar + bz2 devrait permettre de gagner pas mal d'espace disque.

Si on veut chaque mois ne garder que le dernier backup du mois et supprimer tout les autres, on peut utiliser le script suivant :
#!/bin/sh
mois=`date +"%m"`
let "mois -= 1"
annee=`date +"%Y"`
if [ "$mois" -eq "-1" ]
then
        let "annee -= 1"
fi
if [ "$mois" -lt "10" ]
then
        mois=0$mois
fi
if [ -f ./backup/mysql.$annee-$mois-28.tbz ]
then
        mv ./backup/mysql.$annee-$mois-28.tbz ./backup/mysql.$annee-$mois.tbz
fi
if [ -f ./backup/mysql.$annee-$mois-29.tbz ]
then
        mv ./backup/mysql.$annee-$mois-29.tbz ./backup/mysql.$annee-$mois.tbz
fi
if [ -f ./backup/mysql.$annee-$mois-30.tbz ]
then
        mv ./backup/mysql.$annee-$mois-30.tbz ./backup/mysql.$annee-$mois.tbz
fi
if [ -f ./backup/mysql.$annee-$mois-31.tbz ]
then
        mv ./backup/mysql.$annee-$mois-31.tbz ./backup/mysql.$annee-$mois.tbz
fi
if [ -f ./backup/mysql.$annee-$mois.tbz ]
then
        find backup -name "mysql\.$annee-$mois-*.tbz" -exec rm {} \;
fi
Ce script permet de recuperrer le backup le plus recent du mois precedent (entre le 28 et le 31 du mois) et de le mettre de coté pour ensuite supprimer tout les backups du mois précédents. Si jamais, le backup n'est pas trouvé, aucun backup n'est supprimé. C'est un peu crade (j'aurais du faire une boucle for à la place des 4 if à la suite) mais ça marche. L'idée est d'executer ce script le premier de chaque mois.

3. Récuperation
Les backups sont juste l'ensemble des fichiers des bases de données tels que mysql les stocke sur le filesystem. Il suffit donc d'extraire un backup dans le repertoire contenant les bases de données mysql (/var/mysql sur la plupart des distribs linux)

4. Sécurité
Le premier script contient le nom d'utilisateur et le mot de passe d'un compte mysql en clair. Pour que ce script il faut que cet utilisateur mysql ait les droits pour faire un LOCK TABLES. Il convient donc donner les droits en lecture sur ce script uniquement à l'utilisateur qui l'executera.
« Modifié: 07 Octobre 2006 à 17:03:43 par majinboo »

Hors ligne M_le_maudit

  • Administrateur
  • Petit NAS
  • *****
  • Messages: 91
  • Sexe: Homme
  • Il vit ! Il vit !
    • Voir le profil
    • Le Petit Serveur
Re : [MySQL] Faire des sauvegardes régulières simplement
« Réponse #1 le: 07 Octobre 2006 à 14:16:37 »
Selon les besoins, il faudrait au moins compresser en tar et bz2, voir effacer regulierement des sauvegardes. Tout cela est réalisable en shell script.


Dis-nous tout.

Autre question, comment restaure-t-on les bases sauvegardées ?
« Modifié: 07 Octobre 2006 à 14:40:36 par M_le_maudit »
Serveur SOHO
Boitier HTPC
Intel Core I5 760
16 Go DDR3
4xSATA 1.5 To + 1xSATA 500 Go
Seven (Eeeeehh oui !)

Hors ligne majinboo

  • Disque externe
  • *
  • Messages: 35
    • Voir le profil
Re : [MySQL] Faire des sauvegardes régulières simplement
« Réponse #2 le: 07 Octobre 2006 à 15:44:32 »
La copie permet de copier l'ensembles des fichiers contenant la base sur le filesystem donc pour restaurer un cp du backup dans /var/mysql en general (ça peut varier selon la distrib) suffit. Je vais mettre à jour le premier post.