Mit dem Programm mysqldump lassen sich bequem die Datenbanken sichern. Nachteil ist aber, dass bei sehr großen Datenbanken die SQL-Dumps unübersichtlich werden.
Eine Möglichkeit ist es, die Tabellen in einer Datenbank einzeln in eine .sql Datei zu sichern.
Als Grundlage diente das Script von Bernd Scheu Sichern von grossen MySQL-Datenbanken.
Das nachfolgende Script hat folgende Funktionsweise:
- Es erstellt einen Ordner mit dem Datum des Backups als Namen im Format DD.MM.YY
- Auslesen aller Datenbanken
- Auslesen der einzelnen Tabellen einer Datenbank
- Für jede Datenbank wird ein extra Ordner angelegt
- Die Dumps der Tabellen werden erzeugt
- Mit zip komprimiert und anschließend werden die .sql Dateien gelöscht
- Der Ablauf wird in einer Log-Datei festgehalten
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 54 55 56 57 58 59 |
#!/bin/bash # set the global variables here: theUser=root thePassword=PASSWORD theDate=$(date +'%d.%m.%Y') theMySQLPath=/usr/bin #theDB=$3 theBackupDestination=/root/backups # variables of the script theTimeStamp=$(date +'%d.%m.%Y %H:%M:%S') theFolder=$theBackupDestination/$theDate theLog=$theFolder/dbDaily_$theDate.log theFile=$theFolder/dbDaily_$theDate.sql mkdir -p $theFolder echo "Starting at $theTimeStamp ..." >> $theLog declare -a TABLE_LIST declare -a DB_LIST #get all databases and the tables DB_LIST=`$theMySQLPath/mysql --user=$theUser --password=$thePassword -Bse "show databases"` echo "Databases are: " >> $theLog for database in $DB_LIST; do mkdir -p $theFolder/$database echo $database >> $theLog cd $theFolder/$database TABLE_LIST=`$theMySQLPath/mysql --user=$theUser --password=$thePassword -Bse "show tables from $database"` for table in $TABLE_LIST; do echo -e "\t" $table >> $theLog theTable=$table.sql theZIP=$table.zip # start dumping the table theTimeStamp=$(date +'%d.%m.%Y %H:%M:%S') echo -e "\t... dumping table $theTable, starting at $theTimeStamp ..." >> $theLog $theMySQLPath/mysqldump --user=$theUser --password=$thePassword --lock-tables=0 --skip-comments --skip-extended-insert --quick $database $table > $theTable # create ZIP archive echo -e "\t... compressing database dump, starting at $theTimeStamp ..." >> $theLog echo -e "\t[$theTable] => [$theZIP]" >> $theLog zip $theZIP $theTable >> $theLog # TEST ZIP - archive (very important) echo -e "\t... test ZIP-archive, starting at $theTimeStamp ..." >> $theLog zip -T $theZIP >> $theLog echo -e "\t... compressing finished ..." >> $theLog echo -e "\t[$theZIP]" >> $theLog # clean up echo -e "\t... removing database dump ..." >> $theLog echo -e "\t[$theTable]" >> $theLog rm $theTable; >> $theLog echo " " >> $theLog done echo " " >> $theLog done echo -e "\t... database dump complete ..." >> $theLog theTimeStamp=$(date +'%d.%m.%Y %H:%M:%S') echo -e "\t... database backup finished, finished at $theTimeStamp." >> $theLog |
#!/bin/bash
timestamp=date +%Y%m%d_%H%M%S
mysqldump -h localhost -uroot -pdaspasswort –all-databases>/backup/mailserver_db_${timestamp}.sql
Fehlerteufel : Damit Ihr nicht genauso Kämpft hier ein kurzer Hinweis :
Die Optionen -u und -p geben den Benutzernamen und das Passwort an.
Wenn man zwischen den Optionen ein Leerzeichen setzt funktioniert die Autorisierung nicht.
Die Option -all-databases gibt an (welch Wunder) das alle Datenbanken gesichert werden.
Diese Option kann aber auch weggelassen werden und anstelle dieser Option kann auch nur der Datenbankname genommen werden.
Falsch : -u root -p daspasswort
Richtig : -uroot -pdaspasswort