Snippets tagged "mysql bash server sysadmin"
Dump de toutes les bases d'un serveur MySQL dans des fichiers multiples
Si comme moi vous avez sous la main un serveur abritant plusieurs (dizaines, voir centaines de) bases de données, le jour où une des bases de données plante et qu'on vous demande de la restaurer, je vous souhaite bien du courage si vous n'avez qu'un résultat de mysqldump --all-databases sous la main.
Afin de pallier ce problème, j'ai écris ce script bash qui vous facilitera bien la vie !
Au programme :
sauvegarde des dump de chaque base dans des fichiers séparés compressés en gzip, eux même situés dans un dossier nommé en fonction de la date
suppression automatique du dump effectué il y a 7 jours.
Le script est destiné à être exécuté par un cron, par exemple toutes les nuits.
#!/bin/bash #paramètres de configuration du script #completer ici par le nom d'un utilisateur autorisé à dumper toutes vos bases : strMysqlUser="" #completer ici par le mot de passe de cet utilisateur : strPassword="" # completer ici par le chemin vers le repertoire de travail où va se trouver le dump # il est possible de préfixer le répertoire : # "/rep/de/travail/prefix_" donnera alors /rep/de/travail/prefix_20070505 repTravail="" #mémorisation de la date du jour et de la date d'il y a 7 jours dateActuelle=$(date +%Y%m%d) datePassee=$(date --date '7 days ago' +%Y%m%d) #Suppression de la sauvegarde d'il y a 7 jours echo "["$(date +%F\ %X)"] Suppression des dump du "$datePassee repTravailPasse=$repTravail$datePassee rm -R $repTravailPasse # début du dump echo "["$(date +%F\ %X)"] Dump du : "$dateActuelle repTravailActuel=$repTravail$dateActuelle mkdir $repTravailActuel # récupération de la liste des bdd, "tail -n +2" est présent pour ne pas récupérer le titre "Databases" renvoyé par mysql listDatabase=$(mysql --user=$strMysqlUser --password=$strPassword --exec="SHOW DATABASES;" | tail -n +2) #dump de chaque base dans un fichier for lineDatabase in $listDatabase do echo "["$(date +%F\ %X)"] Debut du dump de la base "$lineDatabase" vers "$repTravailActuel mysqldump --user="$strMysqlUser" --password="$strPassword" "$lineDatabase" | gzip > "$repTravailActuel"/"$lineDatabase".sql.gz echo "["$(date +%F\ %X)"] Dump compressé dans "$repTravailActuel"/"$lineDatabase".sql.gz" done echo "["$(date +%F\ %X)"] Fin de la sauvegarde" exit 0
