Sauvegarder plusieurs bases de données d'un seul coup d'un seul

Réduire
Ceci est un sujet important.
X
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Sauvegarder plusieurs bases de données d'un seul coup d'un seul

    Bonjour,



    Je passe du temps à sauvegarder régulièrement mes bases de données — Joomla et autres — stockées en local en les exportant une à une depuis PhpMyAdmin.

    Quelqu'un pourrait-il me suggérer un outil (logiciel Windows ou script...) permettant de sauvegarder l'ensemble de ces bases d'un seul coup d'un seul ?

    D'avance merci !


    Cordialement,



    PhilJ

    PS : j'ignore si c'est le bon endroit pour poser cette question, qui n'est pas spécifique à Joomla => elle peut donc être déplacée si besoin est.
    Dernière édition par PhilJ à 30/06/2012, 03h24
    Créateur de sites internet — Agence web indépendante http://www.e-33.fr | http://www.quali-site.fr (région de Bordeaux)

  • #2
    Re : Sauvegarder plusieurs bases de données d'un seul coup d'un seul

    Bonjour,

    Ne sachant pas si la sauvegarde doit être réalisée sous un environnement Windows ou Unix (Linux/macOS), le shell scripting varaint entre ces environnements, il y a en gros 2 variantes.

    1. Pour Windows, un classique
    Code:
    @echo off
    echo Starting Backup of Mysql Database on server
    
    For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set dt=%%c-%%a-%%b)
    For /f "tokens=1-4 delims=:." %%a in ('echo %time%') do (set tm=%%a%%b%%c%%d)
    set bkupfilename=%1 %dt% %tm%.sql
    echo Backing up to file: %bkupfilename%
    mysqldump  --routines -u <username> -p<password>  <database name> > D:\mysql_daily_backups\"<databasename>%bkupfilename%"
    
    
    echo on
    echo delete old backup
    forfiles /p D:\mysql_daily_backups /s /m *.* /d -3 /c "cmd /c del @file : date >= 3days"
    
    echo Backup Complete! Have A Nice Day
    Et pour les autres (Linux, MacOS, FreeBSD, AIX, Solaris etc, ce code est utilisé en général sur la quasi totalité des serveurs de la planète depuis des années:
    Code:
    #!/bin/bash
    # Shell script to backup MySql database
    # To backup Nysql databases file to /var/backup dir and later pick up by your
    # script.
    
    
    MyUSER="SET-MYSQL-USER-NAME"	# USERNAME
    MyPASS="SET-PASSWORD"       	# PASSWORD
    MyHOST="localhost"          	# Hostname
    
    
    # Linux bin paths, change this if it can not be autodetected via which command
    MYSQL="$(which mysql)"
    MYSQLDUMP="$(which mysqldump)"
    CHOWN="$(which chown)"
    CHMOD="$(which chmod)"
    GZIP="$(which gzip)"
    
    
    # Backup Dest directory, change this if you have someother location
    DEST="/var/backup"
    
    
    # Main directory where backup will be stored
    MBD="$DEST/mysql"
    
    
    # Get hostname
    HOST="$(hostname)"
    
    
    # Get data in dd-mm-yyyy format
    NOW="$(date +"%d-%m-%Y")"
    
    
    # File to store current backup file
    FILE=""
    # Store list of databases
    DBS=""
    
    
    # DO NOT BACKUP these databases
    IGGY="test"
    
    
    [ ! -d $MBD ] && mkdir -p $MBD || :
    
    
    # Only root can access it!
    $CHOWN 0.0 -R $DEST
    $CHMOD 0600 $DEST
    
    
    # Get all database list first
    DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')"
    
    
    for db in $DBS
    do
        skipdb=-1
        if [ "$IGGY" != "" ];
        then
    	for i in $IGGY
    	do
    	    [ "$db" == "$i" ] && skipdb=1 || :
    	done
        fi
    
    
        if [ "$skipdb" == "-1" ] ; then
    	FILE="$MBD/$db.$HOST.$NOW.gz"
    	# do all inone job in pipe,
    	# connect to mysql using mysqldump for select mysql database
    	# and pipe it out to gz file in backup dir :)
            $MYSQLDUMP -u $MyUSER -h $MyHOST -p$MyPASS $db | $GZIP -9 > $FILE
        fi
    done
    Si ça peut aider
    Pas de demande de support par MP.
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

    Commentaire


    • #3
      Re : Sauvegarder plusieurs bases de données d'un seul coup d'un seul

      Bonjour,


      Merci pour ces particules chez dépioteur . Je vais tester la particule Windows en local et je fais remonter le résultat.

      Juste quelques questions de plus avant de procéder :

      1. Il s'agit bien d'un script PHP : oui ?
      2. Apparemment, il n'est pas nécessaire d'arrêter MySQL (mysqldump...) avant de le lancer : j'ai bon ?
      3. Est-il capable de déterminer combien de bases de données doivent être sauvegardées tout seul comme un grand (et d'un seul coup d'un seul), ou bien faut-il lui indiquer explicitement les informations utiles sur autant de lignes (...<username> -p<password> <databasename>...) qu'il y a de bases différentes à traiter ?


      D'avance merci,



      PhilJ
      Dernière édition par PhilJ à 30/06/2012, 21h16
      Créateur de sites internet — Agence web indépendante http://www.e-33.fr | http://www.quali-site.fr (région de Bordeaux)

      Commentaire


      • #4
        Re : Sauvegarder plusieurs bases de données d'un seul coup d'un seul

        Envoyé par PhilJ Voir le message
        Il s'agit bien d'un script PHP : oui ?
        Non, il ne s'agit pas de script PHP, mais de scripts système (batch windows, shell script cron Unix).

        Envoyé par PhilJ Voir le message
        Apparemment, il n'est pas nécessaire d'arrêter MySQL (mysqldump...) avant de le lancer : j'ai bon ?
        mysqldump est en effet un utilitaire mysql permettant le dump d'une base sans arrêter le serveur.

        Envoyé par PhilJ Voir le message
        Est-il capable de déterminer combien de bases de données doivent être sauvegardées tout seul comme un grand (et d'un seul coup d'un seul), ou bien faut-il lui indiquer explicitement les informations utiles sur autant de lignes (...<username> -p<password> <databasename>...) qu'il y a de bases différentes à traiter ?
        Si, comme sur les serveurs importants, on utilise le user root mysql (ou son remplaçant, puisque souvent on supprime carrément root par sécurité), la version Unix utilise
        Code:
        DBS="$($MYSQL -u $MyUSER -h $MyHOST -p$MyPASS -Bse 'show databases')"
        pour récupérer la liste des bases à sauvegarder, mais cette commende ne fonctionnant pas sous Windows, il faudrait créer un équivalent batch.
        N'utilisant pas Windows, je n'ai pas cherché à créer de boucles batch pour ce système, mais si un connaisseur Windows étend le script pour lui donner la même généricité que la version Unix, il faut le publier ici, ça servira à d'autres
        Pas de demande de support par MP.
        S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

        Commentaire


        • #5
          Re : Sauvegarder plusieurs bases de données d'un seul coup d'un seul

          Bonjour,


          Envoyé par jisse03 Voir le message
          [...] il ne s'agit pas de script PHP, mais de scripts système (batch windows, shell script cron Unix).
          ...J'avais des doutes, raison de ma question. Donc .BAT.


          mysqldump est en effet un utilitaire mysql permettant le dump d'une base sans arrêter le serveur.
          ...OK.


          [...] si un connaisseur Windows étend le script pour lui donner la même généricité* que la version Unix, il faut le publier ici, ça servira à d'autres
          *En l'occurrence : capacité à détecter le nombre de BDD à sauvegarder tout seul comme un grand.

          ...Oui, ce serait vraiment utile pour nous autres misérables windowsiens !

          En attendant une hypothétique solution batch pour Windows, j'imagine que, dans le batch, il faut renseigner autant de lignes "..<username> -p<password> <databasename>..." qu'il y a de bases à sauvegarder. J'ai bon ?


          Encore merci,




          PhilJ
          Dernière édition par PhilJ à 01/07/2012, 14h56
          Créateur de sites internet — Agence web indépendante http://www.e-33.fr | http://www.quali-site.fr (région de Bordeaux)

          Commentaire


          • #6
            Re : Sauvegarder plusieurs bases de données d'un seul coup d'un seul

            Envoyé par PhilJ Voir le message
            *En l'occurrence : capacité à détecter le nombre de BDD à sauvegarder tout seul comme un grand.

            ...Oui, ce serait vraiment utile pour nous autres misérables windowsiens !

            En attendant un hypothétique solution Windows, j'imagine qu'il faut renseigner autant de lignes "..<username> -p<password> <databasename>..." qu'il y a de bases. J'ai bon ?
            Oui, exactement.

            N'ayant pas de windows Server sous la main, je ne peux réaliser l'équivalent exact du script Unix (qui lui fonctionne sur mes serveur en tant que cron job, toutes les nuits).

            Si une âme charitable avec un Windows serveur pouvait étendre la version Windows, il rendrait service
            Pas de demande de support par MP.
            S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

            Commentaire


            • #7
              Re : Sauvegarder plusieurs bases de données d'un seul coup d'un seul

              Envoyé par jisse03 Voir le message
              Si une âme charitable avec un Windows serveur pouvait étendre la version Windows, il rendrait service

              ...Ouiiiii !! Vu le temps passé à faire ces (maudites) sauvegardes, je promets... ahem... disons : un carambar / mois à qui saurait fournir ici une solution Windows adaptée .


              D'avance merci,




              PhilJ
              Créateur de sites internet — Agence web indépendante http://www.e-33.fr | http://www.quali-site.fr (région de Bordeaux)

              Commentaire


              • #8
                Re : Sauvegarder plusieurs bases de données d'un seul coup d'un seul

                La solution Unix, on l'a depuis longtemps, vu que plus de 70% des serveurs internet sont sous Linux
                Pas de demande de support par MP.
                S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                Commentaire


                • #9
                  Re : Sauvegarder plusieurs bases de données d'un seul coup d'un seul

                  Envoyé par jisse03 Voir le message
                  La solution Unix, on l'a depuis longtemps, vu que plus de 70% des serveurs internet sont sous Linux

                  ...Oui, et j'ai installé une solution 'fingers-in-the-nose' sur les sites distants qui me satisfait pleinement. Mon problème concerne exclusivement mes BDD en local, qui sont sont sous Windows (ben oui, j'avoue — miiiiiiiiiiiisère ! — je travaille avec « ça » avec mon PC).


                  Cordialement,




                  PhilJ
                  Créateur de sites internet — Agence web indépendante http://www.e-33.fr | http://www.quali-site.fr (région de Bordeaux)

                  Commentaire


                  • #10
                    Re : Sauvegarder plusieurs bases de données d'un seul coup d'un seul

                    Bonjour,

                    En addition, voila une chose à lire :
                    Création, personnalisation, synchronisation de gestion commerciale selige.fr:http://www.selige.fr
                    "Avant de critiquer un produit gratuit, pense à ce que tu aurais pu dire si tu l'avais payé"

                    Commentaire


                    • #11
                      Re : Sauvegarder plusieurs bases de données d'un seul coup d'un seul

                      Sous Windows, n'importe quel outil de sauvegarde peut sauvegarder automatiquement le dossier complet des bases, sans faire un dump.
                      Tu as aussi, que ce soit en ligne ou en local, LazyDbBackup qui peut sauvegarder les bases sans envoyer le fichier par mail, mais le placer dans un répertoire défini (avec gestion complémentaire par LDBchecker).
                      "Patience et longueur de temps font plus que force ni que rage..." (La Fontaine : Le Lion et le Rat) - "Il n'y a pas de problèmes; il n'y a que des solutions" (André Gide).
                      MoovJla et LazyDbBackup sur www.joomxtensions.com - FaQ sur www.fontanil.info - Site pro : www.robertg-conseil.fr chez PHPNET, sites perso chez PlanetHoster + sites gérés chez PHPNET, PlanetHoster, Ionos et OVH

                      Commentaire


                      • #12
                        Re : Sauvegarder plusieurs bases de données d'un seul coup d'un seul

                        Envoyé par selige Voir le message
                        Bonjour,

                        En addition, voila une chose à lire :
                        http://www.redolivedesign.com/utah-w...p-for-windows/
                        Ben voilà une piste
                        Pas de demande de support par MP.
                        S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                        Commentaire


                        • #13
                          Re : Sauvegarder plusieurs bases de données d'un seul coup d'un seul

                          Envoyé par RobertG Voir le message
                          Sous Windows, n'importe quel outil de sauvegarde peut sauvegarder automatiquement le dossier complet des bases, sans faire un dump.
                          Toute copie binaire de l'ensemble des bases IMPLIQUE OBLIGATOIREMENT que MySQL soit stoppé, sous peine de perte d'intégrité des données, et ce quel que soit le système d'exploitation, sauf à utiliser mysqldump ou mysqlhotcopy.

                          Envoyé par RobertG Voir le message
                          Tu as aussi, que ce soit en ligne ou en local, LazyDbBackup qui peut sauvegarder les bases sans envoyer le fichier par mail, mais le placer dans un répertoire défini (avec gestion complémentaire par LDBchecker).
                          Lui ne réponds pas à la problématique de sauver n bases de données, probablement pour certaines sans aucun lien avec Joomla!
                          Pas de demande de support par MP.
                          S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                          Commentaire


                          • #14
                            Re : Sauvegarder plusieurs bases de données d'un seul coup d'un seul

                            Envoyé par PhilJ Voir le message
                            ...Oui, et j'ai installé une solution 'fingers-in-the-nose' sur les sites distants qui me satisfait pleinement. Mon problème concerne exclusivement mes BDD en local, qui sont sont sous Windows (ben oui, j'avoue — miiiiiiiiiiiisère ! — je travaille avec « ça » avec mon PC).
                            Solution absolue, installer VirtualBox ou VMWare et une machine virtuelle linux pour le développement local
                            Pas de demande de support par MP.
                            S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                            Commentaire


                            • #15
                              Re : Sauvegarder plusieurs bases de données d'un seul coup d'un seul

                              Bonjour et merci pour vos conseils.



                              Mes tests sont positifs EN LOCAL pour un nombre quelconque de bases de données.

                              Vous trouverez ci-dessous un code batch commenté (...« pour les nuls » ) pour Windows pour sauvegarder toutes vos bases de données locales. Inspiré de vos suggestions, il fonctionne correctement ...sauf quand mysqldump.exe fait des siennes, ce qui arrive parfois (et pour des raisons obscures ).

                              Mais avant, quelques dispositions à prendre :

                              1. Créer un dossier dans lequel viendront se loger les dumps .sql.
                              2. Dans ce dossier, créer un sous-dossier, nommé par exemple zip, dans lequel on placera un archiveur || compresseur (voir plus loin).
                              3. Dans ce sous-dossier zip, créer un sous-dossier qui contiendra les fichiers zip issus de la compression des dumps .sql. Nommez-le par exemple backupfiles.



                              Détails point par point, avec XAMPP pour Windows installé sur c:\xampp (et mysqldump présent à l'adresse c:\xampp\mysql\bin\mysqldump.exe) :

                              1. [*=1]Dans le code qui suit, l'adresse du premier dossier évoqué est : c:\xampp\mysql\backup\test.
                                Cette adresse peut bien sûr être différente, par exemple : c:\backup (ou d:\backup, donc sur un autre disque que le disque système).
                                NB : ce dossier accueillera également un fichier dumperrors.txt qui contiendra les éventuelles erreurs pouvant survenir lors de l'exécution du batch.

                                [*=1]Toujours dans l'exemple de code ci-dessous, le dossier zip est : c:\xampp\mysql\backup\test\zip. Ce dossier contiendra un compresseur en version ligne de commande. Ici, j'ai installé 7za.exe (= 7zip, avec un a pour [stand]alone). Il est possible de le télécharger ici : http://www.7-zip.org/download.html. C'est le seul fichier ZIP de la série sur cette page, et il est présenté comme la « 7-Zip Command Line Version ».
                                Tout ce qu'il y a à faire est de décompacter ce ZIP, et de placer une copie de ce petit programme tout seul dans le dossier que l'on vient de créer : c:\xampp\mysql\backup\test\zip.

                                [*=1]Toujours dans ce code, le dossier qui recevra les fichiers zip compressés est : c:\xampp\mysql\backup\test\zip\backupfiles.



                              Voici le code, avec les noms de dossiers que vous pouvez changer à votré gré en orange :

                              Code:
                              :: On détermine le nom des fichiers dumps avec horodatage :
                              
                              set year=%DATE:~6,4%
                              set day=%DATE:~0,2%
                              set mnt=%DATE:~3,2%
                              set hr=%TIME:~0,2%
                              set min=%TIME:~3,2%
                              
                              IF %day% LSS 10 SET day=0%day:~1,1%
                              IF %mnt% LSS 10 SET mnt=0%mnt:~1,1%
                              IF %hr% LSS 10 SET hr=0%hr:~1,1%
                              IF %min% LSS 10 SET min=0%min:~1,1%
                              
                              :: Le résultat au format aa-mm-jj--heures-minutes :
                              set backupdate=%year%-%mnt%-%day%--%hr%-%min%
                              
                               
                              
                              :: Le nom de l'utilisateur MySQl DB (on est en local => root) :
                              set dbuser=root
                              
                              :: Le mot de passe utilisateur MySQl DB (on est en local => pas de mot de passe => chaîne vide) :
                              set dbpass=
                              
                              :: Aller sur le dossier MySQL data afin de collecter les noms des sous-dossiers.
                              pushd "c:\xampp\mysql\data"
                              
                              :: Parcourir les sous-dossiers un à un pour collecter les bases de données grâce à mysqldump.exe
                              :: et les stocker au format .sql dans le répertoire de votre choix (ici : [COLOR=#ff8c00]c:\xampp\mysql\backup\test\[/COLOR]).
                              :: NB : les erreurs éventuelles seront listées dans un fichier dumperrors.txt.
                              
                              @echo.
                              @echo ----- C'est parti...
                              @echo.
                              @echo.
                              @echo.
                              @echo PASSE 1 : collecte des .sql ------
                              @echo.
                              
                              FOR /D %%F IN (*) DO (
                              
                              "c:\xampp\mysql\bin\mysqldump.exe" --user=%dbuser% --password=%dbpass% --databases --log-error="[COLOR=#ff8c00]c:\xampp\mysql\backup\test\[/COLOR]dumperrors.txt" %%F > "[COLOR=#ff8c00]c:\xampp\mysql\backup\test\[/COLOR]%%F.%backupdate%.sql"
                              
                              )
                              
                              
                              :: Compresser les .sql  en un seul .zip (ici dans [COLOR=#ff8c00]c:\xampp\mysql\backup\test\zip\backupfiles\[/COLOR]) :
                              
                              @echo.
                              @echo.
                              @echo.
                              @echo PASSE 2 : compression des .sql ------
                              @echo.
                              
                              "[COLOR=#ff8c00]c:\xampp\mysql\backup\test\zip\[/COLOR]7za.exe" a -tzip "[COLOR=#ff8c00]c:\xampp\mysql\backup\test\zip\backupfiles\[/COLOR]FullBackup.%backupdate%.zip" "[COLOR=#ff8c00]c:\xampp\mysql\backup\test\[/COLOR]*.sql"
                              
                              @echo.
                              @echo ----- C'est fini !
                              cd\

                              Copiez-collez ce code dans un éditeur de texte neutre ('Bloc Notes' ou équivalent). Nommez-le et enregistrez-le où vous voulez. Par exemple nommez-le mysqlbackup.bat, et enregistrez-le à la racine du disque dur.

                              Pour exécuter ce code, il faut se placer dans une console DOS (sous XP : Démarrer > Programmes > Accessoires > Invite de commandes), puis se placer sur le dossier dans lequel se trouve le batch. Si votre mysqlbackup.bat est à la racine du disque dur, il faudra peut-être remonter jusque là en utilisant la commande : cd\ (cd aussitôt suivi d'un antislash).


                              Il est ensuite possible de prévoir que le batch fasse le ménage afin que les fichiers (.zip et / ou .spl) ne s'accumulent pas.

                              Le code suggéré par le lien transmis par Jisse à cet effet (but with a french translation !) :

                              Code:
                              :: Suppression des .sql :
                              
                              @echo.
                              @echo Supprimer les fichiers .sql :
                              @echo.
                                
                              del "[COLOR=#ff8c00]c:\xampp\mysql\backup\test\[/COLOR]*.sql"
                              
                              @echo.
                              @echo OK --------
                              @echo.
                              
                              :: Reste à faire le ménage dans le dossier des .zip :
                              
                              @echo.
                              @echo Supprimer les vieux fichiers .zip (plus de 30 jours) :
                              @echo.
                              
                              Forfiles -p [COLOR=#ff8c00]c:\xampp\mysql\backup\test\zip\backupfiles\[/COLOR] -s -m *.* -d -30 -c "cmd /c del /q @path"
                              
                              @echo.
                              @echo.
                              @echo.
                              @echo Le ménage est fait ! --------
                              @echo.
                              NB : Il se peut que la commande Forfiles ci-dessus ne soit pas reconnue par votre système, tout simplement parce que le petit fichier forfiles.exe est absent. => Il suffit de le télécharger chez l'aMicrosoft, ici : ftp://ftp.microsoft.com/ResKit/y2kfix/x86/, et de l'enregistrer dans c:\WINDOWS\system32. Si vous souhaitez comprendre et / ou modifier la syntaxe, vous pouvez consulter la page Microsoft dédiée.


                              Et aussi, en prime : il est possible d'envoyer votre sauvegarde en dehors de votre disque dur local, sur un espace web distant par ftp. Vous trouverez le nécessaire en toute fin du code indiqué par Jisse.



                              Cordialement,




                              PhilJ


                              Dernière édition par PhilJ à 02/07/2012, 18h47
                              Créateur de sites internet — Agence web indépendante http://www.e-33.fr | http://www.quali-site.fr (région de Bordeaux)

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X