Page 1 of 3

Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-15 18:00
by oxygen
Ich hab mal ein kleines Script geschrieben das täglich die Datenbank repariert, optimiert und danach ein komprimierten Dump macht, den man dann z.B. von zu Hause täglich runterladen kann.

Erstmal legen wir die Verzeichnis /var/backup und /var/backup/logs an. Man kann auch andere verwenden, dann muss man jedoch das script anpassen.

passwort muss durch das mysql-root passwort ersetzten werden. Das script kann man dann z.B. als /usr/local/bin/mysqlbackup speichern. Man sollte es auf jedenfall chmod 700 setzten, damit niemand das root passwort lesen kann.

Hier das Script:

Code: Select all

#!/bin/sh

date=`date -I`

mysqlcheck --all-databases --auto-repair --extended --optimize -uroot -ppasswort >/var/backup/logs/mysqlcheck-$date.log
mysqldump --all-databases -uroot -ppasswort --opt | bzip2 -c > /var/backup/databasebackup-$date.sql.bz2

rm /var/backup/databasebackup-current.sql.bz2
rm /var/backup/logs/mysqlcheck-current.log

ln -s /var/backup/databasebackup-$date.sql.bz2 /var/backup/databasebackup-current.sql.bz2
ln -s /var/backup/logs/mysqlcheck-$date.log /var/backup/logs/mysqlcheck-current.log

dazu fehlt noch der cronjob. Hier wird er jeden Tag um 3:00 ausgeführt:

Code: Select all

0 3 * * * /usr/local/bin/mysqlbackup

Jetzt kann man noch /var/backup per ftp oder www (.htaccess?) erreichbar machen. Dann richtet man zu Hause oder auf einem anderen Server einen cronjob ein, der jeden Tag databasebackup-current.sql.bz2 lädt.
Unter /var/backup/logs kann man die logs von mysqlcheck einsehen.

Fertig ist das automatische tägliche Backup. Ohne Zusatzkosten, es fällt nur Traffic an.

Wenn man das Backup rückspielen möchte kann man folgenden Befehl benutzen:

Code: Select all

bzcat databasebackup-current.sql.bz2 | mysql -uroot -ppasswort

Viel Spaß

Suppi

Posted: 2002-12-15 18:11
by mastertec
Hoffe dat funzt, wenn mein Server kommt !
Muss ich mir mal den Tread merken :-)

Dankee , hab ich gesucht sows :

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-15 19:50
by Anonymous
Und wie ändere ich das script so daß er alle DB's einzelen sichert ?

Mr Spook

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-15 19:53
by floschi
MrSpook wrote:Und wie ändere ich das script so daß er alle DB's einzelen sichert ?
Wie oft willst du diese Frage denn noch posten?

Es gibt keine eingebaute Funktion, die das macht.

Einige haben sich ein PHP-Skript gebaut, dass erstmal alle DB-Namen ausliest und für jden dann mysqldump startet... ich find den Thread aber grad nicht.

Oder wenn's überschaubar ist, dann lass doch ein Backup für jede DB laufen mit mysqldump, dessen Parameter kennst du ja deinen Angaben in dem anderen Thread zufolge in- und auswendig, sollte ja dann kein Problem sein.


Gruß

Olfi ;)

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-15 19:58
by Anonymous
Schon klar aber mir fehlt das wissen das in einem script zusammenzufassen und dann auch noch einen Cron dazu zu setzen daß er das täglich um 2:00 Uhr nachts macht.
Um das geht es mir.

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-15 20:15
by alexn
MrSpook wrote:Schon klar aber mir fehlt das wissen das in einem script zusammenzufassen und dann auch noch einen Cron dazu zu setzen daß er das täglich um 2:00 Uhr nachts macht.
Um das geht es mir.
Na ja, aber sein eigener Provider sein...

EDIT:
Aber die Idee mit mysqlcheck ist gut. Ich hab die gleich mal in meinen Cronjob ergänzt. Vielen Dank!

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-15 20:30
by Anonymous
Verstehe zwar den Zusammenhang nicht aber ist ja auch egal.

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-15 21:12
by sascha
Hi,

mysqlcheck gibts bei mir nicht. Ist das erst ab 4.0 dabei?

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-15 21:21
by alexn
Ne, eigentlich läuft bei uns noch alles auf dem 3.23.x Stamm. Da war aber mysqlcheck auch dabei... Hast du vielleicht ein gekürztes rpm? Probier mal danach zu suchen:
#updatedb
#locate mysqlcheck

Gruß, Alex

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-15 21:34
by sascha
Hi,

ich benutze das SuSE RPM welches ich auf 3.23.54a upgedatet habe. Muss ich vielleicht noch eine bestimmte Option beim /configure angeben? So siehts zur Zeit aus:

Code: Select all

./configure --enable-shared 
        --enable-assembler 
        --enable-large-files 
        --infodir=%{_infodir} 
        --libdir=/usr/lib 
        --libexecdir=/usr/sbin 
        --localstatedir=/var/lib/mysql 
        --mandir=%{_mandir} 
        --prefix=/usr 
        --sysconfdir=/etc 
        --with-mysqld-user=mysql 
        --without-debug 
        --datadir=/usr/share 
        --includedir=/usr/include 
        --with-extra-charsets=complex 
        --with-unix-socket-path=/var/lib/mysql/mysql.sock 
        --without-berkeley-db 
        --without-innodb

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-15 21:49
by oxygen
Also bei mir Zuhause läuft das Standard Paket was bei SuSE 8.1 dabei ist. Und da ist es auch drin.

# mysqlcheck -V
mysqlcheck Ver 1.02 Distrib 3.23.52, for suse-linux (i686)


Hm, versuch mal --with-extra-tools

Sollte aber eigentlich auch so dabei sein.

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-15 22:11
by sascha
Hi,

ich musste einfach nur mysqlcheck im SPEC-File des RPMs (unter %files client) hinzfügen... :wink:

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-16 21:57
by flo
@Sascha ... könntest Du das mal langsam wiederholen? Was hast Du gemacht? ;-)

Danke!

Grüße,

flo.

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-16 23:39
by sascha
Also,

ziemlich am Ende des SPEC-Files gibts diesen Block:

Code: Select all

%files client
%defattr(-, root, root)
%config /etc/mysqlaccess.conf
%doc %{_mandir}/man1/mysql.1.gz
%doc %{_mandir}/man1/mysqlaccess.1.gz
%doc %{_mandir}/man1/mysqladmin.1.gz
%doc %{_mandir}/man1/mysqldump.1.gz
%doc %{_mandir}/man1/mysqlshow.1.gz
/usr/bin/msql2mysql
/usr/bin/mysql
/usr/bin/mysql_find_rows
/usr/bin/mysqlaccess
/usr/bin/mysqladmin
/usr/bin/mysqlbinlog
/usr/bin/mysqldump
/usr/bin/mysqlimport
/usr/bin/mysqlshow
Dort habe ich einfach noch die Zeile /usr/bin/mysqlcheck eingefügt (So ist es auch im SuSE 8.1 RPM)

Der ganze Block sieht jetzt so aus:

Code: Select all

%files client
%defattr(-, root, root)
%config /etc/mysqlaccess.conf
%doc %{_mandir}/man1/mysql.1.gz
%doc %{_mandir}/man1/mysqlaccess.1.gz
%doc %{_mandir}/man1/mysqladmin.1.gz
%doc %{_mandir}/man1/mysqldump.1.gz
%doc %{_mandir}/man1/mysqlshow.1.gz
/usr/bin/msql2mysql
/usr/bin/mysql
/usr/bin/mysql_find_rows
/usr/bin/mysqlaccess
/usr/bin/mysqladmin
/usr/bin/mysqlbinlog
/usr/bin/mysqlcheck
/usr/bin/mysqldump
/usr/bin/mysqlimport
/usr/bin/mysqlshow
Ich habe die Pakete auch wieder unter http://www.server4cash.de/rootforum/mysql/ zum downloaden bereitgestellt.

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-16 23:46
by flo
danke!

;-)

Grüße,

flo.

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-17 02:34
by flo
Habe gerade mein Update gemacht - von dem Original-RPMs von mysql.com auf die MySQL-Max

mysqlcheck ist inzwischen dabei, war es bei der 3.23.53 noch nicht ...

Auf jeden Fall läuft alles so wie vorher. ;-)

Grüße,

flo.

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-19 19:09
by oxygen
Nochwas: Wenn der Check bei großen Datenmengen sehr lange dauert, kann man auch folgendes machen:
Man ersetzt --extended durch --medium-check. Hier ein kleiner Auszug aus der Hilfe:

--extended
If you are using this option with CHECK TABLE, it will ensure that the table is 100 percent consistent, but will take a long time. If you are using this option with REPAIR TABLE, it will run an extended repair on the table, which may not only take a long time to execute, but may produce a lot of garbage rows also!

--medium-check
Faster than extended-check, but only finds 99.99 percent of all errors. Should be good enough for most cases.

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-21 13:44
by alexn

Code: Select all

mysqlcheck --all-databases --auto-repair --extended --optimize -uroot -ppasswort >/var/backup/logs/mysqlcheck-$date.log 
Ich möchte dies gerne an meine /var/log/messages anhängen. Nur wenn ich den Stream mittels ">" umleite, steht in der Messages Datei nur die Ausgabe von mysqlcheck und der Rest fehlt. Wie kann man unter der Shell Strings anhängen anstatt zu ersetzen?

Gruß, Alex

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-21 14:41
by sascha
Hi,

nimm einfach 2 mal das Zeichen für die Umleitung hintereinander also

Code: Select all

mysqlcheck --all-databases --auto-repair --extended --optimize -uroot -ppasswort >> /var/log/messages 

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2002-12-21 17:13
by alexn
Danke, Sascha.

JEtzt bin ich nur noch gespannt, ob es auch mit meiner nächsten Logzusammenfassung funktioniert.

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2003-03-05 22:30
by deepinpowder
Hy,


ich nutze dieses Script für mein tägliches Backup der Datenbank.

Nun mußte ich die Datenbank neu einspielen, aber es kommt immer dieser SQL Fehler, der sich auf diese Zeilen bezieht

Code: Select all

/*!40000 ALTER TABLE votum ENABLE KEYS */;
Lösche ich diese Zeilen aus dem Backup (sql Datei) kann ich das Backup ohne Probleme einspielen.

Mysql Version 3.23.48

Vielen Dank

Gruß

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2003-04-02 20:03
by sticki
hi!
hab das script mal ein wenig abgeändert, da bei mir das automatische löschen der älteren backups nicht funktioniert hat.

Code: Select all

#!/bin/sh 

date=`date -I` 

mysqlcheck --all-databases --auto-repair --extended --optimize -uroot -ppasswort >/var/backup/logs/mysqlcheck-$date.log 
mysqldump --all-databases -uroot -ppasswort --opt | bzip2 -c > /var/backup/databasebackup-$date.sql.bz2 

rm /var/backup/databasebackup-current.sql.bz2 
rm /var/backup/logs/mysqlcheck-current.log 

mv -f /var/backup/databasebackup-$date.sql.bz2 /var/backup/databasebackup-current.sql.bz2 
mv -f /var/backup/logs/mysqlcheck-$date.log /var/backup/logs/mysqlcheck-current.log

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2003-04-03 01:43
by adjustman
also bei mir funzt das script überhaupt nicht. Es gibt auch keine Fehlermeldungen, etc. Muss man das Script evtl. als *.sh speichern?

Und sind das in: date=`date -I` einfache Anführungszeichen oder? :?:

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2003-04-03 07:34
by captaincrunch
also bei mir funzt das script überhaupt nicht. Es gibt auch keine Fehlermeldungen, etc. Muss man das Script evtl. als *.sh speichern?
Nö ... unter Linux haben Dateiendungen keine Relevanz. Du musst das ganze wahrscheinlich noch per chmod u+x ausführbar machen.
Und sind das in: date=`date -I` einfache Anführungszeichen oder?
Nö, das sollen Backticks sein ( SHIFT + die Taste neben DELETE).

Re: Tägliches MySQL-Komplettbackup als Dump. So gehts.

Posted: 2003-04-03 22:19
by adjustman
danke. Nun hab ich das alles gemacht. Funzt trotzdem nicht. Wie kann man testen, ob ein Cronjob klappt?