Zero111
25.10.2009, 03:17
Um Serverabstürze und Datenverlust zu vermeiden sind regelmäßige Backups Pflicht!!
Nur die meisten sind zu faul diese regelmäßig zu erstellen und wundern sich warum nach einen datenverlust nur 2 Monate alte Daten zu verfügung stehen *g*
Da ich selber auch faul bin hab ich nen script gebastelt dass via Cronjob ausgeführt wird und einmal täglich SQL und Datenbestand sichert und dieses auf ein FTP Server auslagert:
Zur Einrichtung:
Ich habe in den Script 2 Temp Verzeichnisse voreingestellt:
/home/sql (für die Datenbank)
/home/backup (für die Zip)
Diese kann man natürlich ändern..
Jedoch sollten diese Verzeichnisse vor den ersten scriptstart vorhanden sein..
Das Script benötigt Zip und lftp
Ich gehe jetzt davon dass die Verzeichnisse nicht geändert werden:
ich hab es im root Ordner geschmissen /root
Name: backup.sh
##!/bin/sh
#################################################
#################################################
#################################################
##### #####
##### Backup Script #####
##### #####
##### Version 1 #####
##### #####
##### #####
##### Sichert SQL Datenbanken #####
##### #####
##### und Webspace #####
##### #####
##### auf einen FTP Server #####
##### #####
#################################################
################## by Zero111 ###################
#################################################
#################################################
##### #####
##### Initialisierung #####
##### #####
#################################################
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Initialisierung"
# Aktuelles Datum im Format DD.MM.YYYY generieren
DATUM=`date '+%d.%m.%Y'`
###
### Verzeichnisse und Dateinamen
###
# Name der Backup-Datei
BACKUP_FILE="Backup-${DATUM}.zip"
# temporaerer Speicherort des Backup-Archivs
BACKUP_TMP="/home/backup/"
# kompletter Pfad zum Backup
BACKUP=${BACKUP_TMP}${BACKUP_FILE}
# temporarer Speicherirt der Datenbanken
SQL_TEMP="/home/sql/"
# Dateiname der Datenbank 1
DB_1="Datenbank_1${DATUM}.gzip"
# Dateiname der Datenbank 2
DB_2="Datenbank_2${DATUM}.gzip"
# Verzeichnisse die gesichert werden sollen
BACKUP_DATA="/home/sql /verzeichnis2 /verzeichnis3..."
###
### Zugaenge und Passwoerter
###
#### Datenbank 1 ####
# Host
DB_HOST_1="localhost"
# User
DB_USER_1="Username"
# Passwort
DB_PASSWORT_1="Passwort"
# Name
DB_NAME_1="Datenbank"
#### Datenbank 2 ####
# Host
DB_HOST_2="localhost"
# User
DB_USER_2="Username"
# Passwort
DB_PASSWORT_2="Password"
# Name
DB_NAME_2="Datenbank"
#### FTP Daten ####
# Host
FTP_SERVER="Host oder IP Adresse"
# Port
FTP_PORT="21"
# User
FTP_USER="Username"
#Passwort
FTP_PASSWORT="Passwort"
#################################################
##### #####
##### Laufende Prozesse anhalten #####
##### #####
#################################################
# Apache Beenden
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Apache Webserver beenden"
/etc/init.d/apache2 stop
# FTP beenden
echo "[`date '+%d.%m.%Y %H:%M:%S'`] FTP Server beenden"
/etc/init.d/proftpd stop
#################################################
##### #####
##### Sicherung der Daten #####
##### #####
#################################################
# SQL Datenbanken sichern
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Datenbank:${DB_NAME_1} sichern"
mysqldump --add-drop-table --opt -h ${DB_HOST_1} -u ${DB_USER_1} -p${DB_PASSWORT_1} ${DB_NAME_1} | gzip -9c > ${SQL_TEMP}${DB_1}
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Datenbank:${DB_NAME_2} sichern"
mysqldump --add-drop-table --opt -h ${DB_HOST_2} -u ${DB_USER_2} -p${DB_PASSWORT_2} ${DB_NAME_2} | gzip -9c > ${SQL_TEMP}${DB_2}
# lftpt Steuerdatei erstellen
echo "[`date '+%d.%m.%Y %H:%M:%S'`] lftp Steuerdatei erstellen"
touch /root/backup.ftp
echo "#backup.ftp" >> /root/backup.ftp
echo "open ${FTP_SERVER}:${FTP_PORT}" >> /root/backup.ftp
echo "user ${FTP_USER} ${FTP_PASSWORT}" >> /root/backup.ftp
echo "put ${BACKUP}" >> /root/backup.ftp
# Backup Daten sammeln und diese in ein Zip Archiv packen
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Daten sammeln"
zip -r -q ${BACKUP} ${BACKUP_DATA}
# Backup Daten auf FTP uebertragen
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Backup auf FTP Server übertragen"
lftp -f /root/backup.ftp
#################################################
##### #####
##### Abschließende Arbeiten #####
##### #####
#################################################
# Temporaere Daten loeschen
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Temporäre Daten löschen"
rm -f /root/backup.ftp ${BACKUP} ${SQL_TEMP}${DB_1} ${SQL_TEMP}${DB_2}
# Apache starten
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Apache Webserver starten"
/etc/init.d/apache2 start
# FTP starten
echo "[`date '+%d.%m.%Y %H:%M:%S'`] FTP Server starten"
/etc/init.d/proftpd start
### FERTIG ###
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Fertig"
#################################################
######## by Zero111 ######## 25.10.2009 #########
#################################################
Das Script ist ausgelegt auf apache2 und proftpd
Diese beiden Prozesse werden während der Scriptlaufzeit angehalten und danach wieder gestartet. (um Konflikte zu vermeiden)
Das Script kann in den Zustand 2 getrennte Datenbanken sichern (zb Tracker und Forum etc)
Das ist natürlich beliebig erweiterbar.
Bitte überall die Zugangsdaten eintragen!!
Nun zur einrichtung:
aptitude install zip lftp
mkdir /home/sql
mkdir /home/backup
chmod 777 /home/backup.sh
Den Cronjob eintragen
(Hab ich im Web gefunden)
Starten Sie den Befehl crontab -e zum Erstellen oder Editieren Ihrer Cron-Datei, crontab -l zum auflisten der Cron-Jobs oder crontab -r zum löschen der Cron-Jobs.
Eine Zeile in einer Cron-Datei sieht so aus:
1 2 3 4 5 /etc/meinSkript argumente
die fünf Zahlen am Anfang der Zeile repräsentieren folgendes:
1: Minuten (0-59)
2: Stunden (0-23)
3: Tag (1-31)
4: Monat (1-12 oder January, February, March, ...)
5: Wochentag(0-7 oder Monday, Tuesday, Wednesday, ... 0 und 7=Sunday)
Damit können Sie festlegen, zu welchen Zeiten das angegebene Skript gestartet werden soll. Damit jedoch nicht genug, Sie können die Zeiten noch etwas strukturierter angeben und zwar folgendermassen:
*: trifft immer zu
1-4: Bereich, trifft zu wenn 1, 2, 3 oder 4 zutrifft
1-4/2: Schrittweise, also 1 und 3
1,5,6: Aufzählung
*/3: jedes dritte
1-4,10-15: Aufzählung und Bereiche kombiniert
Ausserdem können Sie in der Datei festlegen, mit welcher SHELL die Skripte ausgeführt werden sollen, und wem eine E-Mail mit dem Ergebnis zugesandt werden soll:
SHELL=/bin/bash
MAILTO=mir@localhost
So, nun noch ein paar Beispiele:
# jeden Tag um 0:05
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# am ersten jeden Monats um 14:15
15 14 1 * * $HOME/bin/monthly
# um 22:00 wochentags
0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
# jeden Tag 23 Minuten nach jeder geraden Stunde (0:23, 2:23, ...)
23 0-23/2 * * * $HOME/status.sh
# Sonntags um 4:05
5 4 * * sun $HOME/backup.sh full
Hinweis:
Wochentage und Kalendertage schliessen sich nicht aus, sondern werden getrennt betrachtet. Trifft also eines der beiden zu, wird das Skript ausgeführt.
Ich hab bei uns folgendes eingetragen:
0 4 * * * /root/backup.sh >> /root/backup.log
Das bewirkt dass das Backup jeden Tag um 4:00 ausgeführt wird und die Bildschirmausgabe die das Script erzeugt in der Datei /root/backup.log gespeichert werden.
Am besten jetzt einmal das Script testen ob läuft und ob man sich net verhauen hat bei den Zugängen xD
Sonst steht man dumm da xD
cd /root
./backup.sh
Das Script braucht je nach Datenmenge wenige Minuten
Das Ergebnis sollte so aussehen
[25.10.2009 03:11:39] Initialisierung
[25.10.2009 03:11:39] Apache Webserver beenden
* Stopping web server apache2 [ OK ]
[25.10.2009 03:11:39] FTP Server beenden
* Stopping ftp server proftpd [ OK ]
[25.10.2009 03:11:39] Datenbank:--- sichern
[25.10.2009 03:11:46] Datenbank:--- sichern
[25.10.2009 03:11:47] lftp Steuerdatei erstellen
[25.10.2009 03:11:47] Daten sammeln
[25.10.2009 03:12:08] Backup auf FTP Server übertragen
[25.10.2009 03:12:38] Temporäre Daten löschen
[25.10.2009 03:12:38] Apache Webserver starten
* Starting web server apache2 [ OK ]
[25.10.2009 03:12:38] FTP Server starten
* Starting ftp server proftpd [ OK ]
[25.10.2009 03:12:38] Fertig
So viel spaß damit.. Der nächste Datenbankcrash kann kommen xD
Nur die meisten sind zu faul diese regelmäßig zu erstellen und wundern sich warum nach einen datenverlust nur 2 Monate alte Daten zu verfügung stehen *g*
Da ich selber auch faul bin hab ich nen script gebastelt dass via Cronjob ausgeführt wird und einmal täglich SQL und Datenbestand sichert und dieses auf ein FTP Server auslagert:
Zur Einrichtung:
Ich habe in den Script 2 Temp Verzeichnisse voreingestellt:
/home/sql (für die Datenbank)
/home/backup (für die Zip)
Diese kann man natürlich ändern..
Jedoch sollten diese Verzeichnisse vor den ersten scriptstart vorhanden sein..
Das Script benötigt Zip und lftp
Ich gehe jetzt davon dass die Verzeichnisse nicht geändert werden:
ich hab es im root Ordner geschmissen /root
Name: backup.sh
##!/bin/sh
#################################################
#################################################
#################################################
##### #####
##### Backup Script #####
##### #####
##### Version 1 #####
##### #####
##### #####
##### Sichert SQL Datenbanken #####
##### #####
##### und Webspace #####
##### #####
##### auf einen FTP Server #####
##### #####
#################################################
################## by Zero111 ###################
#################################################
#################################################
##### #####
##### Initialisierung #####
##### #####
#################################################
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Initialisierung"
# Aktuelles Datum im Format DD.MM.YYYY generieren
DATUM=`date '+%d.%m.%Y'`
###
### Verzeichnisse und Dateinamen
###
# Name der Backup-Datei
BACKUP_FILE="Backup-${DATUM}.zip"
# temporaerer Speicherort des Backup-Archivs
BACKUP_TMP="/home/backup/"
# kompletter Pfad zum Backup
BACKUP=${BACKUP_TMP}${BACKUP_FILE}
# temporarer Speicherirt der Datenbanken
SQL_TEMP="/home/sql/"
# Dateiname der Datenbank 1
DB_1="Datenbank_1${DATUM}.gzip"
# Dateiname der Datenbank 2
DB_2="Datenbank_2${DATUM}.gzip"
# Verzeichnisse die gesichert werden sollen
BACKUP_DATA="/home/sql /verzeichnis2 /verzeichnis3..."
###
### Zugaenge und Passwoerter
###
#### Datenbank 1 ####
# Host
DB_HOST_1="localhost"
# User
DB_USER_1="Username"
# Passwort
DB_PASSWORT_1="Passwort"
# Name
DB_NAME_1="Datenbank"
#### Datenbank 2 ####
# Host
DB_HOST_2="localhost"
# User
DB_USER_2="Username"
# Passwort
DB_PASSWORT_2="Password"
# Name
DB_NAME_2="Datenbank"
#### FTP Daten ####
# Host
FTP_SERVER="Host oder IP Adresse"
# Port
FTP_PORT="21"
# User
FTP_USER="Username"
#Passwort
FTP_PASSWORT="Passwort"
#################################################
##### #####
##### Laufende Prozesse anhalten #####
##### #####
#################################################
# Apache Beenden
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Apache Webserver beenden"
/etc/init.d/apache2 stop
# FTP beenden
echo "[`date '+%d.%m.%Y %H:%M:%S'`] FTP Server beenden"
/etc/init.d/proftpd stop
#################################################
##### #####
##### Sicherung der Daten #####
##### #####
#################################################
# SQL Datenbanken sichern
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Datenbank:${DB_NAME_1} sichern"
mysqldump --add-drop-table --opt -h ${DB_HOST_1} -u ${DB_USER_1} -p${DB_PASSWORT_1} ${DB_NAME_1} | gzip -9c > ${SQL_TEMP}${DB_1}
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Datenbank:${DB_NAME_2} sichern"
mysqldump --add-drop-table --opt -h ${DB_HOST_2} -u ${DB_USER_2} -p${DB_PASSWORT_2} ${DB_NAME_2} | gzip -9c > ${SQL_TEMP}${DB_2}
# lftpt Steuerdatei erstellen
echo "[`date '+%d.%m.%Y %H:%M:%S'`] lftp Steuerdatei erstellen"
touch /root/backup.ftp
echo "#backup.ftp" >> /root/backup.ftp
echo "open ${FTP_SERVER}:${FTP_PORT}" >> /root/backup.ftp
echo "user ${FTP_USER} ${FTP_PASSWORT}" >> /root/backup.ftp
echo "put ${BACKUP}" >> /root/backup.ftp
# Backup Daten sammeln und diese in ein Zip Archiv packen
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Daten sammeln"
zip -r -q ${BACKUP} ${BACKUP_DATA}
# Backup Daten auf FTP uebertragen
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Backup auf FTP Server übertragen"
lftp -f /root/backup.ftp
#################################################
##### #####
##### Abschließende Arbeiten #####
##### #####
#################################################
# Temporaere Daten loeschen
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Temporäre Daten löschen"
rm -f /root/backup.ftp ${BACKUP} ${SQL_TEMP}${DB_1} ${SQL_TEMP}${DB_2}
# Apache starten
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Apache Webserver starten"
/etc/init.d/apache2 start
# FTP starten
echo "[`date '+%d.%m.%Y %H:%M:%S'`] FTP Server starten"
/etc/init.d/proftpd start
### FERTIG ###
echo "[`date '+%d.%m.%Y %H:%M:%S'`] Fertig"
#################################################
######## by Zero111 ######## 25.10.2009 #########
#################################################
Das Script ist ausgelegt auf apache2 und proftpd
Diese beiden Prozesse werden während der Scriptlaufzeit angehalten und danach wieder gestartet. (um Konflikte zu vermeiden)
Das Script kann in den Zustand 2 getrennte Datenbanken sichern (zb Tracker und Forum etc)
Das ist natürlich beliebig erweiterbar.
Bitte überall die Zugangsdaten eintragen!!
Nun zur einrichtung:
aptitude install zip lftp
mkdir /home/sql
mkdir /home/backup
chmod 777 /home/backup.sh
Den Cronjob eintragen
(Hab ich im Web gefunden)
Starten Sie den Befehl crontab -e zum Erstellen oder Editieren Ihrer Cron-Datei, crontab -l zum auflisten der Cron-Jobs oder crontab -r zum löschen der Cron-Jobs.
Eine Zeile in einer Cron-Datei sieht so aus:
1 2 3 4 5 /etc/meinSkript argumente
die fünf Zahlen am Anfang der Zeile repräsentieren folgendes:
1: Minuten (0-59)
2: Stunden (0-23)
3: Tag (1-31)
4: Monat (1-12 oder January, February, March, ...)
5: Wochentag(0-7 oder Monday, Tuesday, Wednesday, ... 0 und 7=Sunday)
Damit können Sie festlegen, zu welchen Zeiten das angegebene Skript gestartet werden soll. Damit jedoch nicht genug, Sie können die Zeiten noch etwas strukturierter angeben und zwar folgendermassen:
*: trifft immer zu
1-4: Bereich, trifft zu wenn 1, 2, 3 oder 4 zutrifft
1-4/2: Schrittweise, also 1 und 3
1,5,6: Aufzählung
*/3: jedes dritte
1-4,10-15: Aufzählung und Bereiche kombiniert
Ausserdem können Sie in der Datei festlegen, mit welcher SHELL die Skripte ausgeführt werden sollen, und wem eine E-Mail mit dem Ergebnis zugesandt werden soll:
SHELL=/bin/bash
MAILTO=mir@localhost
So, nun noch ein paar Beispiele:
# jeden Tag um 0:05
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
# am ersten jeden Monats um 14:15
15 14 1 * * $HOME/bin/monthly
# um 22:00 wochentags
0 22 * * 1-5 mail -s "It's 10pm" joe%Joe,%%Where are your kids?%
# jeden Tag 23 Minuten nach jeder geraden Stunde (0:23, 2:23, ...)
23 0-23/2 * * * $HOME/status.sh
# Sonntags um 4:05
5 4 * * sun $HOME/backup.sh full
Hinweis:
Wochentage und Kalendertage schliessen sich nicht aus, sondern werden getrennt betrachtet. Trifft also eines der beiden zu, wird das Skript ausgeführt.
Ich hab bei uns folgendes eingetragen:
0 4 * * * /root/backup.sh >> /root/backup.log
Das bewirkt dass das Backup jeden Tag um 4:00 ausgeführt wird und die Bildschirmausgabe die das Script erzeugt in der Datei /root/backup.log gespeichert werden.
Am besten jetzt einmal das Script testen ob läuft und ob man sich net verhauen hat bei den Zugängen xD
Sonst steht man dumm da xD
cd /root
./backup.sh
Das Script braucht je nach Datenmenge wenige Minuten
Das Ergebnis sollte so aussehen
[25.10.2009 03:11:39] Initialisierung
[25.10.2009 03:11:39] Apache Webserver beenden
* Stopping web server apache2 [ OK ]
[25.10.2009 03:11:39] FTP Server beenden
* Stopping ftp server proftpd [ OK ]
[25.10.2009 03:11:39] Datenbank:--- sichern
[25.10.2009 03:11:46] Datenbank:--- sichern
[25.10.2009 03:11:47] lftp Steuerdatei erstellen
[25.10.2009 03:11:47] Daten sammeln
[25.10.2009 03:12:08] Backup auf FTP Server übertragen
[25.10.2009 03:12:38] Temporäre Daten löschen
[25.10.2009 03:12:38] Apache Webserver starten
* Starting web server apache2 [ OK ]
[25.10.2009 03:12:38] FTP Server starten
* Starting ftp server proftpd [ OK ]
[25.10.2009 03:12:38] Fertig
So viel spaß damit.. Der nächste Datenbankcrash kann kommen xD