2016-06-10 11 views
0

Ich habe ein einfaches Shell-Skript, die einmal wöchentlich ganze www Verzeichnis und einzelne Datenbank sichern. Es funktioniert perfekt .. Jetzt möchte ich es ein wenig erweitern und es machen, um alle Datenbanken nicht nur eine zu sichern. Wie kann ich das machen?Shell-Skript zur Sicherung aller Datenbanken und www Verzeichnis

Dies ist das aktuelle Skript

#!/bin/bash 
NOW=$(date +"%Y-%m-%d-%H%M") 
FILE="backup.$NOW.tar" 
BACKUP_DIR="/home/user/backups/" 
WWW_DIR="/var/www/" 

DB_USER="dbuser" 
DB_PASS="dbpass" 
DB_NAME="dbName" 
DB_FILE="backup.$NOW.sql" 

WWW_TRANSFORM='s,^home/user/www,' 
DB_TRANSFORM='s,^home/user/backups,database,' 


tar -cf $BACKUP_DIR/$FILE --transform $WWW_TRANSFORM $WWW_DIR 
mysqldump -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DIR/$DB_FILE 

tar --append --file=$BACKUP_DIR/$FILE --transform $DB_TRANSFORM $BACKUP_DIR/$DB_FILE 
rm $BACKUP_DIR/$DB_FILE 
gzip -9 $BACKUP_DIR/$FILE 

echo 'backup finished', $FILE 
+0

'man mysqldump''/all-databases' – spectras

Antwort

1

Sie können einfache Verwendung show databases Befehl. Lesen Sie alle Datenbanken in for-Schleife wie folgt und rufen mysqldump Befehl

databases=`mysql --user=$DB_USER --password=$DB_PASS -e "SHOW DATABASES;" | tr -d "| " | grep -v Database` 

for db in $databases; do 
     echo "Dumping database: $db" 
     mysqldump --force --opt --user=$DB_USER--password=$DB_PASS --databases $db > $BACKUP_DIR/`date +%Y%m%d`.$db.sql 
done 
+0

Dankten für die Antwort. In diesem Fall füge ich das einfach in mein Skript ein und entferne 'DB_NAME =" dbName "' .. lass es mich versuchen. –

+0

Ich vergaß zu erwähnen, dass dies auf Shared-Hosting ist .. wenn ich das Skript jetzt habe ich habe 'Dumping-Datenbank: information_schema mysqldump: Got Fehler: 1045: Zugriff verweigert für Benutzer 'user_table - password = mypassword' @ ' localhost '(mit Passwort: YES) beim Versuch, eine Verbindung herzustellen' –

+0

Also alle Datenbanken sind mit dem Präfix des Benutzernamens 'user_db1',' user_db2' ... –

1
#!/bin/bash 

USER="root" 
PASSWORD="PASSWord" 
OUTPUT="/root" 


rm "$OUTPUT/*gz" > /dev/null 2>&1 

databases=`mysql --user=$USER --password=$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database` 

for db in $databases; do 
    if [[ "$db" != "information_schema" ]] && [[ "$db" != _* ]] ; then 
     now="$(date +'%d_%m_%Y_%H_%M_%S')" 
     echo "Dumping database: $db" 
     mysqldump --user=$USER --password=$PASSWORD --default-character-set=utf8 $db | gzip > $OUTPUT/$db.`date +%Y%m%d`.gz 
    fi 
done