phpbar.de logo

Mailinglisten-Archive

[php] Automatisches MySQL-Backup per Email...

[php] Automatisches MySQL-Backup per Email...

Oliver Michalak php_(at)_phpcenter.de
Fri, 29 Jun 2001 05:03:39 +0200


>Ich arbeite momentan an einem ziemlich grossen Projekt. Die Datenbank w=
ird
>ziemlich oft geupdatet und is leider auch relativ gross.
>Nun will mein Kunde dass alle 1000 Besucher automatisch ein BackUp der
>MySQL-DB erstellt wird und an eine von ihm vorgegebene Adresse geschick=
t
>wird.

Hoffentlich ist das ein Diskussionsanfang =FCber eine M=F6glichkeit, die=
 ich
durchgef=FChrt habe und f=FCr nicht gerade optimal halte:

Erste Variante: per Script oder cron-Job auf Dateiebene die
Datenbankdateien (oft IMHO in /usr/var/mysql) kopieren und anschlie=DFen=
d
gzippen oder wie auch immer backuppen. Vorteil: sollte am schnellsten
sein. Nachteil: die Daten des mysqld m=FCssen zuvor geflushd werden, son=
st
ist der gesicherte Datenbestand nicht korrekt und es d=FCrfen w=E4hrend =
des
Kopierens keine neue Daten geschrieben werden. Beides erreicht man
sicherlich damit, dass MySQL kurzzeitig sauber heruntergefahren wird
(oder durch flushen und anschlie=DFendem "Locken" der Tabellen). Darauf =
hat
jedoch nicht jeder Zugriff!

Anderer Ansatz: Theoretisch kann man bei MySQL ein "select blabliblub
into outfile" initiieren, so dass auf MySQL-Ebene der Datenbestand in
eine Datei gesichert wird. Vorteil: man kann sich sicher sein, dass zu
diesem Zeitpunkt keine weitere Schreiboperationen innerhalb der Tabelle
stattfinden (Datenkonsistenz), und es werden die Datenbest=E4nde in eine=
m
Format geschrieben, das auch nahtlos wieder gelesen werden kann (insert
into blabliblub from outfile). Nachteil: in einem Projekt klappte es bei=

Puretec nicht, da MySQL keinen Schreibzugriff auf das entsprechende
Verzeichnis hat (das ist nur vereinfacht dargestellt, selbst mit dem
Freigeben aller von mir ver=E4nderbaren und irgendwie betroffenen Ordnde=
rn
hat es nicht funktioniert).

Alternative (Dank an phpMyAdmin):
Ich lese aus jeder Datenbank die Inhalte aus (select * from blabliblub)
und generiere in einer Datei hunderte von sql-insert-Kommandos, die bei
einem Ausfall das Wiedereinspielen durch SQL-Kommandos simuliert.
Vorteil: klappt mit jeder PHP/MySQL-Installation, sofern man nur
Schreibrechte auf ein Verzeichnis besitzt. Nachteil: neben den obigen
Sync-Problemen ist es langsamer und bei bin=E4ren Datenbest=E4nden siche=
rlich
auch mit erheblichem Datenumfang verbunden (bin=E4r->ascii).

Sind die Daten erstmal auf Dateiebene gesichert, kann dies dann noch
gziped werden (sofern installiert) und eventuell per EMail verschickt
werden (ich verschicke sie nicht per EMail, da ich annehme, dass in dem
Fall einer Standard-php-Installation eine Datei maximal 8MB gro=DF werde=
n
kann (php-Speicherlimit) und ich zudem sendmail doch st=E4rker belaste,
vielmehr speichere ich die Dateien in einem passwortgesch=FCtzten Ordner=

der HTML-Pr=E4sentation, aus dem heraus bei Bedarf ein HTML-Download
initiiert werden kann - nebenei: da Puretec die HTML-Datenbest=E4nde
h=E4ufiger sichert bin ich damit auf der sicheren Seite).

Kommentare hierzu sind willkommen...

-- 
Oliver Michalak
www.werk01.de / omich_(at)_werk01.de / 0177-75 75 393



php::bar PHP Wiki   -   Listenarchive