Oli: MySQL DB Backup speichern

Hallo,

ich programmiere gerade ein Spiel, und schreibe die Variablen in eine MySQL DB.
Jetzt würde mich interessieren, wie man ein Backup der gesamten DB machen kann? Also wo werden die Variable rein geschrieben, damit ich sie von Zeit zu Zeit vom server holen könnte?

Danke + lg
Oli

  1. Hi,

    ich programmiere gerade ein Spiel, und schreibe die Variablen in eine MySQL DB.
    Jetzt würde mich interessieren, wie man ein Backup der gesamten DB machen kann?

    Das Mittel der Wahl sollte mysqldump sein.

    herzliche Grüße,
    Jonny 5

    1. Hello,

      Das Mittel der Wahl sollte mysqldump sein.

      Wenn man mysqldump nutzen kann, kann man auch meistens gleich den gesamten DB-Komplex kopieren.
      Das ist, wenn nur ein bis zwei Datenbanken innerhalb eines Clusters bedient werden von Server sehr viel schneller in der Sicherung und ebenso in der Wiederherstellung. Man muss allerdings den Server für die Zeit der Sicherung oder Wiederherstellung herunterfahren.

      Eine Kopie des gesamten Komplexes ine ein anderes Verzeichnis des lokalen Dateisystems könnte dann z.B. 3 Minuten dauern, während dann das Dumpen der einzelnen Tabellen mindestens 20 Minuten in Anspruch nehmen wird. Bei der Wiederherstellung ist das Verhältnis noch schlechter. 3 Minuten für die Kopie des Komplexes gegenüber 60 Minuten für das Inserten.

      Erfahrungswerte aus einem real existenten MySQL-DB-Komplex.

      Wenn man während es normalen Bertriebes keine Offtime gebrauchen kann, muss man sich mit incrementellen Transaktions-Logs auseinandersetzen. MySQL bietet dafür einen eingebauten Mechanismus.

      Da müsstest Du dann mal die Manualseite von MySQL studieren. Es gibt hierüber aber auch schon Threads hier im Archiv.

      siehe auch http://dev.mysql.com/doc/refman/5.0/en/binary-log.html

      Liebe Grüße aus Syburg bei Dortmund

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
      1. danke, werde mich mit mysqldump näher befassen, und hoffentlich verstehen wie das genau funktioniert.

        Den Server runter fahren wird eher nicht möglich sein, da das ja nicht bei mir ist, sondern bei einem Anbieter.

        1. hi,

          danke, werde mich mit mysqldump näher befassen, und hoffentlich verstehen wie das genau funktioniert.

          Das sind mit PHP MyAdmin 3-4 Klicks.
          Wenn du die ganze DB sichern willst (einfachste Methode):

          • Datenbank aufrufen
          • Exportieren
          • SQL auswählen
          • Zip-komprimiert auswählen
          • OK klicken
          • Fertig

          Den Server runter fahren wird eher nicht möglich sein, da das ja nicht bei mir ist, sondern bei einem Anbieter.

          An sich ist das nicht Nötig, der Tom geht die dinge anders an als wir „vielleicht irgendwann mal Programmierer“.

          holla holla

          1. Hello,

            Den Server runter fahren wird eher nicht möglich sein, da das ja nicht bei mir ist, sondern bei einem Anbieter.

            An sich ist das nicht Nötig, der Tom geht die dinge anders an als wir „vielleicht irgendwann mal Programmierer“.

            Wie kommst Du darauf, dass es nicht notwendig ist, während der Sicherung Veränderungen an den Daten zu verhindern? Je nachdem, wie besucht die Seite ist und wie stark daher Änderungen in der DB stattfinden, wirst Du Inkonsistenzen bekommen, wenn Du den DB-Server nicht daran hinderst, normal weiterzuarbeiten, während Du die Kopien ziehst.

            Wenn man das nicht über anständige Wege erreichen kann, muss man eben unanständige Wege gehen:

            In der Applikationsschicht ein "disable Login"-Flag einbauen in alle Scripte und bevor man sichern will, setzt man das (das sollte das Sicherungsscript tun). Erst wenn keine offenen Connections mehr besthehen außer der eigenen werden alle Tabellen vom Sicherungsscript geflusht und erst dann fängt man an mit dem Dump der Tabellen. Wenn das Sicherungsscript damit fertig ist, setzt es das Login-Flag wieder auf "enable Login" und alle Scripte kömnnen wieder mit der DB arbeiten.

            In den Scripten würde ich das per Umleitung abfangen:

            if (!get_enable_login())
              {
                   header('Location: http://wartungsarbeiten.example.org');
              }

            Und das Flag legt man am besten in einer gemeinsamen Datei ab, die dann über die Funktion ausgelesen wird. Da die meisten Coder sowieso immer ein "include datenbank.php" am Anfang ihres Scriptes einbauen, wäre der passende Ort für die Prüfung also in diesem php-include-Script.

            Liebe Grüße aus Syburg bei Dortmund

            Tom vom Berg

            --
            Nur selber lernen macht schlau
            http://bergpost.annerschbarrich.de
            1. hi Tom,

              wirst Du Inkonsistenzen bekommen, wenn Du den DB-Server nicht daran hinderst, normal weiterzuarbeiten, während Du die Kopien ziehst.

              Das ist mir schon klar, ich bezog mich auf Server runter und wieder hochfahren (das würde mir 1und1 glaube ich nicht gestatten[1]).
              Das man während interner arbeiten die Verbindung kappen soll hatte ich schon gelesen, nur wie ich das angehen soll, wusste ich nicht.

              Wenn das Sicherungsscript damit fertig ist, setzt es das Login-Flag wieder auf "enable Login" und alle Scripte kömnnen wieder mit der DB arbeiten.

              Diese und folgende Logik hatten mir gefehlt.

              In den Scripten würde ich das per Umleitung abfangen:

              if (!get_enable_login())
                {
                     header('Location: http://wartungsarbeiten.example.org');
                }

              Das klingt leicht zu realisieren, werde das gleich versuchen, umzusetzen.

              Da die meisten Coder sowieso immer ein "include datenbank.php" am Anfang ihres Scriptes einbauen, wäre der passende Ort für die Prüfung also in diesem php-include-Script.

              Was heisst die meisten, wie machst du sowas bzw. welche möglichkeiten gibt es denn neben include und require?

              Ich verwende seit kurzem nur noch require_once '';.

              holla holla
              [1] Zumindest nicht Freiwillig

              1. Hello,

                Was heisst die meisten, wie machst du sowas bzw. welche möglichkeiten gibt es denn neben include und require?

                ganz normales Einlesen von Konfigurations-Parametern über ein fread() oder
                http://de2.php.net/manual/de/function.parse-ini-file.php

                Ich verwende seit kurzem nur noch require_once '';.

                Das kommt darauf an, ob das Script noch etwas tun darf/sollte/muss, wenn das Einbinden der Datei schiefgegangen ist, oder ob es lieber ganz schnell sterben soll.

                include -> Script läuft weiter
                require -> Script wird abgebrochen

                Aber wenn Du Deine Datenbank-Zugangsdaten mittels require_once() ins Script lädst, könntest Du auch in der Require-Datei die Prüfung auf enable_login machen. Oder Du sperrst die Datei einfach für  PHP-Prozesse, solange Du das Updatescript laufen lässt.

                MMn nehmen include und require auf ein flock() Rücksicht.

                Für administrative Zugriffe auf die Datenbank wirst Du ja sicherlich nicht dieselben Zugangsdaten verwenden, wie für die normalen Userscripte, sodass dies ein einfacher Weg wäre.

                Allerdings verspielst Du Dir damit dann vermutlich die Möglichkeit einer qualifizierten Meldung an den User. Der Seitenbesucher sollte doch schon wissen, dass er in 3 Minuten nochmal kommen wiederkommen soll, weil gerade Wartungsarbeiten stattfinden, und keine leere Seite oder Timeout bekommen.

                Liebe Grüße aus Syburg bei Dortmund

                Tom vom Berg

                --
                Nur selber lernen macht schlau
                http://bergpost.annerschbarrich.de
                1. Hi,

                  Ich verwende seit kurzem nur noch require_once '';.

                  Das kommt darauf an, ob das Script noch etwas tun darf/sollte/muss, wenn das Einbinden der Datei schiefgegangen ist, oder ob es lieber ganz schnell sterben soll.

                  include -> Script läuft weiter
                  require -> Script wird abgebrochen

                  sinngemäß würde ich require_once dazu verwenden, um sicherzustellen, daß eine Datei im Scriptverlauf (beispielsweise in einer Schleife) nur 1x eingebunden wird.

                  herzliche Grüße,
                  Jonny 5

                  1. Hello,

                    include -> Script läuft weiter
                    require -> Script wird abgebrochen

                    sinngemäß würde ich require_once dazu verwenden, um sicherzustellen, daß eine Datei im Scriptverlauf (beispielsweise in einer Schleife) nur 1x eingebunden wird.

                    Dieser Unterschied zwischen requeire und include ist doch schon länger erledigt, oder?
                    Require wird meiner mMn in einer Schleife auch nur noch eingebunden, wenn die Schleife durchlaufen wird. Das "nur einmal" regelt dann aber das "_once" und nicht der Unterschied zwischen "require" und "include"

                    Aber mein Hildeshheimer plagt mich heute wieder, könnte mich also irren

                    Liebe Grüße aus Syburg bei Dortmund

                    Tom vom Berg

                    --
                    Nur selber lernen macht schlau
                    http://bergpost.annerschbarrich.de
                2. hi,

                  ganz normales Einlesen von Konfigurations-Parametern über ein fread() oder
                  http://de2.php.net/manual/de/function.parse-ini-file.php

                  Ja, das sieht ja mal interessant aus, wenn ich da durchblicke baue ich das gleich mal in mein CMS.
                  Danke für den Link.

                  Das kommt darauf an, ob das Script noch etwas tun darf/sollte/muss, wenn das Einbinden der Datei schiefgegangen ist, oder ob es lieber ganz schnell sterben soll.

                  Ansich soll es natürlich arbeiten, was mich aber gerade beschäftigt ; nehmen wir an, ich lade meine Seite hoch und rufe jede Seite erfolgreich auf, das bedeutet ja, alles Paletti, kann bei vereinzelten Clients denn dann noch ein Problem auftauchen?

                  Aber wenn Du Deine Datenbank-Zugangsdaten mittels require_once() ins Script lädst, könntest Du auch in der Require-Datei die Prüfung auf enable_login machen.

                  Genau das hatte ich vor, dann kann ich dort direkt eine Funktion einbauen, die ich unter meinen Bedingungen aufrufe und meine arbeit beenden.

                  Für administrative Zugriffe auf die Datenbank wirst Du ja sicherlich nicht dieselben Zugangsdaten verwenden, wie für die normalen Userscripte, sodass dies ein einfacher Weg wäre.

                  Ich hab mich jetzt so auf das EVA-Prinzip versteift, das selbst die Seiteninhalte alle in die Index-Datei eingebunden wird und am Ende des Scripts mittels Variablen aufgerufen werden.
                  Der gesamte Content der DJ-Seite wird mit EOT aufgerufen;

                  echo <<<EOT  
                  $my_doc  
                  $mein_banner  
                  $MeinMenu  
                  <div id="all_layout_wrapper"> <!-- All Layout-wrapper beginnt hier -->  
                  $my_content  
                  $MeinBottomMenu  
                  $MeinFooterMenu </div>  <!-- All Layout-wrapper endet hier -->  
                  <div id="sonstiges_marginalien">  
                   <span class="rund_links"></span>  
                  $my_marginalien  
                  $bookmarks  
                      <span class="rund_rechts_unten"></span>  
                  </div>  
                  </body></html>  
                  EOT;
                  

                  Das ist alles ;) Was meinst du, ist das Clever oder eher falsch?

                  Hier kann ich auch bei bedarf eine flag setzen, die sich auf alle unterseiten auswirkt.

                  Allerdings verspielst Du Dir damit dann vermutlich die Möglichkeit einer qualifizierten Meldung an den User. Der Seitenbesucher sollte doch schon wissen, dass er in 3 Minuten nochmal kommen wiederkommen soll

                  Eben das kann ich mit meinem Oben geschriebenen Script ganz einfach realisieren.

                  holla holla