Koontz: Übertragung von MySQL-Datenbank von Windows auf UNIX

Hi,

ich habe auf einem Windows-System eine MySQL-Datenbank erstellt. Diese habe ich nun per FTP auf einen UNIX-Server kopiert. Dieser wird über Confixx verwaltet. Wenn ich auf diesem nun die Datenbank in das dortige MySQL-Verzeichnis kopiere, wird die Datenbank zwar erkannt, man kann jedoch keine neuen Daten einfügen. Es kommt immer die Fehlermeldung "Table XXX is read only". Das kuriose ist, dass ich den Tabellen über CHMOD schon alle Schreib- und Leserechte gegeben habe. Also woran kann das liegen?
Ich sitze nun schon seit zwei Tagen an diesem Problem und komme einfach nicht weiter. Wäre super, wenn mir jemand helfen könnte.

Gruss,
Koontz

  1. Hi Koontz,

    die Datenbankdateien sollte man nicht einfach rüberkopieren. Exportiere die gesamte Datenbank mit mysqldump und spiel sie auf dem Unixsystem wieder ein. Falls Du phpMyAdmin verwendest kannst Du Sie auch dort über die Exportfunktion exporieren, und das entstehende SQL Script auf dem Zielsystem einspielen.

    Gruss

    Marko

    1. Besten Dank. Also wenn ich die Datenbank mit PHPMyAdmin exportiere, habe ich quasi eine grosse SQL-Anweisung, welche ich nur noch auf dem Zielsystem einspielen muss? Das wäre ja genial :-)

      1. Je nach grösse der DB könnte das aber auch eine seeehhhr grosse Anweisung werden, die die Fähigkeiten von PHP überfordert (bzw. an die eingestellten grenzen stösst). hab da schon viel Erfahrung mit :D

        Marc

  2. Hallo,
    die Empfehlung das über dump einzufügen
    ist Quatsch, bzw. je nach Datenmenge.
    Bereits ab Tabellen mit ein paar tausend
    Einträgen geht da gar nichts mehr bei Raufspielen.

    Ich mache es immer so dass ich die Datenbanken
    immer direkt per FTP ins Mysql Tabellenverzeichniss lege.

    Probleme können auftreten wenn Fehler in
    den Tabellen sind, doch die kann man mit
    REPAIR TABLE tabelle  in PHPMyADMIN
    lösen.

    Ich glaube dass dies der Fall bei deinem
    Problem ist. Deshalb solltest du Tabelle mit
    der Fehlermeldung mal nicht einspielen/überspringen und
    sehen was passiert.
    Bzw. Jede Tabelle einzeln.
    Jede Tabelle besteht aus 3 Dateien:
    MYD
    MYI
    frm

    Übrigens: Ich hatte schon mal das Problem
    dass beim Raufspielen die Tabellenendungen (Gross_kleinschreibung)
    verändert wurden. FTP Einstellung. Weiss nicht ob man da
    was beim Confixx einstellen kann.

    Ein anderes Problem kann sein dass unerlaubte Zeichen
    in falschem Feldtyp vorhanden sind.
    Eine Eigenart von Mysql ist manchmal Einträge anzunehmen
    auch wenn diese nicht rein dürfen.

    Dies kannst du prüfen indem du die Problemtabelle
    mal mit Hilfe von phpmyadmin auf dem Server selber kopierst
    sozusagen als Backup. Dann siehst du ob eine Fehlermeldung
    erscheint.

    Gruss Nikki

    1. Hallo!

      die Empfehlung das über dump einzufügen
      ist Quatsch, bzw. je nach Datenmenge.
      Bereits ab Tabellen mit ein paar tausend
      Einträgen geht da gar nichts mehr bei Raufspielen.

      Das kannst Du so nicht sagen, hängt zum einen von der Tabelle ab, aber vor allem von den Rechten die Du auf dem Server hast. Ich kann den Dump bequem gezippt(dann ist er nicht viel größer als eine CSV-Datei) per FTP hochladen, und über die Shell in die Datenbank einlesen.

      Ich mache es immer so dass ich die Datenbanken
      immer direkt per FTP ins Mysql Tabellenverzeichniss lege.

      _das_ ist IMHO nicht der heiße Tipp. Kennst Du Dich mit den verschiedenen MySQL-Versionen so gut aus dass Du sicherstellen kannst das das Format 100%ig gleich ist?

      Probleme können auftreten wenn Fehler in
      den Tabellen sind, doch die kann man mit
      REPAIR TABLE tabelle  in PHPMyADMIN
      lösen.

      Wenn Du schon sowas brauchst dann bestätigt sich meine obige Vermutung. Das kann es wohl nicht sein. Was mit den Fehlern die Du nicht sofort bemerkst und die nicht von REPAIR TABLE behoben werden?

      Ein anderes Problem kann sein dass unerlaubte Zeichen
      in falschem Feldtyp vorhanden sind.
      Eine Eigenart von Mysql ist manchmal Einträge anzunehmen
      auch wenn diese nicht rein dürfen.

      Dies kannst du prüfen indem du die Problemtabelle
      mal mit Hilfe von phpmyadmin auf dem Server selber kopierst
      sozusagen als Backup. Dann siehst du ob eine Fehlermeldung
      erscheint.

      nachdem Du hier selbst einige Probleme beschreibst, nenne mir bitte einen Vorteil zu einem echten Import! Der einzige Vorteil der mir einfällt ist das Du Dir die Rocourcen sparst die einmal für den Import vom mysql Kommandozeilen-tool verbraucht werden, aber wenn Du schon auf das MySQL-Datenverzeichnis zugreifen kannst wirst Du wohl kaum in der Shell derart beschränkt sein.

      Grüße
      Andreas

      1. Lieber Andreas,
        Ja ich habe alle Rechte, weil eigener Server,
        aber du machst den gleichen Denkfehler,
        wie viele Buchautoren.

        Diese schreiben nämlich auch immer Sachen und gehen davon
        aus dass der Laie damit umgehen kann.

        Nur wer sich mit solchen Sachen auskennt z.B.
        Shellbefehle braucht in der Regel auch keine Hilfe.

        Deshalb sind oft Anfänger Bücher schlecht geschrieben.
        Nicht gegen dich ;-)
        Musste ich mal los werden ;-))

        Ok, aber der Punkt ist wirklich:
        Ich persönlich traue mich an Befehlsoperationen nicht
        ran, weil man diese auch schlecht rückgängig
        machen kann falls falsch.

        So und die möglichen Probleme,
        waren nur ein Vielleicht. In der Regel klappts perfekt.

        Meistens sind Fehler in der Tabelle schuld
        und damit hat man dann auch beim Dump zu kämpfen.

        Gruss Nikki

        1. Hallo Nicole,

          hm, also ganzer Quatsch ist Dump sicher nicht, da es meines Wissens der vom Hersteller Vorgesehne Weg ist. Auf Grenzen bin ich bisher noch nicht mit gestoßen, halte ich aber für gut möglich dass es damit irgendwann Probleme gibt. Bei phpMyAdmin erschlagen Dich wahrscheinlich recht schnell irgendwelche Limits.
          Aber die Datenbanktabellen direkt hochzuladen kann ziemlich gefährlich sein, da dieser Weg wohl einfach nicht vorgesehen ist, und Du Dich nie drauf verlassen kannst, dass Die Datenbank intern so implementiert ist dass es problemlos geht. MySQLDump ist halt das Backupwerkzeug vom Hersteller, wenn Du anfängst Dateien zu kopieren ist das so wie wenn Du anfängst Programm oder Treiberdateien ohne Installation von Computer zu Computer direkt zu kopieren, kann funktionieren, kann aber auch in die Hose gehen.
          Wenn es mit dem Dump Probleme gibt würde ich mal auf MySQL.com nachforschen, was die Entwickler als Problemlösung vorsehen, das Problem hast nämlich mit Sicherheit nicht Du allein.

          Gruss

          Marko

          1. Hallo nochmal,

            O.K. hab nochmal selber nachgeschaut, Du hast tatsächlich recht, im Manual steht ausdrücklich, kopieren der Tabellen ist erlaubt, man muss nur vorher durch ein Table Lock und Flushen der Tabelle sicherstellen, dass die Datenbank auf der Festplatte konsistent ist.

            Gruss

            Marko

            1. Also ich habe mir "mysqldump" jetzt mal angesehen, werde aber nicht richtig schlau daraus. Bevor ich mich jetzt durch dicke Anleitungen quälen muss, könnt Ihr mir meine Fragen vielleicht kurz beantworten:
              Wenn ich von einer Datenbank ein Backup mache, was wird dann erstellt? Eine einzelne Texdatei oder mehrere Dateien?
              Nehmen wir an, ich möchte von der kompletten Datenbank "Test" mit mysqldump ein Backup machen um es dann auf einem Unix-System wieder einzuspielen. Wie müsste dann der Aufruf zum erstellen des Backups lauten und wie zum wieder einfügen?

              Gruss,
              Koontz

              1. Hallo!

                Also ich habe mir "mysqldump" jetzt mal angesehen, werde aber nicht richtig schlau daraus.

                was hast Du Dir angesehen?

                Bevor ich mich jetzt durch dicke Anleitungen quälen muss,

                http://www.mysql.com/doc/de/mysqldump.html ist jawohl nicht wirklich lang. Unter der Beschreibung der Optionen stehen Beispiele.

                Wenn ich von einer Datenbank ein Backup mache, was wird dann erstellt? Eine einzelne Texdatei oder mehrere Dateien?

                Zitat aus obiger Quelle:
                "Der Dump enthält SQL-Statements, um Datenbanken und Tabellen zu erzeugen und / oder Tabellen mit Daten zu füllen."

                Das ist das was das Programm mysqldump macht. Es gibt alle SQL-Statements hintereinander aus. Diese Ausgabe kann man jetzt mit > in einer Datei leiten, siehe Beispiele:

                mysqldump --opt datenbank > datensicherung.sql
                ...

                Nehmen wir an, ich möchte von der kompletten Datenbank "Test" mit mysqldump ein Backup machen um es dann auf einem Unix-System wieder einzuspielen. Wie müsste dann der Aufruf zum erstellen des Backups lauten und wie zum wieder einfügen?

                Das habe ich oben doch gepostet, guck Dir die Beispiele an. Hast Du es mal probiert? Wenn es nicht geklappt hat - welche Fehlermeldung ist aufgetreten?

                Vermutlich mußt Du Benutzernamen und Passwort angeben:

                mysqldump --opt --user=dein_benutzername --password=dein_passwort datenbank > datensicherung.sql

                entsprechend der import:

                mysql --user=dein_benutzername --password=dein_passwort datenbank < datensicherung.sql

                Dazu musst Du auf _beiden_ Servern Shell-zugriff haben!

                Grüße
                Andreas

            2. Hi!

              O.K. hab nochmal selber nachgeschaut, Du hast tatsächlich recht, im Manual steht ausdrücklich, kopieren der Tabellen ist erlaubt, man muss nur vorher durch ein Table Lock und Flushen der Tabelle sicherstellen, dass die Datenbank auf der Festplatte konsistent ist.

              Hast Recht, wobei ich mich glaueb zu erinnern mal gelesen haben das das nicht mit allen Tabellentypen so ohne weiteres geht, und das es auch Kompatibilitäts-Probleme mit alten mySQL-Versionen geben soll, finde dazu aber leider nichts. Kann mich auch irren.
              Aber wenn mysqlhotcopy das macht dann wird das wohl gut funktionieren, nur muss man manuell die Tabelle vorher sperren, naja, bei mysqldump sollte man das wohl auch machen(--opt), nur hat nicht jeder User zugriff eben auf diese Verzeichnisse in denen Tabellen-Dateien gespeichert werden. Naja, muss man mal probieren. Man kann mysql auch direkt mit einer log-Option staren, dann werden alle Änderungen an den Tabellen mitgeloggt, ggfs. in einer binär-Datei, die man mit dem mySQL-Kommandozeilen-tool auf einen anderen mySQL-Server spielen kann.

              Grüße
              Andreas

        2. Hi!

          Diese schreiben nämlich auch immer Sachen und gehen davon
          aus dass der Laie damit umgehen kann.

          Wenn man Datenbank-Tabellen von einem auf den anderen Server kopieren will, und das für ein produktives System, sollte man sich ein bisschen mit der Materie auseinandersetzen, Du würdest doch auch jemanden der eine Webseite übersetzen wollte nicht ernsthaft Raten das von bablefish zu machen, oder? Das ist dasselbe, Du weißt auch nicht wirklich was jetzt passiert ist und ob es wirklich funktioniert hat.

          Im einfachsten Fall kannst Du so Daten exportieren:
          mysqldump datenbank > datensicherung.sql

          und so Daten importieren:
          mysql datenbank < datensicherung.sql

          Das geht sowohl unter windows als auch unter unix, evtl muss man noch den kompletten Pfad zu den tools angeben(c:\mysql\bin\mysqldump) und und evtl den ein oder anderen Paramter für username oder sowas.

          Nicht wirklich kompliziert, oder? Wenns Dich interessiert lies mal das: http://www.mysql.com/doc/de/mysqldump.html

          Deshalb sind oft Anfänger Bücher schlecht geschrieben.

          Datenbanken braucht der normale Anfänger auch nicht, wenn jemand wirklich eien Datenbank braucht sollte er entweder entsprechendes Hintergrundwissen mitbringen, oder die Bereitschaft sich welches anzueignen, finde ich zumindest, denn sich solche Dinge irgendwie zusammenzuklicken wird am Ende nichts vernünftiges produzieren.

          Ich persönlich traue mich an Befehlsoperationen nicht
          ran, weil man diese auch schlecht rückgängig
          machen kann falls falsch.

          Du kannst es genauso gut/schlecht rückgängig machen wie einen SQL-Befehl von phpMyAdmin. Man sollte auch nicht unbedingt auf einem produktiven System solche "Harakiri-Aktionen" starten ;-)
          Richtre Dir doch ein lokales testsystem ein, nimm Dir die Doku zur Brust und probier mal nach herzenslust rum.

          So und die möglichen Probleme,
          waren nur ein Vielleicht. In der Regel klappts perfekt.

          Weißt Du das? Nur weil keine direkten Fehler passieren heißt das nicht das es 100%ig funktioniert hat!

          Meistens sind Fehler in der Tabelle schuld
          und damit hat man dann auch beim Dump zu kämpfen.

          Wie können in einem Dump Fehler sein? Der ist doch gerade dazu da funktionierenden SQL-Code zu erzeugen, den Du woanders einfach wieder einspielen kannst!

          Viele Grüße
          Andreas