2011-03-02 1 views
1

Salut à tous, nous avons 2 serveurs Web qui peuvent se déconnecter vendredi. nous avons ~ 90 sites Web hébergés sur ces serveurs et j'ai déjà trouvé un moyen de sauvegarder chaque dossier de site Web dans son propre fichier .tar.gz - ce dont j'ai besoin maintenant est de trouver un moyen d'exporter chaque base de données de notre serveur de base de données Sauvegarde SQL avec une commande.Comment sauvegarder plusieurs bases de données pour séparer les fichiers avec une commande

Actuellement, la seule façon dont je sais comment utiliser PHP myAdmin, mais pour plus de 100 bases de données devient un peu fastidieux.

Existe-t-il un moyen simple d'exporter chaque base de données en tant que son propre fichier de sauvegarde SQL sur SSH?

+0

Plus de 100 bases de données sans stratégie de sauvegarde existante que vous pourriez exploiter pour cet exercice? {shudder} –

+0

Je suis entré dans un travail où notre administrateur de serveur ne peut pas sauvegarder un seul fichier - oubliez qu'il ne peut même pas arrêter un serveur sur SSH même avec une feuille de triche étape par étape. Je suis un graphiste expérimenté mais si nos serveurs tombent en panne, j'essaie de faire tout ce qui est en mon pouvoir pour sauvegarder des données car nous n'avons actuellement aucune sauvegarde autre que ce que j'ai fait à la main site par site dans le passé – innovati

Répondre

1

Vous pouvez mysqldump --all-databases mais vous ne disposez que d'un gros vidage SQL.

Trouvé ce script bash:

for T in `mysql -N -B -e 'show databases' -pYOUR_ROOT_PASSWORD`; 
    do echo $T; 
    mysqldump -pYOUR_ROOT_PASSWORD $T | gzip -c > $T.sql.gz; 
done 

il vous suffit de le tester et d'adapter le chemin/noms à vos besoins.

+0

Oui, je veux trier ces fichiers dans des dossiers avec des fichiers de sauvegarde de base de données et .tar.gz de chaque site Web afin qu'ils puissent être distribués aux clients si nécessaire. Avoir un gros fichier n'est pas mauvais pour nous de le restaurer sur un serveur, mais je ne veux pas donner à chaque client les données et mots de passe de chacun de nos autres clients en plus de leurs propres données ... – innovati

+0

Voir ma modification, le tester maintenant. – Capsule

+0

Fonctionne parfaitement ;-) – Capsule

0
if [ -z "$1" ] 
    then 
    echo "Provide MySQL root password as argument."; 
    exit; 
fi 
cnt=0 
for T in `mysql -N -B -e 'show databases' -u root -p$1`; 
    do 
    D=`date "+%Y_%m_%d_%H_%M_%S"`; 
    cnt=$((cnt + 1)) 
    File=$T"_"$D; 
    echo "Backing up $T to $File.sql.gz"; 
    mysqldump -u root -p$1 $T | gzip -c > $File.sql.gz; 
    echo "Done."; 
done 

echo "$cnt databases backed up."; 
0

Celui-ci est adapté pour les serveurs d'hébergement mutualisé, il stocke chaque sauvegarde dans le dossier de la maison des utilisateurs respectifs, afin qu'ils puissent restaurer/utiliser/supprimer en conséquence.

backup_folder="automated_backup/"; 


if [ "$(id -u)" != "0" ]; then 
    echo "This script must be run as root" 1>&2 
    exit 1 
fi 

if [ -z "$1" ] 
    then 
    echo "Provide MySQL root password as argument."; 
    exit; 
fi 
cnt=0 
for T in `mysql -N -B -e 'show databases' -u root -p$1`; 
    do 
    D=`date "+%Y_%m_%d_%H_%M_%S"`; 
    cnt=$((cnt + 1)) 
    User=`echo $T | cut -d'_' -f 1` 
    Folder="/home/$User/"; 
    Folder2=$Folder$backup_folder; 
    if [ -d "$Folder" ]; then 
     if [ ! -d "$Folder2" ]; then 

     echo "$Folder2 not exists, creating it …"; 
     mkdir -p $Folder2 

     fi 
     File=$Folder2$T"_"$D; 
     echo "Backing up $T to $File.sql.gz"; 
     mysqldump -u root -p$1 $T | gzip -c > $File.sql.gz; 
     chown $User.$User -R $Folder2; 
     echo "Done."; 
    fi 
done 

echo "$cnt databases backed up."; 
Questions connexes