Sicherung der Datenbanken
Die MySQL-Datenbanken stehen auf einem externen virtuellen Filesystem (/dev/sdb1), dass im Crashfall des MoUSe-Servers bei einer Re-Installation erhalten bleibt.
Zur Sicherung dieser Daten läuft
täglich um 0:03 Uhr das Skript /usr/local/mouse/alle_backup .
Es sichert alle Relationen der in nachstehender Tabelle genannten MySQL-Datenbanken in ASCII-Tabellen (fileencoding=latin1). Alle Backup-Daten stehen
im Verzeichnis /afs/tu-chemnitz.de/admin/MoUSe/DATA/BACKUP.
| gesicherte Datenbank | Unterverzeichnisse | Sicherungsskript | |
| localhost/urz | urz_db_save* | dienste_mgmt_back | |
| localhost/dienste_mgmt | adm_db_save* | db_back | |
| localhost/portal | portal_db_save* | portal_back | |
| localhost/adrdb | adrdb_save* | adr_back | |
| localhost/swdb | swdb_save* | swdb_back | |
| localhost/verbrauchsmaterial | verbr_db_save* | verbr_back | |
| localhost/voip | voip_save* | voip_back |
In "Backup-Daten-Verzeichnis" werden jeweils 10 Sicherungsgenerationen gehalten
Bei Bedarf kann das Skript /usr/local/mouse/alle_backup manuell gestartet werden. Es ruft nacheinander das jeweilige Sicherungsskript (usr/local/mouse/voip_back, /usr/local/mouse/portal_back, usw.) auf. Diese Scripte können bei Bedarf auch manuell einzeln gestartet werden.
Die Datensicherung basiert auf folgendem MYSQL-Kommando:
echo "SELECT * INTO OUTFILE 'filename' FIELDS TERMINATED BY '#' FROM tabelle;" |
mysql --skip-column-names datenbankname -u dbuser -pdbpassword -h localhost
Es kopiert alle Daten der Tabelle tabelle
der Datenbank datenbankname ins File filename.
(Die Angaben für dbuser und dbpasswort
sind im Stahlschrank zu finden.)
Das Spaltentrennzeichen ist das #
filename muß ein vollständiger Pfandname sein.
In jedem Unterverzeichnis wird ausser dem aktuellen Datenbestand im File aktuelle_tabellen_struktur die zum Sicherungszeitpunkt gültige MySQL-Kommandofolge zum Erzeugen aller MySQL-Tabellen (create table ...) abgelegt.
Alle die Datenbanken modifizierenden MySQL-Kommandos werden im File
/var/log/mysql_log/update.999 gespeichert. Dieses File 'rotiert', d.h.
die Files werden nummeriert, wobei immer die letzten drei
Versionen aufbewahrt werden.
Gültig ist immer nur das letzte File.
Das Log-Rotating wird vom Skript /usr/local/mouse/alle_backup
unmittelbar nach der Anfertigung der Backup's ausgeführt.
Das File mit den Update-Logs ist nur mit dem Kommando
/usr/bin/mysqlbinlog /var/log/mysql_log/update.999
lesbar (mehr dazu im Abschnitt "Restore der MYSQL-Datenbanken").
Die Verzeichnisse
Restore der MYSQL-Datenbanken
Bei einem Crash ist zunächst ist zu prüfen, ob die o.g. MYSQL-Datenbanken sowie die Datenbank mysql (DB-Priv's) noch existieren, z.B.
| Datenbank | Arbeitsverzeichnis | Restore-Skript |
| localhost/urz | /afs/tu-chemnitz.de/admin/MoUSe/DATA/BACKUP | restore_db_mouse |
| localhost/dienste_mgmt | /afs/tu-chemnitz.de/admin/MoUSe/DATA/BACKUP | restore_db_dienste_mgmt |
| localhost/adrdb | /afs/tu-chemnitz.de/admin/MoUSe/DATA/BACKUP | restore_adrdb |
| localhost/swdb | /afs/tu-chemnitz.de/admin/MoUSe/DATA/BACKUP | restore_swdb |
| localhost/verbrauchsmaterial | /afs/tu-chemnitz.de/admin/MoUSe/DATA/BACKUP | restore_verbrauchsmaterial |
| localhost/portal | /afs/tu-chemnitz.de/admin/MoUSe/DATA/BACKUP | restore_portal |
| localhost/voip | /afs/tu-chemnitz.de/admin/MoUSe/DATA/BACKUP | restore_voip |
| paulus/urz | /afs/tu-chemnitz.de/admin/MoUSe/EXT_TOOLS/RESTORE | restore_paulus_mouse |
| paulus/dienste_mgmt | /afs/tu-chemnitz.de/admin/MoUSe/EXT_TOOLS/RESTORE | restore_paulus_dienste_mgmt |
| paulus/adrdb | /afs/tu-chemnitz.de/admin/MoUSe/EXT_TOOLS/RESTORE | restore_paulus_adrdb |
| paulus/swdb | /afs/tu-chemnitz.de/admin/MoUSe/EXT_TOOLS/RESTORE | restore_paulus_swdb |
| paulus/verbrauchsmaterial | /afs/tu-chemnitz.de/admin/MoUSe/EXT_TOOLS/RESTORE | restore_paulus_verbrauchsmaterial |
| paulus/portal | /afs/tu-chemnitz.de/admin/MoUSe/EXT_TOOLS/RESTORE | restore_paulus_portal |
| paulus/voip | /afs/tu-chemnitz.de/admin/MoUSe/EXT_TOOLS/RESTORE | restore_paulus_voip |
Für den Fall, dass die Datenbanken neu erzeugt werden müssen und die MYSQL-Zugriffbefugnisse zu setzen sind, muss so vorgegangen werden:
Das Restore-Skript stellt nun einzelne oder alle Tabellen einer Datenbank zurück. Host- (im Normalfall: localhost) und Tabellenname werden abgefragt. Alle existierenden Sicherungen werden zur Auswahl angeboten.
Das Skript löscht in der Datenbank zunächst die rückzustellende Tabelle (bzw. alle Tabellen, die im Backup vorhanden sind) und legt diese neu an.
(Die Skripts zum Rückstellen der Datenbanken auf dem paulus fragen nichts
ab!
Sie laufen nur auf paulus.hrz.tu-chemnitz.de!
Damit werden täglich früh ab 5:00 Uhr
die aktuellen Datenbank-Backups per Cron auf der Entwicklungsmaschine
eingelesen.
Damit wird geprüft, ob die nächtliche Datensicherung erfolgreich war und
zum Restore benutzt werden kann.
Ausserdem kann so auf der Entwicklungsmaschine ständig mit realistischen
Daten(mengen) getestet werden.
)
Alle Restore-Skripts benutzen dieses MYSQL-Kommando:
echo "LOAD DATA INFILE 'filename' INTO TABLE tabelle FIELDS TERMINATED by \"#\";" |
mysql --skip-column-names datenbankname -u dbuser -pdbpassword -h localhost
Es übernimmt die im File filename (vollst. Pfad) enthaltenen Daten
in die Tabelle tabelle der Datenbank datenbankname.
Deshalb benötigt der mysqld-Prozess Lesezugriff zu filename.
filename befindet sich im AFS.
Über die Gruppe urz:dbserver der alle Server, die mit MoUSe zu tun haben, angehören,
wird der Zugang gewährt.
Die vom mysqld für jede Datenbank mitprotokollierten
MySQL-Schreibkommandos können benutzt werden um den topaktuellen
Datenbankzustand wieder herzustellen.
Das File /var/log/mysql_log/update.999 enthält
diese MySQL-Schreibkommandos in einen komprimierten Format.
Das Kommando
/usr/bin/mysqlbinlog /var/log/mysql_log/update.999
erstellt in Stdout eine MySQL-Kommando-Sequenz, die in einer Pipe
nach "mysql" geschickt werden kann.
Die Änderungen an allen Datenbanken stehen in dieser MySQL-Kommando-Sequenz.
Werden nur die Updates für eine Datenbank benötigt, kann so verfahren werden:
cat "tempfilename" | mysql datenbankname -u root -pdb-root-password -h localhost
Kopieren einer Datenbank mit UNIX-Mitteln (nur zur Info)
Prinzipiell kann das Kopieren einer Datenbank auf dem selben Rechner so vorgenommen werden:
Dietmar
Grunewald
Februar 2009