MySQL Backup via SSH
Das unten Stehende Script erstellt SQL Dumps von Datenbanken auf einem externen Server via SSH und Public Keys, und läd sie dann auf eine Samba Freigabe runter.
Welche Datenbanken gesichert werden, wird in einer Textdatei festgelegt. Dort können auch verschiedene Profile festgelegt werden, so das man verschiedene Intevalle erstellen kann.
Die Textdatei
| 1 2 3 4 5 | Beispiel: sim4000.de:datenbank1:abc123def:t:website Erklaerung: <host>:<datenbankname/user>:<password>:<intervall>:<beschreibung> |
Die Textdatei mit den Datenbankdefinitionen ist aufgebaut wie die /etc/passwd von Linux. Hierbei steht in jeder Zeile eine Datenbank. Es dürfen keine Leerzeilen, und auch keine anderen Texte in der Datei vorkommen!
Der Intervall wird dem Script als Übergabeparameter übergeben. So das nur die Datenbanken gesichert werden, die den übergeben Intervall besitzen.
Der Code
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | #!/bin/bash # Backup von Datenbanken mit SSH via Public Keys und Samba Shares # by Christian Blechert # 22.10.2008 # Datum erstellen DATE=$(date +"%Y-%m-%d_%H-%M") # Laufwerk mouten echo "Binde Laufwerk ein..." mount.cifs //0.0.0.0/freigabe /folder/sql_backups/ -o user=username,pass=password,gid=1000,uid=1000,codepage=cp850,iocharset=utf8 # Wenn Laufwerk erfolgreich eingebunden wurde if [ -d /folder/sql_backups/folder ]; then for I in $(cat /folder/backup_databases); do if [ "$1" == "$(echo $I | cut -d ":" -f4)" ]; then MYSQL_HOST=$(echo $I | cut -d ":" -f1) MYSQL_USER=$(echo $I | cut -d ":" -f2) MYSQL_PASS=$(echo $I | cut -d ":" -f3) MYSQL_DATA=$(echo $I | cut -d ":" -f2) NAME=$(echo $I | cut -d ":" -f5) FOLDER="$(echo $MYSQL_DATA)_$(echo $NAME)" if [ ! -d /folder/sql_backups/folder/$FOLDER ]; then mkdir /folder/sql_backups/folder/$FOLDER fi echo "############################################ Create Dump for \\"$NAME\\"... ############################################" echo "Create..." ssh user@host.de -i public_key_file "mysqldump -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASS $MYSQL_DATA > /path/server/$(echo $DATE)_$(echo $MYSQL_DATA).sql" echo "Download..." scp -i public_key_file user@host.de:/path/server/$(echo $DATE)_$(echo $MYSQL_DATA).sql /folder/sql_backups/folder/$FOLDER echo "" fi done; echo "" echo "" echo "Sicherung durchgefuehrt" echo "Trenne Laufwerk" umount /folder/sql_backups/ # Wenn Laufwerk nicht eingebunden wurde else echo "Fehler beim Mounten des Laufwerks!" fi |
Erst mal eine Kurze Beschreibung des Programmablaufs. Als erstes wird das aktuelle Datum im Format YYY-MM-DD_HH-MM ermittelt, und stellt Verbindung mit dem Samba/Windows Share her, wo der Dump gespeichert werden soll.
Nun wird die Textdatei Zeile für Zeile durchgegangen, und geprüft, ob die aktuelle Datensatz auch in dem Übergebenen intervall vorgesehen ist. Falls nicht, wird er übersprungen. Nun werden die Daten, die für den SQL Zugriff gebraucht werden, in Variablen geschrieben.
Da jede Datenbank einen eigenen Ordner bekommt, wo dann die Dumps mit dem Datum und dem Namen im Dateinamen gespeichert werden, wird nun vor dem Backup noch geprüft, ob es schon einen Ordner für die Datenbank gibt. Falls nicht, wird ein neuer erstellt.
Nun geht es weiter mit dem erstellen des Dumps. Es wird via SSH eine Verbindung mit dem Server hergestellt, und der Befehl "mysqldump" ausgeführt. Die Verbindung wird mit Public Keys geregelt, damit man nicht immer ein Password eingeben muss. Der Dump wird auf dem Server erstellt.
Nun muss der Dump nur noch runtergeladen werden. Dies wird auch über SSH mit dem Programm scp (Secure Copy) erledigt. Die Verbindung wird auch hier mit dem Public Key aufgebaut. Der Dump wird in das Angegebene Verzeichnis kopiert, dann wird die Verbindung wieder geschlossen. Eine Kopie des Dumps verbleibt zur Sicherheit auf dem Server.




