mysqldump per sh Script

  • Hallo Leute,


    habt ihr vielleicht einen Tipp für folgendes Problem?


    ich möchte gerne einen MYSQL Dump erzeugen von einer Datenbank per Shell Script.

    Der Dump soll in ein Verzeichnis gepackt werden mit Datum und Uhrzeit.


    Ich bekomme immer diese Fehler Meldung: mysqldump: Couldn't find table: ""

    ich möchte aber nicht eine Table sichern sondern die gesamte Datenbank.


    Hier der Code im Script


    Bash
    #!/bin/bash
    #
    /usr/bin/mysqldump kxxxxx_meinedatenbank -h10.35.xxx.xxx -uBenutzer -pPasswort > /var/www/vhosts/hostingxxxxxxx.netcup.net/verzeichniswohingesichrtwird/kxxxxx_meinedatenbank.`date +\%y\%m\%d\_%T`.sql                                   

    gruß, talkuvit

  • Müssen nicht zwischen den Optionen -u und -h jeweils Leerzeichen (bzw. es ist die Ausnahme bei "Passwort", dass dort kein Leerzeichen ist). Ansonsten wird davon vermutlich irgendwas als Tablename interpretiert.


    /usr/bin/mysqldump -h 10.35.xxx.xxx -u Benutzer -pPasswort kxxxxx_meinedatenbank > ...


    Edit: Sind irgendwelche "schlechten" Zeichen im Passwort? Im Bereich bash insbesondere {}'\ Dann könnte --password='P4ssW0\'rt' helfen.

  • Habe beides mal ausprobiert.

    Ohne Erfolg.

    Also wenn ich diese Fehlermeldung "mysqldump: Couldn't find table: """ richtig interpretiere, kann er sich ja mit der Datenbank verbinden.

    Nur er "versteht" er soll dann nicht die ganze Datenbank sichern, sondern nur einzelne Tabellen.

    Was ja NICHT gewollt ist. Es soll ja ein kompletter DUMP erzeugt werden.!

    Gibt es nicht noch einen Befehl der expliziert sagt das er alle Tabellen sichern soll?

  • Auf einem Expert Light Webhosting funktioniert das hier einwandfrei:

    Code
    mysqldump -h 10.YY.YYY.YY -u kXXXXX_test -pMYSECRETPASSWORD kXXXXX_test

    Genauso mit --all-databases statt dem Datenbanknamen. Auch als Cronjob klappt es problemlos:

    Bash
    #!/bin/bash
    mysqldump -h 10.YY.YYY.YY -u kXXXXX_test -pMYSECRETPASSWORD kXXXXX_test > /home/test.sql

    Aber prinzipiell hast Du schon recht: Wenn diese Fehlermeldung erscheint, stimmen die Zugangsdaten schon einmal. Daran kann es also nicht liegen, auch nicht an Sonderzeichen im Passwort. Ändert sich die Fehlermeldung, wenn Du den Befehl direkt über SSH ausführst, ohne Umleitung in eine Datei?


    EDIT: Du machst allerdings einen ganz anderen Fehler: Das Verzeichnis darf nicht aus Sicht des Webservers angegeben werden! Statt /var/www/vhosts/hostingxxxxxxx.netcup.net/verzeichniswohingesichrtwird/ muss es nur /verzeichniswohingesichrtwird/ sein, da alles im Chroot ausgeführt wird. Das sollte aber nicht Ursache des ursprünglichen Problems sein…



    MfG Christian

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

    2 Mal editiert, zuletzt von KB19 ()

  • Alle Tabellen werden gesichert indem kein Tabellenname hinter dem Datenbanknamen (siehe manpage) angegeben wird. Das heißt irgendein Argument aus deinem Befehl wird als leerer Tabelenname interpretiert.


    Probier mal bitte folgendes (nicht mysqldump), um auszuschließen, dass Sonderzeichen im Passwort das Problem sind und zu verifizieren, dass die Verbindung zur Datenbank klappt:

    mysql -h 10.YY.YYY.YY -u kXXXXX_test --password='MYSECRETPASSWORD' kXXXXX_test -e "SHOW TABLES"

  • Hallo alle zusammen!


    @alle

    Ich habe nun die Datei nochmal per Hand neue aufgesetzt. Ich vermute auch das sich da wie irgendwie ein Zeichen (Leerzeichen reicht da ja schon aus) mit interpretiert worden ist.


    KB19

    den Verzeichnispfad habe ich so belassen und es funktioniert.

    Die Webseiten liegen im Ordner httpdocs und das Script liegt eine Ebene höher in einem Ordner.

    Aber könnte es jetzt aus deiner Sicht da speziell Probleme geben wenn ich nun auch Dateien/Ordner mir als ZIP oder TAR packen möchte?


    @alle

    was für Editoren nutzt Ihr?

    So das mir wirklich "alle" Zeichen angezeigt werden die in einer Datei stehen.


    gruß, talkuvit