2010-05-05 7 views
3

J'utilise mysqldump pour exporter automatiquement toutes mes bases de données dans un fichier texte et enregistrer cette sauvegarde comme sauvegarde. J'utilise l'option --all-databases qui sauvegarde mes bases de données, mais aussi les bases de données système (information_schema, phpmyadmin, etc.) dont je n'ai pas besoin. Existe-t-il un moyen de vider toutes mes bases de données avec mysqldump sans les nommer explicitement en ligne de commande (pour ne pas avoir à modifier le script de sauvegarde chaque fois que je crée une nouvelle base de données), mais ignorer tout le système bases de données?Existe-t-il un moyen de vider toutes les bases de données mysql à l'exception des bases de données système?

Répondre

3

Vous pouvez écrire un script bash comme celui-ci. Il vérifie le nom de la base de données avant de le jeter.

#!/bin/sh 
DATABASES="$(/lighttpd/local/bin/mysql --user=user --password=pass -Bse 'show databases')" 

for db in ${DATABASES[@]} 
do 
if [ $db == "information_schema" ] 
then 
continue 
fi 
echo ${db}-$(date +%m-%d-%y).sql.bz2 is being saved in /backup/mysql 
mysqldump --user=user --password=pass $db --single-transaction -R | bzip2 -c > ${db}-$(date +%m-%d-%y).sql.bz2 
done 
+0

D'accord, mais cela signifie que je dois lister manuellement les bases de données du système dans le script. Existe-t-il un moyen de dire par programme si une base de données a été créée par le système ou l'utilisateur? – Tom

+0

pas que je sache. Mon DB MySQL est venu avec information_schema et mysql comme bases de données système. –

+0

et si vous voulez recombiner tous les fichiers de vidage en un gros vidage, vous pouvez simplement concaténer chacun à l'autre et le bzip à la fin. – Ross

Questions connexes