Laphroaig_25
Anmeldungsdatum: 23. Juli 2019
Beiträge: Zähle...
|
Hallo, ich hoffe ich bin im richtigen Themenbereich. Ich möchte auf unserem Webspace eine einzelne Datenbank mittels Cronjob sichern.
Ich hab dazu unter diesem Link https://oprtr.org/sicheres-backup-von-mysql-datenbanken-mit-cronjob/ eine Anleitung gefunden. Diese funktioniert bei uns u.a. nicht, da der Hoster den Befehl pixz nicht unterstützt - er empfiehlt als Alternative "tar".
Ich hab daher den Code aus obigen Link abgeändert:
| #!/bin/bash
DATE=$(date +%d%m%Y-%H)
mysqldump -u user -p'passwort' -xxx.mydbserver.com > alldb-"$DATE".sql
sleep 5
tar cfv $HTML/alldb-$DATE.tar
|
Nun bekomme ich aber immer eine leere SQL Datei erzeugt.
Das Script liegt in der obersten Ebene, auf die ich Zugriff habe. Kann mir jemand helfen - was für Angaben wäre noch hilfreich? Hoster ist Mittwald. Was vermutlich ein Problem ist, ist der Bezug zur Datenbank, die ist nicht via localhost erreichbar, sondern über eine URL (xxxx.mydbserver.com) - wo trage ich die wie korrekt ein? Die Distributionsauswahl ist inkorrekt - ich weiss nicht, wo ich die finde ...
Edit: Wie wähle ich die entsprechende Datenbank aus?
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Hallo, wie kommst du auf das Minus-Zeichen vor der URL? Ist die Datenbank wirklich von Außen erreichbar? Laut https://www.mittwald.de/faq/administration/datenbank kannst du per SSH oder über phpMyAdmin auf die Datenbank zugreifen.
|
Laphroaig_25
(Themenstarter)
Anmeldungsdatum: 23. Juli 2019
Beiträge: 5
|
Die Minuszeichen standen in der Anleitung zu der ich den Link veröffentlichte. Die DB ist aktuell nicht von außen erreichbar, das ließe sich aber einrichten. Die Rechte habe ich im Screenshot angehängt.
- Bilder
|
Hoerbert
Anmeldungsdatum: 3. Oktober 2007
Beiträge: 375
|
Hey Laphroaig_25, Laphroaig_25 schrieb: Die Minuszeichen standen in der Anleitung zu der ich den Link veröffentlichte.
Nein, stand es nicht. Im verlinkten Beispiel wird überhaupt keine Host-Angabe verwendet. Was mich dazu bringt, erstmal die genauen Umstände abklären zu wollen: Das Script soll also lokal auf dem gleichen Server laufen, auf dem der Datenbank-Server läuft, korrekt? Wenn ja, dann brauchen wir eigentlich keinen externen Zugriff auf die Datenbank. Was genau soll "-xxx.mydbserver.com" eigentlich sein? Wenn es eine Host-Angabe ist, dann fehlt die Option -h vorweg, wenn es ein Datenbankname ist, dann fehlt die Option -B. Wenn nicht explizit eine Datenbank sondern alle Datenbanken gesichert werden sollen, dann ist wie im Beispiel die Option --all-databases oder -A notwendig. Hast du die Möglichkeit auf deinem Server Befehle per SSH abzusetzen? Wenn ja versuch einfach mal den mysqldump-Aufruf direkt abzusetzen. Dann solltest du eventuelle Fehlermeldungen sehen können und musst nicht immer darauf warten, dass dein Script aufgerufen wird. Und wenn dann die .sql-Datei endlich nicht mehr leer ist, können wir uns um den Rest des Scriptes kümmern.
Weiterhin kannst du auch selbst mal die man-Pages von mysqldump durchstöbern um dich mit den Optionen vertraut zu machen.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
Laphroaig_25 schrieb:
Ich hab daher den Code aus obigen Link abgeändert:
| #!/bin/bash
DATE=$(date +%d%m%Y-%H)
mysqldump -u user -p'passwort' -xxx.mydbserver.com > alldb-"$DATE".sql
sleep 5
tar cfv $HTML/alldb-$DATE.tar
|
Du schreibst da unnötig eine riesige Datei auf die Platte und komprimierst sie erst hinterher. Ich würde das eher so machen: | #!/bin/sh
date=$(date +%d%m%Y-%H)
mysqldump -u user -p'passwort' --single-transaction xxx.mydbserver.com | bzip2 > "alldb-$date.sql.bz2"
|
Edit: Wie wähle ich die entsprechende Datenbank aus?
Siehe Manpage Laphroaig_25 schrieb: Die Minuszeichen standen in der Anleitung zu der ich den Link veröffentlichte. Die DB ist aktuell nicht von außen erreichbar, das ließe sich aber einrichten.
Davon rate ich ab, weil das immer ein Sicherheitsrisiko ist. Für den Betrieb scheinst Du das ja ansonsten nicht zu brauchen. Dann lieber per ssh verbinden und den Dump dann lokal machen.
|
Laphroaig_25
(Themenstarter)
Anmeldungsdatum: 23. Juli 2019
Beiträge: 5
|
Hoerbert schrieb: Hey Laphroaig_25, Laphroaig_25 schrieb: Die Minuszeichen standen in der Anleitung zu der ich den Link veröffentlichte.
Nein, stand es nicht. Im verlinkten Beispiel wird überhaupt keine Host-Angabe verwendet. Was mich dazu bringt, erstmal die genauen Umstände abklären zu wollen: Das Script soll also lokal auf dem gleichen Server laufen, auf dem der Datenbank-Server läuft, korrekt? Wenn ja, dann brauchen wir eigentlich keinen externen Zugriff auf die Datenbank. Was genau soll "-xxx.mydbserver.com" eigentlich sein? Wenn es eine Host-Angabe ist, dann fehlt die Option -h vorweg, wenn es ein Datenbankname ist, dann fehlt die Option -B. Wenn nicht explizit eine Datenbank sondern alle Datenbanken gesichert werden sollen, dann ist wie im Beispiel die Option --all-databases oder -A notwendig. Hast du die Möglichkeit auf deinem Server Befehle per SSH abzusetzen? Wenn ja versuch einfach mal den mysqldump-Aufruf direkt abzusetzen. Dann solltest du eventuelle Fehlermeldungen sehen können und musst nicht immer darauf warten, dass dein Script aufgerufen wird. Und wenn dann die .sql-Datei endlich nicht mehr leer ist, können wir uns um den Rest des Scriptes kümmern.
Weiterhin kannst du auch selbst mal die man-Pages von mysqldump durchstöbern um dich mit den Optionen vertraut zu machen.
Ja, genau das Skript soll lokal auf dem gleichen Server laufen. Der DB-Server läuft extern, aber Zugriffe von diesem Paket wo das Skript gespeichert ist, werden wie interne Zugriffe behandelt.
xxxx.mydbserver.com ist ein Host, ja.
Und es soll nur diese eine DB gesichert werden.
Ja, ich kann per SSH zugreifen. Wenn ich das Skript von rklm nutze und die Datenbank mitaufnehme (mysqldump -b datenbank -u benutzer -p[passwort] --single-transaction -h xxxx.mydbserver.com | bzip2 > "alldb-$date.sql.bz2"), dann bekomme ich keine Fehlermeldung. Das Terminal wartet einfach auf einen neuen Befehl.
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Laphroaig_25 schrieb: mysqldump -b datenbank -u benutzer -p[passwort] --single-transaction -h xxxx.mydbserver.com | bzip2 > "alldb-$date.sql.bz2"
Wie kommst du auf -b und eckige Klammern um das Passwort? Das Beispiel aus https://www.mittwald.de/faq/administration/datenbank/datenbank-exportieren-und-importieren zeigt doch eigentlich schön, was nötig ist:
mysqldump --opt -u'Datenbank-Benutzer' -p'Datenbank-Passwort' -h'Hostname/Datenbank-Server' Datenbank > Datenbank-Datei.sql Wenn man dann die Ausgabe von mysqldump noch an bzip2 weiterleiten will, wäre das z.B.:
mysqldump --opt -u'Datenbank-Benutzer' -p'Datenbank-Passwort' -h'Hostname/Datenbank-Server' Datenbank | bzip2 > "alldb-$(date +%d%m%Y-%H).sql.bz2"
|
Laphroaig_25
(Themenstarter)
Anmeldungsdatum: 23. Juli 2019
Beiträge: 5
|
Das hab ich der Manpage entnommen ...
|
seahawk1986
Anmeldungsdatum: 27. Oktober 2006
Beiträge: 11179
Wohnort: München
|
Ich sehe da nur ein -B , aber kein -b ... - und du willst ja eigentlich nur eine einzelne Datenbank dumpen. Eckige Klammern in Manpages zeigen optionale Argumente - wenn du das Passwort nach -p nicht angibst, fragt dich mysqldump interaktiv danach (macht man normalerweise, damit das Passwort nicht in der History der Shell landet - im Rahmen eines automatisiert laufenden Skripts sieht das dann natürlich anders aus).
|
Laphroaig_25
(Themenstarter)
Anmeldungsdatum: 23. Juli 2019
Beiträge: 5
|
Wenn man dann die Ausgabe von mysqldump noch an bzip2 weiterleiten will, wäre das z.B.:
mysqldump --opt -u'Datenbank-Benutzer' -p'Datenbank-Passwort' -h'Hostname/Datenbank-Server' Datenbank | bzip2 > "alldb-$(date +%d%m%Y-%H).sql.bz2"
So habe ich es nun gemacht und es funktioniert perfekt. Vielen Dank!!!
|