unPixel Posté(e) le 8 octobre 2018 Partager Posté(e) le 8 octobre 2018 (modifié) Bonjour à tous, Je suis en train d'élaborer un script "mysqldump". J'ai un soucis au niveau du fichier log. En faite, je demande à mon script de sauvegarder dans un dossier daté un fichier .gzip de toutes les bdd mais aussi une archive pour chaque bdd existantes. Au niveau du log, j'arrive à obtenir un résultat pour la grosse archive mais quand il s'agit de faire le log pour les autres bdd à l'unité, ça se complique. Le log m'indique la réussite de sauvegarde de la dernière bdd du dossier mais pas des autres 🙄 Merci par avance pour votre aide. Le script qui concerne la partie log : # Récupération de la liste des bases de données existantes. databases=`$MYSQL -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "($SKIPDATABASES)"` # Sauvegarde des bases de données existantes en .sql dans des archives .gzip dans le dossier créé for db in $databases; do echo $db $MYSQLDUMP --force --opt -h$MYSQL_HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD --skip-lock-tables --events --databases $db | $GZIP --stdout --best > "$BACKUP_DIR/$DATE/$db.sql.gz" done # Sauvegarde des bases de données existantes dans un fichier .sql et dans une seule archive .gzip dans le dossier créé for db in $databases; do echo $db $MYSQLDUMP --force --opt -h$MYSQL_HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD --all-databases | $GZIP --stdout --best > "$BACKUP_DIR/$DATE/bdd_complete.sql.gz" done # Écrire dans le fichier log echo "Opération terminée" >> $LOGFILE echo "Sauvegarde réussie de 'bdd_complete.sql.gz' dans le dossier '$BACKUP_DIR/$DATE'" >> $LOGFILE echo "Sauvegarde réussie de '$db.sql.gz' dans le dossier '$BACKUP_DIR/$DATE'" >> $LOGFILE Et le résultat dans le fichier log : ---------------------- 08/10/2018 à 22:35:25 ---------------------- Opération terminée Sauvegarde réussie de 'bdd_complete.sql.gz' dans le dossier '/xxxxxx/xxxxx/sql/08.10.2018_2235' Sauvegarde réussie de 'phpmyadmin.sql.gz' dans le dossier '/xxxxxx/xxxxx/sql/08.10.2018_2235' Sauf qu'entre les deux, il manque quelques lignes 😤 Modifié le 8 octobre 2018 par InfoYANN 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Einsteinium Posté(e) le 8 octobre 2018 Partager Posté(e) le 8 octobre 2018 Bah c’est normal... faut l’inclure dans ta boucle, sinon vue que là tu le mets en fin de script... il reprend que la dernière valeur 😉 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 8 octobre 2018 Auteur Partager Posté(e) le 8 octobre 2018 Ah. Et tu saurais comment je dois faire stp parce que là, je vois pas de quoi ça parle... Je vais quand même faire une recherche sur la toile au sujet de cette fameuse boucle. Merci 😉 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Einsteinium Posté(e) le 8 octobre 2018 Partager Posté(e) le 8 octobre 2018 For db.... done Ce sont elle tes boucles, donc ton écho opération terminé tu le vire, le second écho tu le mets dans le seconde boucle avant le done et le troisième dans la première, avant le done. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 8 octobre 2018 Auteur Partager Posté(e) le 8 octobre 2018 Ok merci du conseil, je regarderai ça demain 😉 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Einsteinium Posté(e) le 8 octobre 2018 Partager Posté(e) le 8 octobre 2018 # Sauvegarde des bases de données existantes en .sql dans des archives .gzip dans le dossier créé for db in $databases; do echo $db $MYSQLDUMP --force --opt -h$MYSQL_HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD --skip-lock-tables --events --databases $db | $GZIP --stdout --best > "$BACKUP_DIR/$DATE/$db.sql.gz" echo "Sauvegarde réussie de '$db.sql.gz' dans le dossier '$BACKUP_DIR/$DATE'" >> $LOGFILE done # Sauvegarde des bases de données existantes dans un fichier .sql et dans une seule archive .gzip dans le dossier créé for db in $databases; do echo $db $MYSQLDUMP --force --opt -h$MYSQL_HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD --all-databases | $GZIP --stdout --best > "$BACKUP_DIR/$DATE/bdd_complete.sql.gz" echo "Sauvegarde réussie de 'bdd_complete.sql.gz' dans le dossier '$BACKUP_DIR/$DATE'" >> $LOGFILE done Désolé pour la mise en forme, mais sur iPhone on a pas l’éditeur complet, sa te montre néanmoins ce qu’il faut faire 😉 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 8 octobre 2018 Auteur Partager Posté(e) le 8 octobre 2018 Quelle idée aussi d'être sur un iPhone pour coder 😂 Merci beaucoup Einsteinium 😉 Je regarde ça demain. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Einsteinium Posté(e) le 8 octobre 2018 Partager Posté(e) le 8 octobre 2018 Nan c’est pas la faute de l’iphone, mais le forum version mobile qui castre quelques fonctions 😁 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 9 octobre 2018 Auteur Partager Posté(e) le 9 octobre 2018 J'ai testé vite fait ta modification et voilà ce qui va et ce qui ne va pas. Le fichier LOG se créer bien avec le contenu des bdd manquantes sauf qu'il n'est plus lisible sur FileStation via l'éditeur de texte. Quand on télécharge ce fichier log, on constate qu'il contient le signe _ à la fin de l'extension sauf que ce signe n'apparait pas sur FileStation. La bdd complète ne se sauvegarde plus et un second fichier log vide se créer juste avec la date et l'heure. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Einsteinium Posté(e) le 9 octobre 2018 Partager Posté(e) le 9 octobre 2018 Ta modifier directement ton fichier ? Ta pas copier les lignes du forum ? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 9 octobre 2018 Auteur Partager Posté(e) le 9 octobre 2018 (modifié) Si j'ai copié et remit en forme. Pourquoi ? J'ai essayé ça en attendant et ça fonctionne mais pas complètement dans le log ! Je précise que c'est sur mon script de base et pas ta modif. # Écrire dans le fichier log for db in $databases; do echo $db echo "Sauvegarde réussie de 'bdd_complete.sql.gz' dans le dossier '$BACKUP_DIR/$DATE'" >> $LOGFILE echo "Sauvegarde réussie de '$db.sql.gz' dans le dossier '$BACKUP_DIR/$DATE'" >> $LOGFILE done Le résultat : Sauvegarde réussie de 'bdd_complete.sql.gz' dans le dossier '/xxxxxxx/xxxx/sql/09.10.2018_1105' Sauvegarde réussie de '1111111.sql.gz' dans le dossier '/xxxxxxx/xxxx/sql/09.10.2018_1105' Sauvegarde réussie de 'bdd_complete.sql.gz' dans le dossier '/xxxxxxxx/xxxxx/sql/09.10.2018_1105' Sauvegarde réussie de '22222222.sql.gz' dans le dossier '/xxxxxxxx/xxxxx/sql/09.10.2018_1105' Sauvegarde réussie de 'bdd_complete.sql.gz' dans le dossier '/xxxxxxxx/xxxxx/sql/09.10.2018_1105' Sauvegarde réussie de '333333.sql.gz' dans le dossier '/xxxxxx/xxxxx/sql/09.10.2018_1105' Sauvegarde réussie de 'bdd_complete.sql.gz' dans le dossier '/xxxxxxxx/xxxxx/sql/09.10.2018_1105' Sauvegarde réussie de '444444444.sql.gz' dans le dossier '/xxxxxxxx/xxxxx/sql/09.10.2018_1105' Sauvegarde réussie de 'bdd_complete.sql.gz' dans le dossier '/xxxxxxxx/xxxxx/sql/09.10.2018_1105' Sauvegarde réussie de '555555.sql.gz' dans le dossier '/xxxxxxx/xxxxx/sql/09.10.2018_1105' Sauvegarde réussie de 'bdd_complete.sql.gz' dans le dossier '/xxxxxxx/xxxxx/sql/09.10.2018_1105' Sauvegarde réussie de '66666666.sql.gz' dans le dossier '/xxxxxx/xxxxx/sql/09.10.2018_1105' Modifié le 9 octobre 2018 par InfoYANN 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lordtaki Posté(e) le 9 octobre 2018 Partager Posté(e) le 9 octobre 2018 (modifié) # Récupération de la liste des bases de données existantes. databases=`$MYSQL -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "($SKIPDATABASES)"` # Sauvegarde des bases de données existantes en .sql dans des archives .gzip dans le dossier créé for db in $databases do echo $db $MYSQLDUMP --force --opt -h$MYSQL_HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD --skip-lock-tables --events --databases $db | $GZIP --stdout --best > "$BACKUP_DIR/$DATE/$db.sql.gz" echo "Sauvegarde réussie de '$db.sql.gz' dans le dossier '$BACKUP_DIR/$DATE'" >> $LOGFILE done # Sauvegarde des bases de données existantes dans un fichier .sql et dans une seule archive .gzip dans le dossier créé $MYSQLDUMP --force --opt -h$MYSQL_HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD --all-databases | $GZIP --stdout --best > "$BACKUP_DIR/$DATE/bdd_complete.sql.gz" echo "Sauvegarde réussie de 'bdd_complete.sql.gz' dans le dossier '$BACKUP_DIR/$DATE'" >> $LOGFILE # Écrire dans le fichier log echo "Opération terminée" >> $LOGFILE Modifié le 9 octobre 2018 par lordtaki 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 9 octobre 2018 Auteur Partager Posté(e) le 9 octobre 2018 Ta modif fonctionne parfaitement lordtaki 😉 Je vais analyser les modifs que tu as fait et surtout essayer de les comprendre. Mais si tu as deux minutes pour me donner une petite explication, ça serait avec joie. Merci encore à vous deux pour l'aide apportée. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lordtaki Posté(e) le 9 octobre 2018 Partager Posté(e) le 9 octobre 2018 Le script original : Citation for db in $databases; do echo $db $MYSQLDUMP --force --opt -h$MYSQL_HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD --skip-lock-tables --events --databases $db | $GZIP --stdout --best > "$BACKUP_DIR/$DATE/$db.sql.gz" done => boucle 'for' qui va lancer mysqldump pour chaque valeur de la variable 'databases' (db1, db2, db3) Citation for db in $databases; do echo $db $MYSQLDUMP --force --opt -h$MYSQL_HOST --user=$MYSQL_USER -p$MYSQL_PASSWORD --all-databases | $GZIP --stdout --best > "$BACKUP_DIR/$DATE/bdd_complete.sql.gz" done => boucle 'for' qui va lancer le mysqldump global (all-databases) pour chaque valeur de la variable 'databases' (db1, db2, db3) => premier problème, on lance x fois le dump global alors qu'une fois suffit, cette commande n'a pas besoin d'être dans une boucle 'for' Citation echo "Opération terminée" >> $LOGFILE echo "Sauvegarde réussie de 'bdd_complete.sql.gz' dans le dossier '$BACKUP_DIR/$DATE'" >> $LOGFILE echo "Sauvegarde réussie de '$db.sql.gz' dans le dossier '$BACKUP_DIR/$DATE'" >> $LOGFILE => exécution séquentielle de 3 'echo', ^db doit être initialisée à la dernière valeur traitée lors de la 2e boucle 'for' Pour corriger: - réintégration du 'echo' avec la variable $db dans la première boucle 'for' (qui traite chaque db) - suppression de la boucle for pour le mysqldump car on doit le lancer une fois 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 9 octobre 2018 Auteur Partager Posté(e) le 9 octobre 2018 Merci beaucoup pour tes précisions 🙂 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Einsteinium Posté(e) le 9 octobre 2018 Partager Posté(e) le 9 octobre 2018 @lordtaki Rhaaa fallait le laissé chercher un peu 🙂 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 9 octobre 2018 Auteur Partager Posté(e) le 9 octobre 2018 On est pas en MP sinon je te répondrais à ma façon 😂 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Einsteinium Posté(e) le 9 octobre 2018 Partager Posté(e) le 9 octobre 2018 🤣 Nan mais là il t’a mâcher le travail, même en te disant que tu fessais une boucle pour rien pour un dump total, il est pas marrant 😩 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 9 octobre 2018 Auteur Partager Posté(e) le 9 octobre 2018 En même temps, c'est pas mon domaine donc j'aurais eu du mal à trouver ce soucis. D'ailleurs, j'en ai un autre maintenant. C'est les anciens dossiers et fichiers qui ne se suppriment pas dans le temps 😞 Si je peux encore abuser de vous deux 🙄 # Nombre de jours avant que les premières sauvegardes soient effacées RETENTION=1 # Suppression des anciennes sauvegardes après X jours find $BACKUP_DIR/* -mtime +$RETENTION -delete 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lordtaki Posté(e) le 10 octobre 2018 Partager Posté(e) le 10 octobre 2018 Pas besoin du * après BACKUP_DIR pour ton find. Par défaut c'est récursif (sauf si on utilise les options max|mindepth). Ensuite, je conseille d'utiliser l'option '-type' (f pour fichier, d pour directory) en conjonction de l'option '-name' ou '-iname' pour être certain de n'effacer que ce qui doit l'être. Enfin, sur mon DS413 '-delete' n'est pas disponible, je dois utiliser "-exec rm {} \;" (les fichiers trouvés par find sont passés en argument à la commande rm). Avant de tester la nouvelle commande find, toujours utiliser '-ls' à la place de la commande qui supprime. Accessoirement, prendre l'habitude de protéger sa variable avec {}. Citation find ${BACKUP_DIR} -type f -name "*.sql.gz" -mtime +${RETENTION} -ls 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 10 octobre 2018 Auteur Partager Posté(e) le 10 octobre 2018 (modifié) Merci pour ton aide 🙂 Mon but étant de supprimer les anciens dossiers datés au moment d'une sauvegarde ou se trouvent les bdd et si j'ai bien compris tes explications, ma commande devrait donc être : find $BACKUP_DIR/ -type d -name "&DATE" -mtime +$RETENTION -exec rm {} \; C'est exact stp ? Sauf que pour tester, je devrais plutôt faire ça : find $BACKUP_DIR/ -type d -name "&DATE" -mtime +$RETENTION ls Je comprend pas le "ls" dans le cas présent. N'est-ce pas une commande qui permet de lister un répertoire en SSH ? Que va-t-elle faire dans cette commande stp. Mes recherches ont été infructueuses sur le sujet. Modifié le 10 octobre 2018 par InfoYANN 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lordtaki Posté(e) le 10 octobre 2018 Partager Posté(e) le 10 octobre 2018 Pour l'option -name, il faut renseigner le nom complet ou une expression régulière qui correspond au nommage du répertoire DATE, pas la valeur de la variable $DATE qui, en plus, est dans ton script la variable du jour (enfin j'imagine). Ensuite, rm ne fonctionnera pas sur un répertoire. rmdir fonctionne mais pour un répertoire vide. Puisque tu as un répertoire par date et des fichiers par date dans le dit répertoire, généralement ce que je conseille est de: supprimer d'abord les fichiers -type f -name "*.sql.gz" -mtime +$RETENTION -exec rm {} \; supprimer ensuite le répertoire avec rmdir (on est certain que si le répertoire est supprimé c'est qu'il est vide) -type d -name "tonpatterndedate" -mtime +$RETENTION -exec rmdir {} \; Sinon bourrin et confiant, tu fais rm -rf sur le répertoire -type d -name "tonpatterndedate" -mtime +$RETENTION -exec rm -rf {} \; 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 10 octobre 2018 Auteur Partager Posté(e) le 10 octobre 2018 (modifié) Je ne suis pas bourrin et pas confiant quand il s'agit d'un script allant supprimer des données 😂 Merci pour tes explications 😉 Si j'ai tout compris, voilà donc les deux lignes dans mon code. Tu confirmes que c'est logiquement bon stp ? # Suppression des fichiers .sql.gz après X jours find $BACKUP_DIR/ -type f -name "*.sql.gz" -mtime +$RETENTION -exec rm {} \; # Suppression des dossiers vides find $BACKUP_DIR/ -type d -name "&DATE" -mtime +$RETENTION -exec rmdir {} \; Modifié le 10 octobre 2018 par InfoYANN 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lordtaki Posté(e) le 10 octobre 2018 Partager Posté(e) le 10 octobre 2018 Oui c'est bon, juste je ne comprends pas : -name "&DATE" Quel est le format de date utilisée pour $DATE dans ton script? 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
unPixel Posté(e) le 10 octobre 2018 Auteur Partager Posté(e) le 10 octobre 2018 (modifié) Voici à quoi correspond &DATE # Configuration du nom du dossier de sauvegarde (DD.MM.YYYY_HHMM dans le script) DATE=$(date +"%d.%m.%Y_%H%M") En gros, quand ça sauvegarde, ça créer un dossier nommé avec la date et l'heure au moment de la sauvegarde (dernier en date) : "10.10.2018_1300" Donc dossier 10.10.2018_1330 Dedans, on trouve ces bdd sauvegardées : bdd_complete.sql.gz xxxxx.sql.gz yyyyy.sql.gz zzzzzz.sql.gz Modifié le 10 octobre 2018 par InfoYANN 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Rejoindre la conversation
Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.