T-Rex: automatisches Backup

Moin,

unter phpmyadmin kann man sich die komplette Datenbank per .sql Datei oder gezipt runter laden.
Gibt es eine Möglichkeit sowas in der Art per Script zu machen. So dass ein Script per Cronjob angestossen wird und es wird ein Backup jeden Tag von der kompletten Datenbank in einen Ordner gepackt?

Oder ein einfacher Datenbank Befehl? SHOW ALL oder sowas? Mir würden die Daten in den Tabellen reichen, die Struktur brauche ich nicht unbedingt, die hab ich sowieso schon auf tausenden Backups.

Danke

Gruß
der vor dem Wochenende noch mal schnell was zwischen drin fragende
T-Rex

  1. man mysqldump

    Fred

    1. hi,

      man mysqldump

      Fred

      Kann ich nur empfehlen!!!
      Kommt aber auch darauf an, wieviele Datenbanken du hast.
      Bei vielen DBs und weiteren backup aufgaben, empfehle ich ein sh script.
      Hab mir auch eins gebaut, was alle FTP-Verzeichnisse und alle DBs sichert.
      Das schiebt dann sogar per FTP die Daten auf das Backuplaufwerk in einem anderen RZ.

      Gruß Niklas

      --
      Man muss nicht alles wissen, man sollte aber wissen, wo das nicht gewusste zu finden ist.
  2. Moin Moin!

    Moin,

    unter phpmyadmin kann man sich die komplette Datenbank per .sql Datei oder gezipt runter laden.
    Gibt es eine Möglichkeit sowas in der Art per Script zu machen. So dass ein Script per Cronjob angestossen wird und es wird ein Backup jeden Tag von der kompletten Datenbank in einen Ordner gepackt?

    pg_dumpall -U postgres > backup.dump

    Und zurück mit

    psql -f backup.dump postgres

    Alles dokumentiert.

    Oracle hat exp und imp, außerdem rman. Dokumentation gibt's auf der Installations-CD, und z.B. bei OraFAQ.

    Sonst noch irgendein ernstzunehmendes RDBMS vergessen? Nein? Gut.

    Und bevor jemand fragt: Access, SQL Server und MySQL kann ich nicht ernst nehmen.

    Alexander

    --
    Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".
    1. unter phpmyadmin kann man sich die komplette Datenbank per .sql Datei oder gezipt runter laden.
      Gibt es eine Möglichkeit sowas in der Art per Script zu machen.

      Alles dokumentiert.

      "Es gibt keine dummen Fragen, nur dumme Antworten" - und auf die Frage nach einer MySQL-Funktion auf die [Irgendeine-Datenbank-nur-nicht-MySQL]-Anleitung zu verweisen, ist bemerkenswert dumm.

    2. Und bevor jemand fragt: Access, SQL Server und MySQL kann ich nicht ernst nehmen.

      Access seh ich ein. Aber der Rest?

    3. Tach!

      Und bevor jemand fragt: Access, SQL Server und MySQL kann ich nicht ernst nehmen.

      Oh! Ein Glaubenskrieg.

      Wie hab ich das vermisst.

      1. hi,

        Oh! Ein Glaubenskrieg.

        Mahlen wir uns ein Kreuz auf die Brust oder in dem Fall, eher nen Delphin?

        Gruß Niklas

        --
        Man muss nicht alles wissen, man sollte aber wissen, wo das nicht gewusste zu finden ist.
  3. Danke für die Antworten (auch wenn einige davon anscheinend dumm sein sollen ;)).

    Ich habe jedoch vergessen dass viele von einem SSH zugriff ausgehen. Den habe ich leider nicht. Es muss also wirklich ein rudimentärer MySQL Befehl sein oder ein Script in PHP oder sowas.

    Danke für die Hilfe

    Gruß
    SSH loser
    T-Rex

    1. hi,

      wie bereits erwähnt: mysqldump als php anwendung

      Gruß Niklas

      --
      Man muss nicht alles wissen, man sollte aber wissen, wo das nicht gewusste zu finden ist.
      1. hi,

        wie bereits erwähnt: mysqldump als php anwendung

        Gruß Niklas

        Hmm...dann hab ich das nicht geschnallt. Der Link bezüglich mysqldump ging auf Mysql und einen Konsolen Befehl.
        Den MySQLDumper gucke ich mir gerade an. Ich glaube das ist genau das was ich suche.

        Danke soweit erstmal

        Gruß
        Dumpender
        T-Rex

        1. hi,

          sry ich meinte natürlich MySQLDumper ;)
          da darf man sich nur nicht verunsichern lassen, der hat 2 methoden drinne. Die eine ist für PHP.
          Also für dich perfekt geeignet.
          Ersetzt teilweise auch phpmyadmin!

          FTP-Upload ist ja auch dabei und backups einspielen geht damit auch (je nach DB-Format)

          Gruß Niklas

          --
          Man muss nicht alles wissen, man sollte aber wissen, wo das nicht gewusste zu finden ist.
          1. Also habs mir geholt und ausprobiert.
            Cronjob läuft auch schon.
            Mir ist es nur ein rätsel wieso die per javascript immer wieder das gleiche php script aufrufen, anstatt die ausführungszeit nach oben zu setzen? Aber das tut der Funktion kein abbruch :).

            Danke dafür.

            Gruß
            der befriedigte
            T-Rex

            1. hi,

              das mit der Ausführzeit ist so ne sache. Die kann man nicht immer hochsetzen und hin und wieder möchte man ja auch einen zwischenbericht (bei DBs mit 300 bis 400MB größe und mehr, kommt man ja eventuell an grenzen mit dem Arbeitsspeicher usw.

              Gruß Niklas

              --
              Man muss nicht alles wissen, man sollte aber wissen, wo das nicht gewusste zu finden ist.
      2. Moin Niklas,

        wie bereits erwähnt: mysqldump als php anwendung

        kleine Anmerkung: so bekommt man zwar ein auf File-Basis konsistentes Backup, aber nicht auf Application Level.

        Es kann also durchaus dazu kommen, dass man ein Backup hat, das auf Application Level fehlerhaft ist, weil z. B. INSERT- oder DELETE-Vorgänge oder so zum Zeitpunkt des Backups nur teilweise vollzogen waren. Oder beim Start des Backups noch gar nicht angefangen waren.

        LG,
         CK

        1. Es kann also durchaus dazu kommen, dass man ein Backup hat, das auf Application Level fehlerhaft ist, weil z. B. INSERT- oder DELETE-Vorgänge oder so zum Zeitpunkt des Backups nur teilweise vollzogen waren. Oder beim Start des Backups noch gar nicht angefangen waren.

          Ich schätze mal, dass Anwender, die solche Fragen stellen, noch einen weiten Weg vor sich haben bis diese Systeme administrieren dürfen, bei denen hieraus ernsthafte Probleme entstehen.

          Alle anderen werden wissen, dass zuvor die Anwendungen höflich darum gebeten werden müssen, sich zu schließen, respektive die Anwender höflich darum gebeten werden müssen, die Anwendungen zu beenden (je nach dem, wie weit man auf dem "Application Level" gehen will) und dass man mit mysqldump dem DBMS auch sagen kann: "He! Nixda mit Schreiben während des Dumpens!" (--lock-tables). Zu dem lassen sich auch die binären logfiles (im Falle von Transaktionen) behandeln. Die Frage ist natürlich auch immer, was die Anwendungen taugen. Schreiben die die Daten so weg, das Inkonsistenzen entstehen können (nutzen die also keine Transaktionen), dann ist schon sehr schwierig, dieses Problem beheben zu wollen. Man kann es dann bestenfalls versuchen zu mildern.

          Das von mir erwähnte "man mysqldump" verweist ausdrücklich auf:

          http://dev.mysql.com/doc/refman/5.1/en/backup-methods.html
          und
          http://dev.mysql.com/doc/refman/5.1/en/backup-strategy-example.html

          1. Tach!

            Zu dem lassen sich auch die binären logfiles (im Falle von Transaktionen) behandeln.

            Wenn du damit das Binary Log meinst, das ist engine-übergreifend verfügbar und für Replication wichtig. InnoDB verwendet ein eigenes Log für seine Zwecke. Wenn man es benennen will, dann eher mit "InnoDB Log". Im Normalfall wird das Binary Log erst beim Commit beschrieben.

            dedlfix.

          2. hi,

            Es kann also durchaus dazu kommen, dass man ein Backup hat, das auf Application Level fehlerhaft ist, weil z. B. INSERT- oder DELETE-Vorgänge oder so zum Zeitpunkt des Backups nur teilweise vollzogen waren. Oder beim Start des Backups noch gar nicht angefangen waren.

            Ich schätze mal, dass Anwender, die solche Fragen stellen, noch einen weiten Weg vor sich haben bis diese Systeme administrieren dürfen, bei denen hieraus ernsthafte Probleme entstehen.

            Ich sehe das auch so.
            In den meisten Fällen ist man froh, wenn immerhin die daten noch da sind!
            Wenn man damit probs hat, wird ein einfaches backup eh wohl kaum noch reichen ;) (Server-Spiegelung bzw. Cluster, ...)

            Gruß Niklas

            --
            Man muss nicht alles wissen, man sollte aber wissen, wo das nicht gewusste zu finden ist.
    2. Tach!

      Ich habe jedoch vergessen dass viele von einem SSH zugriff ausgehen. Den habe ich leider nicht.

      Wie kommst du dann zu (d)einem Cronjob? Wenn das ein "echter" ist, kann der doch durchaus den mysqldump aufrufen. (Zudem gibt es die PHPShell.)

      Es muss also wirklich ein rudimentärer MySQL Befehl sein oder ein Script in PHP oder sowas.

      PHP kann auch Systembefehle absetzen. Ein Dump in PHP oder sonstwas nachempfunden ist zwangsläufig langsam, weil der sich alles einzeln erfragen und holen muss. Der MySQLDumper weiß das auch und umgeht das nur mit Tricks.

      dedlfix.

      1. hi,

        bei einigen Anbietern werden nur php cronjobs erlaubt ...
        Man kann aber ja im inet genügend "fake"-Crons bekommen.
        Die reichen z.b. für MySQLDumper aus!

        Gruß Niklas

        --
        Man muss nicht alles wissen, man sollte aber wissen, wo das nicht gewusste zu finden ist.
        1. hi,

          bei einigen Anbietern werden nur php cronjobs erlaubt ...

          Mein Gott!

          <?php  
          $sys='mysqldump --password="foo" --user="bar" --compact --lock-tables --all-databases | gzip -c > ' . date('YmdHis') . '.sql.gz 2 > error.log';  
          system($sys);  
          ?>
          

          Fred

          1. hi,

            bei einigen Anbietern werden nur php cronjobs erlaubt ...

            Mein Gott!

            Meint: "Wenn der Topf aber nun ein Loch hat ..."

            Da war ein Leerzeichen zu viel:

            <?php  
            $sys='mysqldump --password="foo" --user="bar" --compact --lock-tables --all-databases | gzip -c > ' . date('YmdHis') . '.sql.gz 2> error.log';  
            system($sys);  
            ?>
            

            Fred