mikrocontroller.net

Forum: PC Hard- und Software Raspberry PI 3: MySQLDump versagt.Es wird kein Fehler zurückgegeben.


Autor: FFFF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute,

Letzte Woche hat mein Serverchen den Geist aufgegeben.(Mein Fehler)
Allerdings ist mir dabvei was aufgefallen:
Ich starte jeden Tag einen Cronetab, welcher mir ein Script ausführt um 
den
MySQL Server zu sichern.
Das hat er auch versucht, allerdings war der MySQLServer down.
Er hat zwar ein Archiv erstellt, die SQL Datei darin hat aber eine
Grösse von 0 byte.
Leider komme ich da aber an keinen Fehlercode dran.

Muss ich als erstes einen Dump ausführen und danach erst das Archiv 
erstellen?

mfG
FFFF


Scriptauszug:
LogDate=$(date "+%A %d.%m.%Y %H:%M:%S")
FileDate=$(date "+%Y_%m_%d_%H_%M")
echo "$LogDate : Create MySQL dump under: $Folder$Filename$FileDate.gz"
echo "$LogDate : Create MySQL dump under: $Folder$Filename$FileDate.gz" 
>>$Folder$LogFileName
sudo /usr/local/mysql4/bin/mysqldump -u$User -p$Password --all-databases 
| pigz --best > $Folder$Filename$FileDate'.gz'
LogDate=$(date "+%A %d.%m.%Y %H:%M:%S")
if [ $? -ne 0 ]; then
    echo "$LogDate : Error creating SQL Stream" >>$Folder$LogFileName
    echo "$LogDate : Error creating SQL Stream"
else
    echo "$LogDate : SQL Dump OK" >>$Folder$LogFileName
    echo "$LogDate : SQL Dump OK"
fi

Autor: c.m. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
$? enthält den returnwert des date befehls

Autor: randy (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

der erste ansatz waere ein "set -x" im bash script, um
zu sehen ob alle variablen sauber im mysqldump call erscheinen.

danach mal ohne pigz arbeiten und in eine normale datei schreiben.

ich vermute das der dump ansich schon nichts ausgibt, sondern ein
fehler kommt.


HTH,
-- randy

Autor: Peter II (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich würde zur Sicherheit immer noch mal schauen was im dem Zip gelandet 
ist. Im einfachsten fall reicht schon die Größe zu prüfen, es sollen 
z.b. nicht mehr als 10% zum letzten backup abweichen.

Oder die Zeit messen wenn das Backup nur 10 Sekunden braucht, stimmt 
etwas nicht.

Autor: Daniel A. (daniel-a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei mysqldump, warum musst du den ganzen Pfad angeben, und warum setzt 
du ein sudo davor?

Sudo könnte fehlschlagen, oder das Passwort von mysqldump.

Tipp, dashier:
sudo /usr/local/mysql4/bin/mysqldump -u$User -p$Password --all-databases | pigz --best > $Folder$Filename$FileDate'.gz'
LogDate=$(date "+%A %d.%m.%Y %H:%M:%S")
if [ $? -ne 0 ]; then

Würde ich so schreiben: (Gegebenenfalls muss man PATH setzen)
LogDate=$(date "+%A %d.%m.%Y %H:%M:%S")
if ! mysqldump -u$User -p$Password --all-databases \
   | pigz --best > "$Folder$Filename$FileDate.gz"
then

Autor: FFFF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel A. schrieb:
> LogDate=$(date "+%A %d.%m.%Y %H:%M:%S")
> if ! mysqldump -u$User -p$Password --all-databases \
>    | pigz --best > "$Folder$Filename$FileDate.gz"
> then

Aktueller Code:
if ! mysqldump -u$User -p$Password --all-databases \
   | pigz --best > "$Folder$Filename$FileDate.gz"
then
   LogDate=$(date "+%A %d.%m.%Y %H:%M:%S")
   echo "$LogDate : Error creating SQL Stream" >>$Folder$LogFileName
   echo "$LogDate : Error creating SQL Stream"
else
   LogDate=$(date "+%A %d.%m.%Y %H:%M:%S")
   echo "$LogDate : SQL Dump OK" >>$Folder$LogFileName
   echo "$LogDate : SQL Dump OK"
fi



Ausgabe aber leider:
/usr/local/sbin/MySQLBackup.sh: Zeile 43: mysqldump: Kommando nicht 
gefunden.
Mittwoch 10.08.2016 08:26:36 : SQL Dump OK


Zeile 43:
if ! mysqldump -u$User -p$Password --all-databases \

Autor: SR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann wirst du wohl den kompletten Pfad angeben müssen.
which mysqldump gibt dir vielleicht einen.


Oder aber:

Daniel A. schrieb:
> (Gegebenenfalls muss man PATH setzen)

Autor: FFFF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sod.Pfad ist angegeben.
Dump funktioniert.
Habe nun den Server gestoppt.
Resultat:

mysqldump: Got error: 2002: Can't connect to local MySQL server through 
socket '/usr/local/mysql4/var/mysqld.sock' (2) when trying to connect
Mittwoch 10.08.2016 08:46:00 : SQL Dump OK


Also so funktioniert es auch nicht :-(

Autor: Soeren K. (srkeingast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FFFF schrieb:
> if ! mysqldump -u$User -p$Password --all-databases \

mysqldump -u $User -p"$Password" --all-databases


Das manual ist dein Freund.

Autor: FFFF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nochmals, das Problem, um was es geht:

FFFF schrieb:
> Hallo Leute,
>
> Letzte Woche hat mein Serverchen den Geist aufgegeben.(Mein Fehler)
> Allerdings ist mir dabvei was aufgefallen:
> Ich starte jeden Tag einen Cronetab, welcher mir ein Script ausführt um
> den
> MySQL Server zu sichern.
> Das hat er auch versucht, allerdings war der MySQLServer down.
> Er hat zwar ein Archiv erstellt, die SQL Datei darin hat aber eine
> Grösse von 0 byte.
> Leider komme ich da aber an keinen Fehlercode dran.

Das MySQLDumping funktioniert.

Wenn was schief geht, wird eine GZ Datei ohne Inhalt erstellt.
In der Logfile wird immer "SQLDump OK" eingetragen, obwohl ein Fehler 
auftritt.

Nicht nur "Das Manual lesen"

Autor: TestX (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau dir mal den zweiten beitrag hier im thread an. Dort steht das 
problem wieso sowas immlog steht. Dein log schreibt nämlich nur müll

Autor: Soeren K. (srkeingast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FFFF schrieb:
> Das MySQLDumping funktioniert.

Das funktioniert erst, und erst dann kannst du nach weiteren Problemen 
suchen, wenn dein mysqldump-"Befehl" auf der Bash funktioniert.


Das hier:

if ! mysqldump -u$User -p$Password --all-databases \
   | pigz --best > "$Folder$Filename$FileDate.gz"


Gibt doch auch nur wieder das Ergebnis von pigz zurück. Und das wird 
nicht fehlschlagen.

: Bearbeitet durch User
Autor: FFFF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mein code sieht nun wie folgt aus:

LogDate=$(date "+%A %d.%m.%Y %H:%M:%S")
FileDate=$(date "+%Y_%m_%d_%H_%M")
echo "$LogDate : Create MySQL dump under: $Folder$Filename$FileDate.gz"
echo "$LogDate : Create MySQL dump under: $Folder$Filename$FileDate.gz" 
>>$Folder$LogFileName
if ! /usr/local/mysql4/bin/mysqldump -u$User -p$Password --all-databases 
| pigz --best > "$Folder$Filename$FileDate.gz"
then
LogDate=$(date "+%A %d.%m.%Y %H:%M:%S")
echo "$LogDate : Error creating SQL Stream" >>$Folder$LogFileName
echo "$LogDate : Error creating SQL Stream"
else
LogDate=$(date "+%A %d.%m.%Y %H:%M:%S")
echo "$LogDate : SQL Dump OK" >>$Folder$LogFileName
echo "$LogDate : SQL Dump OK"
fi

Was stimmt nun?
Die Lösung von Daniel Abrecht?

Autor: Lukey S. (lukey3332)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach mal
mysqldump -u$User -p$Password --all-databases \
    | pigz --best > "$Folder$Filename$FileDate.gz"
if [[ ${PIPESTATUS[0]} -gt 0 ]]
then
...

http://stackoverflow.com/questions/1221833/bash-pi...

BTW: Falls du genug Ram frei hast, empfehle ich lrzip.

Autor: Soeren K. (srkeingast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FFFF schrieb:
> /usr/local/mysql4/bin/mysqldump -u$User -p$Password --all-databases

Geht dieser Teil denn ohne das restliche drumherum? Die If-Abfrage wird 
nicht gehen, hatte ich zwei Beiträge weiter oben geschrieben.

FFFF schrieb:
> Was stimmt nun?
> Die Lösung von Daniel Abrecht?

Viele Wege führen nach Rom.

: Bearbeitet durch User
Autor: FFFF (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
/usr/local/mysql4/bin/mysqldump -u$User -p$Password --all-databases \
| pigz --best > "$Folder$Filename$FileDate.gz"
if [[ ${PIPESTATUS[0]} -gt 0 ]]
then


Funktioniert. Dankeschön :-D

Autor: Sheeva P. (sheevaplug)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FFFF schrieb:
> Scriptauszug:
> LogDate=$(date "+%A %d.%m.%Y %H:%M:%S")
> FileDate=$(date "+%Y_%m_%d_%H_%M")
> echo "$LogDate : Create MySQL dump under: $Folder$Filename$FileDate.gz"
> echo "$LogDate : Create MySQL dump under: $Folder$Filename$FileDate.gz"
>>>$Folder$LogFileName
> sudo /usr/local/mysql4/bin/mysqldump -u$User -p$Password --all-databases
> | pigz --best > $Folder$Filename$FileDate'.gz'
> LogDate=$(date "+%A %d.%m.%Y %H:%M:%S")
> if [ $? -ne 0 ]; then
>     echo "$LogDate : Error creating SQL Stream" >>$Folder$LogFileName
>     echo "$LogDate : Error creating SQL Stream"
> else
>     echo "$LogDate : SQL Dump OK" >>$Folder$LogFileName
>     echo "$LogDate : SQL Dump OK"
> fi

"sudo mysqldump" ergibt keinen Sinn -- schon gar nicht, wenn mysqldump 
sich ohnehin mit Username und Passwort am MySQL-Server anmeldet.

Vermutlich ist das sudo hier auch das Problem, das erwartet nämlich 
normalerweise eine interaktive Paßworteingabe, wenn Du es nicht explizit 
mit der "NOPASSWD"-Option eingerichtet hast. Durch die Verwendung der 
Shell Redirection wird dann zwar eine leere Datei angelegt, aber sudo 
wartet dann ewig auf die Eingabe eines Paßwortes, ruft daher mysqldump 
gar nicht auf und dieses liefert dann keine Daten an pigz...

Außerdem würde ich das wiederholte "$Folder$Filename$FileDate" sowie 
"$Folder$LogFileName" einfach eigenen Variablen zuweisen und dann diese 
benutzen. Es mehrmals zu konstruieren ist unelegant und fehleranfällig. 
Schon die zweimalige Zuweisung an "LogDate" ist unschön und obendrein 
fehlerhaft: dadurch kommen Leerzeichen in Deine Dateinamen, die darum 
gequotet ("") werden müßten. (Wobei ich grundsätzlich von der Nutzung 
von Leerzeichen in Dateinamen abrate, weil diese bei Shelltools immer 
wieder zu fehleranfälligen Verrenkungen führen.) Expandier das einfach 
mal: aus
LogDate=$(date "+%A %d.%m.%Y %H:%M:%S")
echo "a" > ${LogDate}
führt zu:
echo "a" > Mittwoch 10.08.2016 09:57:40
Das ist vermutlich nicht das, was Du willst. (Ansonsten rate ich eher 
dazu, Sekunden seit Epoch zu benutzen (date +"%s") oder wenigsten ein 
ISO-Datum (date -Iseconds).)

Weiterhin würde ich die Logmeldungen nicht in separate Dateien, sondern 
über logger(1) ins Syslog schreiben. Da gehören solche Logdaten nämlich 
hin (nicht umsonst haben UNIX-Systeme ein sehr umfangreiches, zentrales 
Logging),  schon alleine damit klassische Logmonitore wie logcheck oder 
"richtige" Monitoringlösungen wie Icinga oder Zabbix das sehen können.

Im Übrigen ist der Rückgabewert eines erfolgreichen Shellkommandos in 
der Regel NICHT 0, sondern 1 -- das dürfte auch für mysqldump gelten. 
Zudem bist Du Dir hoffentlich darüber im Klaren, daß Du nicht den 
Rückgabewert von mysqldump, sondern den von pigz überprüfst.

Autor: ./. (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
> Im Übrigen ist der Rückgabewert eines erfolgreichen Shellkommandos in
> der Regel NICHT 0, sondern 1

Unfug.

Autor: Dirk D. (dicky_d)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sheeva P. schrieb:
> Im Übrigen ist der Rückgabewert eines erfolgreichen Shellkommandos in
> der Regel NICHT 0, sondern 1 -- das dürfte auch für mysqldump gelten.
> Zudem bist Du Dir hoffentlich darüber im Klaren, daß Du nicht den
> Rückgabewert von mysqldump, sondern den von pigz überprüfst.


In welcher Welt lebst du?

$ true ; echo $?
0

$ false ; echo $?
1

Autor: Sheeva P. (sheevaplug)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
./. schrieb:
>> Im Übrigen ist der Rückgabewert eines erfolgreichen Shellkommandos in
>> der Regel NICHT 0, sondern 1
>
> Unfug.

Upsi, haste Recht. Memo to self: erst Kaffee, dann posten.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.