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

MySQL, PostgreSQL, SQLite
oxygen
RSAC
Posts: 2179
Joined: 2002-12-15 00:10
Location: Bergheim

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

Post by oxygen » 2002-12-15 18:00

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ß

mastertec
Posts: 47
Joined: 2002-12-15 17:03
Location: *Rootserver*

Suppi

Post by mastertec » 2002-12-15 18:11

Hoffe dat funzt, wenn mein Server kommt !
Muss ich mir mal den Tread merken :-)

Dankee , hab ich gesucht sows :

Anonymous

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

Post by Anonymous » 2002-12-15 19:50

Und wie ändere ich das script so daß er alle DB's einzelen sichert ?

Mr Spook

floschi
Userprojekt
Userprojekt
Posts: 3388
Joined: 2002-07-18 08:13
Location: München

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

Post by floschi » 2002-12-15 19:53

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 ;)

Anonymous

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

Post by Anonymous » 2002-12-15 19:58

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.

alexn
Posts: 36
Joined: 2002-11-28 15:56

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

Post by alexn » 2002-12-15 20:15

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!

Anonymous

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

Post by Anonymous » 2002-12-15 20:30

Verstehe zwar den Zusammenhang nicht aber ist ja auch egal.

sascha
RSAC
Posts: 1345
Joined: 2002-04-22 23:08

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

Post by sascha » 2002-12-15 21:12

Hi,

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

alexn
Posts: 36
Joined: 2002-11-28 15:56

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

Post by alexn » 2002-12-15 21:21

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

sascha
RSAC
Posts: 1345
Joined: 2002-04-22 23:08

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

Post by sascha » 2002-12-15 21:34

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

oxygen
RSAC
Posts: 2179
Joined: 2002-12-15 00:10
Location: Bergheim

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

Post by oxygen » 2002-12-15 21:49

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.

sascha
RSAC
Posts: 1345
Joined: 2002-04-22 23:08

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

Post by sascha » 2002-12-15 22:11

Hi,

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

flo
RSAC
Posts: 2297
Joined: 2002-07-28 13:02
Location: Berlin

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

Post by flo » 2002-12-16 21:57

@Sascha ... könntest Du das mal langsam wiederholen? Was hast Du gemacht? ;-)

Danke!

Grüße,

flo.

sascha
RSAC
Posts: 1345
Joined: 2002-04-22 23:08

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

Post by sascha » 2002-12-16 23:39

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.

flo
RSAC
Posts: 2297
Joined: 2002-07-28 13:02
Location: Berlin

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

Post by flo » 2002-12-16 23:46

danke!

;-)

Grüße,

flo.

flo
RSAC
Posts: 2297
Joined: 2002-07-28 13:02
Location: Berlin

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

Post by flo » 2002-12-17 02:34

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.

oxygen
RSAC
Posts: 2179
Joined: 2002-12-15 00:10
Location: Bergheim

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

Post by oxygen » 2002-12-19 19:09

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.

alexn
Posts: 36
Joined: 2002-11-28 15:56

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

Post by alexn » 2002-12-21 13:44

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

sascha
RSAC
Posts: 1345
Joined: 2002-04-22 23:08

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

Post by sascha » 2002-12-21 14:41

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 

alexn
Posts: 36
Joined: 2002-11-28 15:56

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

Post by alexn » 2002-12-21 17:13

Danke, Sascha.

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

deepinpowder
Posts: 26
Joined: 2002-08-09 08:20

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

Post by deepinpowder » 2003-03-05 22:30

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ß

sticki
Posts: 11
Joined: 2003-03-13 00:11

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

Post by sticki » 2003-04-02 20:03

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

adjustman
Posts: 1132
Joined: 2003-03-26 23:29
Location: SA

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

Post by adjustman » 2003-04-03 01:43

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? :?:

captaincrunch
Userprojekt
Userprojekt
Posts: 7225
Joined: 2002-10-09 14:30
Location: Dorsten

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

Post by captaincrunch » 2003-04-03 07:34

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).
DebianHowTo
echo "[q]sa[ln0=aln256%Pln256/snlbx]sb729901041524823122snlbxq"|dc

adjustman
Posts: 1132
Joined: 2003-03-26 23:29
Location: SA

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

Post by adjustman » 2003-04-03 22:19

danke. Nun hab ich das alles gemacht. Funzt trotzdem nicht. Wie kann man testen, ob ein Cronjob klappt?