Announcement

Collapse
No announcement yet.

Tabellen dumpen und in andere DB einlesen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Tabellen dumpen und in andere DB einlesen

    Hallo,
    was ist der beste Weg, Tabellen aus einer DB eines Servers in eine DB eines anderen Servers zu übertragen? Die Tabellenstruktur ist auf beiden Servern gleich. Es geht im Prinzip nur um einen Datenabgleich. Für eine Replikation bin ich nicht fit genug. Würde sowieso schwierig, weil es schon eine MasterToMaster und MasterToSlave gibt.

    Hab es jetzt mit mysqldump und .Net versucht. Dumpen klappt wunderbar, auch mit Einschränkungen (WHERE - um nicht tausende Datensätze umsonst zu übertragen). Es wird eine Textdatei (xxx.sql) geschrieben (INSERT INTO ...). Wenn ich diese mit einem Reader in einen String einlese und diesen als MySqlCommandText in .Net ausführen lasse´, geht es bei kleinen Tabellen sehr gut. Ist die .sql aber größer (z.B. 1000 Datensätze und einer Länge des Scriptes von 4 MB, dann knallt es (max packet size). An der Serverkonfiguration möchte ich nichts ändern, da hier noch mehr dran hängt.

    Kann mir jemand bei der Lösung helfen? Kann man mysqldump dazu bewegen, kleinere Pakete zu machen? Aber nicht jeden Record einzeln mit INSERT, das dauert beim Import ewig.

    Viele Grüße
    Norbert

  • #2
    Mittel CSV Datei und einem bulk insert
    LOAD DATA INFILE '<Datei>' INTO TABLE <Tabelle> FIELDS TERMINATED BY ','


    ggf die zu kopierenden Datensätze in eine TMP-Tabelle schreiben und die CSV von dieser erstellen
    CREATE TABLE tmp_tabelle SELECT * FROM source_tabelle WHERE.....

    Zuletzt editiert von Christian Marquardt; 09.08.2019, 15:34.
    Christian

    Comment


    • #3

      mysql -u username -p new_database < data-dump.sql

      Comment


      • #4
        Vielen Dank ihr beiden.
        Christian A. David
        Das wird ein steiniger Weg für mich. Weiss gar nicht, wie man CSV schreibt. Muss da Excel auf dem Rechner sein? Und bestimmt werden sich dabei Umlaute, Slashes, Backslashes, Hochkommas usw. nicht gerade freundlich verhalten.

        defo
        Und da gibt es keine Probleme mit der Größe? Ich hatte aber auch deswegen Abstand davon genommen, weil ich nicht sicher sein kann, dass beim Anwender mysql als Environment Variable eingerichtet ist. Ich müsste also in meinem Tool erstmal den Pfad dazu eruieren. Wie könnte man das mit .Net Code angehen? Gibt es dazu einen Eintrag in der Registry, den ich auslesen könnte?

        Vielleicht nochmal zur Erklärung: der Datenabgleich soll von einem Server (nur lesend) zu Localhost erfolgen (Kopie für Hausbesuche unterwegs). Replikation fällt aus verschiedenen Gründen leider aus. Zu aktualisierende Datensätze lassen sich mit mysqldump leicht (Timestamp) exportieren.

        Comment


        • #5
          Ich bin nicht Christian A. David!
          CSV hat überhaupt nichts mit Excel zu tun
          https://de.wikipedia.org/wiki/CSV_(Dateiformat)

          Ich gehe mal davon aus, dass du zur Verwaltung deiner MySQL Datenbank ein entsprechendes Tool benutzt.
          Es bietet sich ja da die MySQL Workbench an.
          Dort klick auf die Tabelle -> rechte Maustaste -> Export Wizard
          Einfacher geht es nicht mehr
          Christian

          Comment


          • #6
            Ich bin nicht Christian A. David!
            'tschuldigung. Sprang von selbst rein, als ich @Christian eingab.

            Einfacher geht es nicht mehr
            Für mich ist das alles kein Problem. Ich habe genug Tools für MySql und hack das auch bei Bedarf an der Kommandozeile ein. Aber meine Anwender sollen den Datenabgleich auf Knopfdruck selbst durchführen können.

            Hab jetzt gerade im Netz gefunden, dass mysqldump den Schalter --max_allowed_packet=512M hat. Nach xxx MB wird ein neues INSERT INTO geschrieben. Damit ist mein Problem tatsächlich gelöst.

            Danke und viele Grüße
            Norbert

            Comment

            Working...
            X