Rechercher dans la communauté
Affichage des résultats pour les étiquettes 'sauvegarde base mysql'.
1 résultat trouvé
-
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