DjMomo Posté(e) le 9 février 2012 Partager Posté(e) le 9 février 2012 (modifié) Bonsoir, Petit tutoriel du jour, la sauvegarde automatisée périodique de toutes les bases d'un serveur MySQL (et ce n'est pas seulement limité aux NAS Synology, dès lors que vous possédez un accès TELNET/SSH et la possibilité de jouer avec la crontab sur le serveur en question). Le script ci-dessous va vous permettre de sauvegarder toutes les bases de données de n'importe quel serveur MySQL périodiquement, dès lors que vous avez un minimum de droits dessus. Et pas besoin de le faire évoluer au rythme d'ajout/suppression de vos bases de données, c'est tout automatisé. Il y a une sauvegarde gzippée par date et base de données. Allons-y. Prérequis : - Un accès Telnet/SSH.... - Le droit de modifier la crontab pour programmer l'exécution périodique du script - et c'est tout 1 - Création de l'utilisateur sauvegarde Il va falloir créer, pour un poil plus de sécurité, un utilisateur ayant seulement quelques droits sur toutes les bases de notre serveur MySQL. Cela évitera ainsi d'avoir le mot de passe du compte root en clair dans le script. Vous pouvez toutefois utiliser le compte root (et donc sauter la présente étape), si vous le souhaitez. - Rendez-vous sur phpMyAdmin de votre serveur MySQL. Sur la page d'accueil, cliquez sur le bouton "Privilèges", puis "Ajouter un utilisateur". - Configurez le nouvel utilisateur : - Nom d'utilisateur : sauvegarde - Serveur : localhost (sauf lors d'une éxecution distante de la sauvegarde, dans quel cas il faut indiquer le nom réseau de la machine qui exécute le script ci-dessous) - Mot de passe : celui que vous voulez - Privilèges globaux : - Données : SELECT , INSERT - Administration : SHOW DATABASES , LOCK TABLES - Cliquez sur Exécuter pour valider la création de l'utilisateur. Avec ces droits, même si quelqu'un ce connecte avec ce compte "sauvegarde", il ne pourra aucunement supprimer des données, tables, ou bases. 2 - Installation du script Là, on va pas y aller par 4 chemins. Il suffit de compléter les 4 champs nécessaires en début de script : mysql_server=localhost mysql_user=sauvegarde mysql_pass=mot_de_passe dossier_sauvegarde=/chemin/vers/le/dossier/de/sauvegarde Attention , pour le dossier de sauvegarde, il ne faut pas le / en fin de chemin. Ainsi une sauvegarde dans /opt/etc/dossier/ devra être indiqué /opt/etc/dossier dans le script. #!/bin/sh # ******************************************* # Script de sauvegarde automatique des bases # de données d'un serveur MySQL # ******************************************* # Par F. Maurel # Suivi des mises à jours sur nas-forum : # # ******************************************* # v1.0 - 10/02/12 - Version initiale # v1.1 - 11/02/12 - Ajout path binaire mysql # ******************************************* # ******************************************* # Renseigner les variables de connexion au serveur # ******************************************* # Adresse IP / nom du serveur de bases de données mysql_server=localhost # Nom d'utilisateur ayant les droits adéquats, cf forum mysql_user=sauvegarde # Mot de passe de l'utilisateur mysql_pass=mot_de_passe # Chemin du dossier où vont être sauvegardées les bases de données, chemin sans le / en fin dossier_sauvegarde=/chemin/vers/le/dossier/de/sauvegarde # Chemin des binaires mysql dossier_bin=/usr/syno/mysql/bin # ******************************************* # Ne pas modifier la suite du fichier # ******************************************* bases=`$dossier_bin/mysql --host=$mysql_server --user=$mysql_user --password=$mysql_pass -e "show databases;" -B -s 2> /dev/null` if [ -z "$bases" ];then echo "Erreur d'accès ou pas de bases." exit 1 fi echo "***************************************************" echo "* Début d'optimisation et de sauvegarde des bases *" echo "***************************************************" for base in $bases do echo "------- Traitement de la base $base -------" echo "-- Début d'optimisation --" $dossier_bin/mysqlcheck --optimize --host=$mysql_server --user=$mysql_user --password=$mysql_pass --databases "$base" wait echo ">> Optimisation terminée" echo "-- Début de sauvegarde --" $dossier_bin/mysqldump --opt --verbose --host=$mysql_server --user=$mysql_user --password=$mysql_pass --databases "$base" | gzip -9 > ${dossier_sauvegarde}/backup-${base}-$(date -I).gz echo "------- Sauvegarde de la base $base terminée -------" done echo "*********************************" echo "* Sauvegarde des bases terminée *" echo "*********************************" Pensez à rendre ce script exécutable. 3 - Création de la tâche planifiée Là, rien de bien compliqué, il suffit de créer une tâche planifiée - quotidienne et de nuit est l'idéal - qui va exécuter le précédent script. vi /etc/crontab Ajouter la ligne 5 0 * * * root /chemin/vers/backupbdd.sh pour une exécution quotidienne à 00h05. Notre script se nommant backupbdd.sh Enfin, relancer le démon cron pour prendre en compte la modification de la crontab : cd /usr/syno/etc/rc.d/ ./S04crond.sh stop ./S04crond.sh start Et voilà, rien de plus difficile Modifié le 10 février 2012 par DjMomo 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Patrick21 Posté(e) le 10 février 2012 Partager Posté(e) le 10 février 2012 Bonjour juste une question : quel intérêts par rapport à la fonction intégrée dans la dsm ? qui fait cela aussi bien et plus simplement Patrick 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
DjMomo Posté(e) le 10 février 2012 Auteur Partager Posté(e) le 10 février 2012 (modifié) Bonjour, Ce script te sauvegarde aussi la base mysql, tu sais, celle où tu as toute ta config MySQL ainsi que tous les privilèges utilisateurs.... Celle là, elle n'est pas sauvegardée avec l'appli intégrée... Et comme je le dis en intro, ce n'est pas limité aux NAS Synology... Il peut être utilisé presque partout.... D'ailleurs, l'USB Station 2 n'étant pas pourvue de fonction de sauvegarde, il m'y est très utile dessus... Modifié le 10 février 2012 par DjMomo 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
raabhimselfyo Posté(e) le 10 février 2012 Partager Posté(e) le 10 février 2012 Merci pour ce tuto bien fait. Par contre, je n'ai pas de commande mysql quand je me connecte en ssh sur mon syno. Est-ce une commande caché que je ne peu trouver que dans un certain répertoire? (comme les NAS Dell en fait). 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
DjMomo Posté(e) le 10 février 2012 Auteur Partager Posté(e) le 10 février 2012 Il est dans /usr/syno/mysql/bin. Je modifie le script en conséquence. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
raabhimselfyo Posté(e) le 10 février 2012 Partager Posté(e) le 10 février 2012 Merci, ça fonctionne nickel! 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
DjMomo Posté(e) le 10 février 2012 Auteur Partager Posté(e) le 10 février 2012 Script modifié. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gg3105 Posté(e) le 7 mai 2012 Partager Posté(e) le 7 mai 2012 (modifié) Bonjour et merci pour ce tuto fort intéressant. Je ne suis pas un pro de la ligne de commande et j'ai un message d'erreur lorsque j'exécute ton script. /etc/bckmysql.sh: line 29: gt: not found /etc/bckmysql.sh: line 29: /dev/null: Permission denied ERROR 1049 (42000): Unknown database '2' J'ai bien vérifié. L'accès au serveur, l'utilisateur et le mot de passe sont corrects. Ai je raté quelque chose ? Merci pour vos lumières ! Modifié le 7 mai 2012 par gg3105 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
notFloran Posté(e) le 13 juillet 2012 Partager Posté(e) le 13 juillet 2012 Fonctionne impec après après quelques modifs, comme gg3105 j'avais : [color=#282828][font=helvetica, arial, sans-serif]/etc/bckmysql.sh: line 29: gt: not found[/font][/color] [color=#282828][font=helvetica, arial, sans-serif]/etc/bckmysql.sh: line 29: /dev/null: Permission denied[/font][/color] [color=#282828][font=helvetica, arial, sans-serif]ERROR 1049 (42000): Unknown database '2'[/font][/color] Le problème vient du caractère ">" qui dans le code donné DjMomo a été remplacé par son code HTML ">". Il suffit donc de remplacer tous > par > Voilà le code complet corrigé : #!/bin/sh # ******************************************* # Script de sauvegarde automatique des bases # de données d'un serveur MySQL # ******************************************* # Par F. Maurel # Suivi des mises à jours sur nas-forum : # # ******************************************* # v1.0 - 10/02/12 - Version initiale # v1.1 - 11/02/12 - Ajout path binaire mysql # *******************************************[/size][/font][/color] [color=#303030][font=Arial, Helvetica, sans-serif][size=3]# ******************************************* # Renseigner les variables de connexion au serveur # ******************************************* # Adresse IP / nom du serveur de bases de données mysql_server=localhost # Nom d'utilisateur ayant les droits adéquats, cf forum mysql_user=sauvegarde # Mot de passe de l'utilisateur mysql_pass=mot_de_passe # Chemin du dossier où vont être sauvegardées les bases de données, chemin sans le / en fin dossier_sauvegarde=/volume1/backup/mysql # Chemin des binaires mysql dossier_bin=/usr/syno/mysql/bin # ******************************************* # Ne pas modifier la suite du fichier # ******************************************* bases=`$dossier_bin/mysql --host=$mysql_server --user=$mysql_user --password=$mysql_pass -e "show databases;" -B -s 2> /dev/null` if [ -z "$bases" ];then echo "Erreur d'accès ou pas de bases." exit 1 fi echo "***************************************************" echo "* Début d'optimisation et de sauvegarde des bases *" echo "***************************************************" for base in $bases do echo "------- Traitement de la base $base -------" echo "-- Début d'optimisation --" $dossier_bin/mysqlcheck --optimize --host=$mysql_server --user=$mysql_user --password=$mysql_pass --databases "$base" wait echo ">> Optimisation terminée" echo "-- Début de sauvegarde --" $dossier_bin/mysqldump --opt --verbose --host=$mysql_server --user=$mysql_user --password=$mysql_pass --databases "$base" | gzip -9 > ${dossier_sauvegarde}/backup-${base}-$(date -I).gz echo "------- Sauvegarde de la base $base terminée -------" done echo "*********************************" echo "* Sauvegarde des bases terminée *" echo "*********************************" 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
QuEcHuA Posté(e) le 25 septembre 2012 Partager Posté(e) le 25 septembre 2012 Bonjour à tous, Je remonte ce sujet un peu vieux mais c'est exactement ce dont j'ai besoin. Je suis totalement newbie sous linux mais pas mal débrouillard, j'ai donc modifié mon crontab, rendu le script exécutable, tout ça... Sauf que lorsque je veux tester l’exécution du script à la main et que je l’exécute, j'ai droit à un message d'erreur: Ds107> sh backupbdd.sh backupbdd.sh: line 38: syntax error: unexpected word (expecting "do") J'ai bien vérifié ligne 38, c'est bien écrit "do". Le monsieur dans le synology me dit qu'il attend la valeur "do", après vérification du script elle y est, je cale... voici mon code : #!/bin/sh # ******************************************* # Script de sauvegarde automatique des bases # de données d'un serveur MySQL # ******************************************* # Par F. Maurel # Suivi des mises à jours sur nas-forum : # # ******************************************* # v1.0 - 10/02/12 - Version initiale # v1.1 - 11/02/12 - Ajout path binaire mysql # ******************************************* # ******************************************* # Renseigner les variables de connexion au serveur # ******************************************* # Adresse IP / nom du serveur de bases de données mysql_server=localhost # Nom d'utilisateur ayant les droits adéquats, cf forum mysql_user=sauvegarde # Mot de passe de l'utilisateur mysql_pass=sauvegardebdd # Chemin du dossier où vont être sauvegardées les bases de données, chemin sans le / en fin dossier_sauvegarde=/volume1/sauvegarde/mysql # Chemin des binaires mysql dossier_bin=/usr/syno/mysql/bin # ******************************************* # Ne pas modifier la suite du fichier # ******************************************* bases=`$dossier_bin/mysql --host=$mysql_server --user=$mysql_user --password=$mysql_pass -e "show databases;" -B -s 2> /dev/null` if [ -z "$bases" ];then echo "Erreur d'accès ou pas de bases." exit 1 fi echo "***************************************************" echo "* Début d'optimisation et de sauvegarde des bases *" echo "***************************************************" for base in $bases do echo "------- Traitement de la base $base -------" echo "-- Début d'optimisation --" $dossier_bin/mysqlcheck --optimize --host=$mysql_server --user=$mysql_user --password=$mysql_pass --databases "$base" wait echo ">> Optimisation terminée" echo "-- Début de sauvegarde --" $dossier_bin/mysqldump --opt --verbose --host=$mysql_server --user=$mysql_user --password=$mysql_pass --databases "$base" | gzip -9 > ${dossier_sauvegarde}/backup-${base}-$(date -I).gz echo "------- Sauvegarde de la base $base terminée -------" done echo "*********************************" echo "* Sauvegarde des bases terminée *" echo "*********************************" Merci pour le coup de main. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
pablojulia Posté(e) le 19 novembre 2012 Partager Posté(e) le 19 novembre 2012 Bonjour, merci pour ce script, mais je voudrai comprendre ce que sont les binaires mysql ? Sont-ils toujours au même endroit ? a quoi correspond usr/syno ? je n'ai pas ce repertoire sur mon sytème (ubuntu) 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
PatrickH Posté(e) le 20 novembre 2012 Partager Posté(e) le 20 novembre 2012 Bonjour, merci pour ce script, mais je voudrai comprendre ce que sont les binaires mysql ? Sont-ils toujours au même endroit ? a quoi correspond usr/syno ? je n'ai pas ce repertoire sur mon sytème (ubuntu) "Ce que sont les binaires mysql" tu veux dire quoi par là !? Bien sur que sur un systeme Ubuntu tu n'as pas /usr/syno ! Patrick 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
excalibur Posté(e) le 26 août 2013 Partager Posté(e) le 26 août 2013 Bonjour à tous, J'ai lu avec grand intêret votre topic et je précise que je suis un newbie total dans le domaine des scripts programables... Ce script c'est exactement ce dont j'ai besoin pour sauvegarder mes bases au travail car j'ai un serveur DS212+ qui n'exécute pas les sauvegardes comme je les lui demande. J'ai branché un lecteur USB3 Lacie compatible SYNOLOGY, formaté en ext4 (j'ai déjà fait des tentatives en ext3 infructueuses) et utilise la fonction de sauvegarde Mysql fournie par défaut dans le serveur. Une de mes bases fait 20Go...et ça coince, la tache de sauvegarde n'arrive jamais au bout ! Les journaux de sauvegarde me disent qu'il n'arrive pas à exporter les "settings de mysql...blablabla". Je ne vois vraiment pas a quoi ça fait référence. Je voudrais integrer ce script dans mon syno mais je ne comprends pas avec quels outils vous l'integrez. J'ai ouvert une tunnel ssh avec une ouverture de session qui se fait correctement avec interface "commander" donc j'ai deux fenêtres une de mon poste local et une autre avec l'arborescence de mes fichiers syno. J'ai compris qu'il fallait créer avec un editeur de texte un fichier rassemblant les instructions de ce script mais je n'arrive jamais à le copier dans le bon repertoire (j'utilise WinSCP pour cela, il me renvoi a chaque fois un message d'erreur....). Utilisez vous un programme particulier pour copier le script dans le bon repertoire du syno ? Merci infiniment de votre aide. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
excalibur Posté(e) le 23 septembre 2013 Partager Posté(e) le 23 septembre 2013 Bonjour, Ce script te sauvegarde aussi la base mysql, tu sais, celle où tu as toute ta config MySQL ainsi que tous les privilèges utilisateurs.... Celle là, elle n'est pas sauvegardée avec l'appli intégrée... Et comme je le dis en intro, ce n'est pas limité aux NAS Synology... Il peut être utilisé presque partout.... D'ailleurs, l'USB Station 2 n'étant pas pourvue de fonction de sauvegarde, il m'y est très utile dessus... Moi je trouve que ce script remplit sa tache bien plus rapidement que l'outil intégré au DSM. A titre d'exemple, je sauvegarde 9Go de bases en 30 mn avec le script, 1h30 avec l'outil intégré au DSM. Pour moi il y a pas photo. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gilles_906 Posté(e) le 21 novembre 2013 Partager Posté(e) le 21 novembre 2013 Bonjour J'ai le meme probleme que QuEcHuA line 38: syntax error: unexpected word (expecting "do") Pourriez vous m'aider svp Merci 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gilles_906 Posté(e) le 22 novembre 2013 Partager Posté(e) le 22 novembre 2013 Bonjour Je poste la réponse qui peut paraître évidente pour beaucoup d'entre vous, mais pas pour les nouveaux (ca m'a pris deux jours pour trouver). Un fichier linux, ouvert sous windows est "corrompu" lorsque windows l'enregistre. Windows rajoute des ^M a la fin de chaque ligne, ce qui explique l'erreur que j'avais. Pour contourner le probleme il faut soit: l'éditer avec vi par telnet ou ssh (et c'est l'enfer à manipuler ) soit passer par notepad++ pour editer le fichier directement sur le syno, ci dessous le lien d'un tuto pour parametrer notepad http://www.f4fxl.org/2012/07/13/editer-des-fichiers-sous-linux-depuis-un-systeme-windows/ @+ Gilles 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lagaffe Posté(e) le 24 novembre 2013 Partager Posté(e) le 24 novembre 2013 (modifié) @gilles_906, une autre méthode beaucoup plus rapide et plus sûr est de faire : dos2unix nomdufichier Le binaire dos2unix se trouve aisément sur ipkg. Modifié le 24 novembre 2013 par lagaffe 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gilles_906 Posté(e) le 24 novembre 2013 Partager Posté(e) le 24 novembre 2013 Oui lagaffe a condition d'etre sur une machine linux et dans ce cas tu n'as pas ce problème 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lagaffe Posté(e) le 24 novembre 2013 Partager Posté(e) le 24 novembre 2013 Ton Synology est une machine linux 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gilles_906 Posté(e) le 24 novembre 2013 Partager Posté(e) le 24 novembre 2013 Au travers de la console, c'est pas cool de modifier les fichiers. dos2unix ressemble a vi? qu'apporte il de plus? Ces questions peuvent paraître bête, mais je débute. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
lagaffe Posté(e) le 24 novembre 2013 Partager Posté(e) le 24 novembre 2013 dos2unix ne ressemble pas du tout à vi, tu n'as pas du tout la nécessité d'éditer le fichier. En fait dos2unix change le codage (dos/windows) qui génère des ¨M lorsqu'ils sont transféré sous unix/linux en fichier unix/linux. Sinon pour le reste, il n'y a aucune question bête, c'est un forum d'entraide, qui là pour aider. Mais pour te donner un autre d'idée de la puissance de la commande dos2unix, si dans un répertoire tu as 20 fichiers .sh qui ont été créé sous windows et donc auront des ¨M s'ils ont été codé en mode "windows" et non pas "unix", la commande dos2unix *.sh vas traiter l'ensemble des fichiers .sh présent dans le répertoire, s'il y a d'autre fichiers .sh au bon format de présent, ces derniers ne seront pas traiter. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Machine Head Posté(e) le 14 janvier 2014 Partager Posté(e) le 14 janvier 2014 (modifié) Suite à un problème de disques durs mon volume Raid est crashé. J'accède encore à mes données qui ne sont accessibles qu'en lecture seule. Je souhaiterais récupérer la dernière version de mes bases de données présentes sur le syno. Etant donné que mon volume est en lecture seule, je ne peux installer de script sur le volume. Est-ce possible de sauvegarder les bases de la même façon en local sur le pc en utilisant un script windows lancé directement par le pc. Si, je copie lle fichier mysql qui se trouve sur /usr/syno/mysql/bin, puis-je extraire les bases de données en local sur le pc? Je n'ai pas de connaissances poussées en script mais beaucoup de bonne volonté. Merci de votre compréhension et de votre aide Modifié le 14 janvier 2014 par Machine Head 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
excalibur Posté(e) le 12 mai 2015 Partager Posté(e) le 12 mai 2015 Bonjour à tous, Je trouve très bon ce script pour sauvegarder ses bases mysql. Curieusement le DSM 5 (DS212+) ne propose plus de sauvegarde des bases mysql avec l'outils sauvegade et réplication (ou alors j'ai mal compris....) Toutefois j'aurai 2 questions qui me viennent à l'esprit : Question n°1 : comment le modifier pour que la sortie génère des fichiers .sql Question n°2 : comment ajouter (dans ce même script) une commande qui supprime automatiquement les anciennes sauvegardes pour qu'il n'en reste que les 3 dernières par exemple. ? Merci beaucoup pour le coup de main. 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
gaetan.cambier Posté(e) le 12 mai 2015 Partager Posté(e) le 12 mai 2015 Pour générer le .SQL, tu supprime la compression du script mais le fichier ça prendre au moins 20 fois + de place 0 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
excalibur Posté(e) le 14 mai 2015 Partager Posté(e) le 14 mai 2015 Bonjour Gaetan, merci de ta réponse et bonjour à tous les Belges ! J'apporte quelques précisions a sujet de mon problème Je suis Medecin et utilise une base mysql pour enregistrer toutes les infos de mes patients. Dans cette base j'ai inclus des images, des pdf, bref toutes sortes de documents et j'avoue que la flexibilité de cette base m'apporte beaucoup plus que de nombreuses bases propriétaires que j'ai pu utiliser auparavant. Bref je dois sauvegarder entre 12h et 14h pour éviter de laisser mon support de sauvegarde USB trop longtemps au cabinet, si je la faisait la nuit j'ai peur de perdre ma sauvegarde si un accident survient, un incendie ou autre chose du même acabit. Mes exigeances : une sauvegarde qui ne prenne pas plus de 2h.....avec le script, il fallait 30 a 40 mn pour sauvegarder 15 Go en produisant des fichiers .sql En comprimant en gz j'obtenais le même resultat en plus de 2h ce qui m'ennuie fortement. Pour le reste, j'ai des difficultés "techniques" avec ce script : 1/ il ne se declenche à l heure que j'ai indiqué au crontab, même si je change l'heure. 2/ je n'ai pas modifié le caractère > par >.....une importance ? 3/ Avec le passage de mysql a MariaDB c'est la panique à bord !!! où faut-il placer le script ? : dans /usr/syno/mysql/bin ? ou bien ailleurs ? 4/ Pourquoi est-ce que synology a abandonné la sauvegarde mysql et mis un outil de sauvegarde INCOMPREHENSIBLE par le commun des mortels ?? Cela fait plus d'un mois que j'ai pas fait de sauvegarde....je commence a être en mode panic !!! Merci par avance 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.