IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Sauvegarde automatique de la base de données


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Par défaut Sauvegarde automatique de la base de données
    Bonjour,

    Je possède un site internet avec Cpanel et je souhaite mettre en place une sauvegarde automatique de la base de données qui se lance via une tâche cron.

    Je sais qu'on peut procéder ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0 0 * * * /usr/bin/mysqldump -u db_username -p db_password db_name > /backup/path/backup.sql
    Sauf que je souhaite si possible passer par un fichier .sh lancé par la tâche cron et qui créé cette sauvegarde.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/bash
    STAMP=`date +%Y-%m-%d_%H-%M-%S`
    SOURCE=/home/monsite/public_html
    DEST=/home/monsite/bck
     
    /usr/bin/mysqldump -u utilisateur -p'motdepasse' basededonnes > $SOURCE/basededonnes$STAMP.sql
    env GZIP=-9 tar czf $DEST/basededonnes$STAMP.tar.gz $SOURCE/
    #sql dump file is packaged in the tar.gz and then removed.
    rm $SOURCE/basededonnes$STAMP.sql
    Mais j'ai alors reçu cet email à chaque fois que la tâche cron est lancée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    mysqldump: Got error: 1044: "Access denied for user 'utilisateur'@'localhost' to database 'basededonnes'" when using LOCK TABLES
    tar: Removing leading `/' from member names
    tar (child): /home/monsite/bck/basededonnes-02-21_20-24-01.tar.gz: Cannot open: No such file or directory
    tar (child): Error is not recoverable: exiting now

    J'ai ajouté rajouté --skip-lock-tables dans la ligne débutant par /usr/bin/mysqldump

    Mais ça ne fonctionne toujours pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tar: Removing leading `/' from member names
    tar (child): /home/monsite/bck/basededonnees2023-02-21_20-44-02.tar.gz: Cannot open: No such file or directory
    tar (child): Error is not recoverable: exiting now
    Je ne souhaite pas que la tâche soit bloquée lors de la sauvegarde sinon il y aura des erreurs si une requête est lancée au même moment.

    Même si je donne tous les privilège à l'utilisateur MySql et que je supprime le --skip-lock-tables ça ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tar: Removing leading `/' from member names
    tar (child): /home/monutilisateur/bck/basededonnees2023-02-21_20-49-02.tar.gz: Cannot open: No such file or directory
    tar (child): Error is not recoverable: exiting now
    Sauriez vous où est mon erreur ?

    Actuellement, dans CPanel la tâche cron se lance simplement avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /home/monutilisateur/public_html/bck/script.sh
    Merci d'avance

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tar (child): /home/monsite/bck/basededonnes-02-21_20-24-01.tar.gz: Cannot open: No such file or directory
    un (ou plusieurs) des éléments du chemin n'existerait pas.
    cf. help test
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Ce serait peut-être plus un souci MySQL que bash...

    Mais déjà pour essayer de trouver l'erreur il serait peut-être utile d'exécuter le script bash manuellement voir s'il fait les choses bien avant de le mettre dans un cron...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2011
    Messages : 273
    Par défaut
    Le problème semble lié à l'utilisation de
    malgré le fait que ce soit indiqué ainsi dans l'exemple:
    https://github.com/zmrfzn/Cpanel-Bac...anel_Backup.sh

    En me contentant d'indiquer ça fonctionne. Cela explique que le fichier .sql n'était pas créé, ce qui a entraîné l'impossibilité de le compresser.

    Il ne reste plus qu'à le faire pour chaque base de données sans oublier de traiter les anciennes sauvegardes pour ne pas saturer le disque.

    Je vous remercie, c'est toujours utile d'échanger quelques mots avec une personne n'ayant jamais vu le code quand on cherche sans trouver

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    l'erreur affichée par tar porte sur la destination de la compression, pas sur la source à compresser.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 298
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 298
    Par défaut
    Le problème vient du fait que ton utilisateur MySQL n'a pas le droit de poser des locks. L'export ne se faisant pas, tar affiche une erreur, son fichier source n'existant pas.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par encoremoi21258 Voir le message
    En me contentant d'indiquer ça fonctionne. Cela explique que le fichier .sql n'était pas créé, ce qui a entraîné l'impossibilité de le compresser.
    Ben c'est vrai que quand on crée un script de ce genre style "je crée un fichier; je compresse le fichier dans un tar; j'efface le fichier d'origine" il serait plus prudent de rajouter des points de contrôle style "je crée un fichier; je vérifie que le fichier a été correctement créé; je compresse le fichier dans un tar; je vérifie si la compression s'est bien effectuée; j'efface le fichier d'origine".

    Je te conseillerais aussi de remplacer env GZIP=-9 tar czf $DEST/basededonnes$STAMP.tar.gz $SOURCE/ par tar cf - "$SOURCE" |gzip -c9 >"$DEST/basededonnes$STAMP.tar.gz" pour 2 raisons
    • je n'aime pas les commandes qui font papa+maman alors que la commande "maman" existe déjà. Au mieux le "papa+maman" fera pareil que "papa" d'abord puis "maman" après et au pire elle fera moins bien. La commande "tar" son but est d'archiver. La compression a été rajoutée après et (de mon point de vue) pour rien vu que gzip existait déjà et faisait parfaitement le job.
    • c'est plus souple en utilisation. Hier c'était gzip, aujourd'hui ça peut être "xz" (plus puissant) => tar cf - "$SOURCE" |xz -9 >"$DEST/basededonnes$STAMP.tar.xz" ; et demain ça peut être encore autre chose.

    Et les guillemets c'est qu'on encadre toujours une string de double quotes. Cela permet au shell de gérer correctement les espaces éventuels de la string.

    Citation Envoyé par encoremoi21258 Voir le message
    sans oublier de traiter les anciennes sauvegardes pour ne pas saturer le disque.
    Perso j'ai créé différents type de sauvegarde
    • la sauvegarde annuelle => le fichier se nomme "bdd_yyyy.sql.xz". Permet de faire plusieurs sauvegardes dans la même année sur le même fichier
    • la sauvegarde mensuelle=> le fichier se nomme "bdd_yyyy_mm.sql.xz". Permet de faire plusieurs sauvegardes dans le même mois sur le même fichier
    • la sauvegarde hebdomadaire => le fichier se nomme "bdd_yyyy_no_semaine.sql.xz". Permet de faire plusieurs sauvegardes dans la même semaine sur le même fichier
    • la sauvegarde journalière => le fichier se nomme "bdd_yyyy_mm_jj.sql.xz". Permet de faire plusieurs sauvegardes dans la même journée sur le même fichier
    • la sauvegarde horaire => le fichier se nomme "bdd_yyyy_mm_jj_hhH.sql.xz". Permet de faire plusieurs sauvegardes dans la même heure sur le même fichier


    Ainsi l'utilisateur peut affiner au choix l'espace disque, ou la granularité de l'historique attendu. Sinon tu peux utiliser l'outil standard "logrotate"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL-8.0] Sauvegarde automatique de la base de données
    Par benamecanique dans le forum Administration
    Réponses: 1
    Dernier message: 23/05/2019, 15h15
  2. Sauvegarde automatique d'une base de données Interbase
    Par aimer_Delphi dans le forum Bases de données
    Réponses: 3
    Dernier message: 21/08/2015, 11h20
  3. Sauvegarde automatique d'une base de données avec visual basic 6.0
    Par moirs555 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 22/10/2011, 23h03
  4. Réponses: 1
    Dernier message: 30/01/2007, 14h07
  5. [Conception] mise à jour automatique d'une base de donné distante
    Par bipbip2006 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/06/2006, 16h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo