Ankündigung

Einklappen
Keine Ankündigung bisher.

Datenbankumzug Dauer

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datenbankumzug Dauer

    Ich will mit meinem Browsergame auf einen neuen Server umziehen. Nun hab ich festgestellt, dass das Neuanlegen einer Datenbank aus einem Backup heraus extrem lange dauert. In meinem Fall bei 1,3 Millionen Einträgen wohl ca. 10 Stunden (per Mysql Dumper).

    Da ich da bisher keine Erfahrungswerte habe, die einfache Frage. Ist das ein realitischer Wert, dauert sowas tatsächlich so lange oder mach ich da einen Fehler?

    In diesem Sinne

    Daniel

  • #2
    Nunja, du gibst uns hier etwas wenig Informationen.

    Aus einem Dump dauert es sicher länger, ja. Liest du den Dump mittels mysqldumper und auf der Konsole ein?

    Du kannst auch die Integritätsprüfung für Fremdschlüssel temporär deaktivieren, die Indexe erst nach den Inserts erstellen etc. Da holst du einiges raus.
    [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

    Kommentar


    • #3
      Zitat von ChristianK Beitrag anzeigen
      Du kannst auch die Integritätsprüfung für Fremdschlüssel temporär deaktivieren, die Indexe erst nach den Inserts erstellen etc. Da holst du einiges raus.
      Gleich als Engine Blackhole verwende, die ist extrem schnell beim speichern.
      PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

      Kommentar


      • #4
        Zitat von akretschmer Beitrag anzeigen
        Gleich als Engine Blackhole verwende, die ist extrem schnell beim speichern.
        Hatte da bis jetzt aber schon öfters Probleme bei der Datenintegrität...

        Aber jetzt mal ernsthaft, als jemand der damit noch wenig zu tun hatte: Was genau ist dabei das Problem? Im Jetzt-Zustand müssen die Constraints ja noch greifen, d.h. wenn man diese in einer Transaktion wiederherstellt kann da ja nicht viel schiefgehen, oder?

        Kommentar


        • #5
          Jein. Der Befehl "mysqldump" stellt nicht sicher, dass das Ganze Backup "atomar" ist (eigentlich der falsche Begriff hier). Es können also mutierende Transaktionen dazwischenkommen und bereits exportierte Daten verändern. Das kann zu Integritätsproblemen führen.

          Voraussetzung ist hier, dass die betreffende Datenbank in der Zeit nicht angerührt wird. Dann funktioniert das auch mit "mysqldump" ohne Probleme. Wenn man das sicherstellt, dann klappt das gut.

          Zitat von akretschmer Beitrag anzeigen
          Gleich als Engine Blackhole verwende, die ist extrem schnell beim speichern.
          Einmal kein Verweis auf PG, ist noch alles i.O. bei dir ?
          [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

          Kommentar


          • #6
            Zitat von Tropi Beitrag anzeigen
            Hatte da bis jetzt aber schon öfters Probleme bei der Datenintegrität...
            Ach komm, das Thema ist doch völlig überbewertet.

            Aber jetzt mal ernsthaft, als jemand der damit noch wenig zu tun hatte: Was genau ist dabei das Problem? Im Jetzt-Zustand müssen die Constraints ja noch greifen, d.h. wenn man diese in einer Transaktion wiederherstellt kann da ja nicht viel schiefgehen, oder?
            Constraints? Was für Constraints? MySQL kann nicht mal simpelste Check-Constraints.
            PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

            Kommentar


            • #7
              Zitat von ChristianK Beitrag anzeigen
              Einmal kein Verweis auf PG, ist noch alles i.O. bei dir ?
              Danke der Nachfrage
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar


              • #8
                Also ich meinte Mysql Dumper, das PHP Script, nicht den Konsolenbefehl. Hab es also über das Interface von Mysql Dumper probiert und das ist wohl tatsächlich recht langsam.

                Hab auch ausprobiert die großen Tabellen direkt per SQL über phpmyadmin einzufügen und das geht dann doch erheblich schneller.

                Kommentar


                • #9
                  Achsoo, sorry, dann habe ich mich falsch ausgedrückt. Das, was du hier ausprobierst, ist langsam. Der Konsolenbefehl "mysqldumper" ist im Vergleich um einiges schneller.

                  Solche Dinge macht man nicht via phpmyadmin...
                  [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

                  Kommentar


                  • #10
                    Zitat von akretschmer Beitrag anzeigen
                    Constraints? Was für Constraints? MySQL kann nicht mal simpelste Check-Constraints.
                    In der Doku ist hin und wieder mal davon die Rede... Die Frage war zielte in meinem Falle aber auch nicht speziell auf MySQL als DBMS ab, sondern warum es generell (k)eine gute Idee ist Constraints beim Einspielen von Backups zu deaktivieren.

                    Kommentar


                    • #11
                      Zitat von ChristianK Beitrag anzeigen
                      Jein. Der Befehl "mysqldump" stellt nicht sicher, dass das Ganze Backup "atomar" ist (eigentlich der falsche Begriff hier).
                      Denk mal drüber nach was das bedeuten würde. Das wäre ganz schön übel wenn beim Backup die referentielle Integrität flöten geht würde.
                      Standardmässig ist immer lock tables aktiv, damit ist die Datenbank read only. (besonderes schön bei "großen" Datenbanken, das führt u.U. zu too many connections) Alternativ kann auch in einer Transaktion gedumpt werden (single-transaction), das funktioniert aber nur mit innodb! Wenn andere Engines im Spiel sind ist die Integrität nicht gewährleistet.

                      PS: 1 Mio Datensätze sollten eher in Richtung 10 Minuten gehen als 10 Stunden. (über Konsole mit mysql ... < dump.sql)

                      Kommentar


                      • #12
                        Zitat von erc Beitrag anzeigen
                        Standardmässig ist immer lock tables aktiv, damit ist die Datenbank read only. (besonderes schön bei "großen" Datenbanken, das führt u.U. zu too many connections) Alternativ kann
                        ... man auch Datenbanken nehmen, die diese Probleme nicht haben. PostgreSQL zum Beispiel. Das macht beim Dump eine Art Snapshot und kommt ohne Sperren oder so aus. Wäre auch schlimm, ist ja kein MySQL, ...
                        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

                        Kommentar


                        • #13
                          Replikation, anyone ?
                          [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

                          Kommentar


                          • #14
                            anstatt

                            Code:
                            $ mysql < backup_2014-09-28.sql
                            kann auch folgendes verwendet werden

                            Code:
                            $ mysql
                            $ USE database;
                            $ SOURCE /var/backup/backup_2014-09-28.sql
                            Damit bekommt man einen Status (wenn auch nur pro Query und kein Gesamtfortschritt) und es soll angeblich keine Probleme machen, wenn das Terminal in einem anderen Zeichensatz läuft wie die MySQL-Datenbank und das Backup.

                            Kommentar


                            • #15
                              Zitat von akretschmer Beitrag anzeigen
                              PostgreSQL zum Beispiel. Das macht beim Dump eine Art Snapshot und kommt ohne Sperren oder so aus. Wäre auch schlimm, ist ja kein MySQL, ...
                              Was denkst du passiert bei einer Transaktion + MVCC? Ich würde mal behaupten genau das selbe macht auch Postgres.

                              Zitat von tr0y Beitrag anzeigen
                              Replikation, anyone ?
                              Erfordert aber auch erstmal ein Dump. Wenn da nicht schon alles vorbereitet ist (Binlogs und Dumps mit Binlog Pos) und die Ausfallzeit eher gering ist lohnt sich der Aufwand dafür eigentlich nicht. Mit derartigen Rechten kannst du auch das machen:
                              PHP-Code:
                              mysqldump quell_host mysql ziel_host 
                              Damit läuft das Dumpen, das Übertragen und das Einspielen Zeitgleich.

                              Kommentar

                              Lädt...
                              X