• Wie kann man nachts automatisiert ein Backup einer mysql Datenbank machen lassen?

    Habe heute den Erstkontakt mit mysql Datenbank auf macOS 10.12.x und frage mich gerade wie man ein regelmäßiges nächtliches Backup machen lassen kann.
    Es müsste automatisiert laufen, also ohne das ein Mensch da irgendetwas klicken muss oder eine Useraktion erforderlich ist.
    Hat da jemand eine Idee? Oder reicht da eine Kopie des Verzeichnisses /usr/local/mysql-5.7.21-macos10.13-x86_64 aus? Kann man da auch später im Notfall Daten wieder zurück holen?
    • Wie kann man nachts automatisiert ein Backup einer mysql Datenbank machen lassen?

      Das kann man so machen, wenn man weiss was man im Notfall zu tuen hat. Das kann fummelig werden wegen der Rechte und wegen der DB-Version.

      Dolle ist das aber nicht.

      Wie man es richtig macht hängt davon ab was das für eine DB ist, was da drinsteht, … Am komfortabelsten ist, wenn du aus der DB einen Export machst, den du im Notfall wieder Importieren kannst. Die bekannten CMS machen das so.

      Das funktioniert aber nur, wenn die DB nicht riesig ist, sonst wird das alles sehr zäh. Ab einer bestimmten Größe und Wichtigkeit sollte man das lieber mit Spiegeln der DB machen. Das geht super, sollte aber jemand einrichten, der das wirklich kann.
    • Wie kann man nachts automatisiert ein Backup einer mysql Datenbank machen lassen?

      Das kommt darauf an, welche Engine Ihr für Eure Tabellen benutzt. Bei MyISAM-Tabellen ist eine Kopie des Verzeichnisses eher im laufenden Betrieb möglich als bei InnoDb-Tabellen, da diese gegebenenfalls noch Daten in einem Puffer haben, der noch nicht in die entsprechenden Dateien geschrieben wurde. Auf jeden Fall muss also mySql gestoppt werden und nach der Kopie wieder gestartet werden.

      Wenn die Datenbank nicht riesig ist, bietet sich ein regelmäßiger Dump an, den Du per Cron-Job anstößt. Ein ganz gutes Script, das auch die Backupdateien rotiert (täglich, wöchentlich, monatlich), ist automysqlbackup. Dazu solltest Du einiges finden. Vorteil ist, dass der Dump unabhängig von der Version der Datenbank wieder eingespielt werden kann, ohne sich im Dateisystem von mysql auszukennen. Der Nachteil ist die lange Laufzeit und ggfs. das Sperren der Tabellen während der Laufzeit.
    • Du könntest das über Automator und eine Kalendererinnerung machen

      Als Aktion fügst Du dann "Shell-Skript ausführen" hinzu.
      In die erste Zeile schreibst Du



      darunter dann

      Show Plain Text
      1. /usr/local/mysql/bin/mysqldump --user=DeinDBUserMitDenNotwendigenRechten --password=DasPasswortDesUsers datenbankname > "/Users/ ICRedaktionDUS/Dokumente/blablaba/datenbankname $(date +%Y-%m-%d).sql"


      natürlich mit Deinen angepassten Wunschwerten und dem richtigen Pfad zu Deinen MySQL Binaries - vielleicht einen Ordner der automatisch woanders hin gesynct wird, wie DropBox, OneDrive, etc.
      Wichtig: das oben in einer Zeile schreiben, auch wenn es hier umgebrochen wird!

      Das (date +%Y-%m-%d-%H.%M.%S) fügt dem Dateinamen noch einen "Datumsstempel" hinzu im Format 2018-02-06-13.44.30 hinzu.

      Sobald Du das speicherst fragt Dich Kalender wann und wie oft das ausgeführt werden soll.
    • Ich habe das seit Jahren mit einem Shellscript und launchd am laufen

      Ich lasse jeden Tag einen mysql-dump gezipt in ein Verzeichnisch schreiben. Der Dateiname enthält den Tag des Monats, so dass ich immer ca. einen Monat zurück kann.
      Das läuft seit Jahren problemlos und ich müsste auch erstmal recherchieren, wie ich das damals gemacht habe.
      Meine gezipten Dump-Dateien sind z.Zt. ca. 13 MB groß. und enthalten (hoffentlich ) auch die Informationen zur Struktur der DB mit sämtlichen Tabellen, so dass ich im Fall der Fälle nur die gewünschte Datei in eine neue DB importieren müsste, um alles wie vorher zu haben.
      Das läuft noch auf einem alten weißen Mac mini und ich überlege schon länger, das mal auf eine Synology DS umzubauen - habe aber noch keine Zeit gehabt.
      Hier das Script (für xxx und yyy bitte entsprechend einsetzen):
      Show Plain Text
      1. #!/bin/bash
      2. cd /Volumes/xxx/MySQL_Dumps/
      3. /usr/local/mysql/bin/mysqldump --user=backup --password=xxx --single-transaction --add-drop-database --databases xxx yyy|gzip > dump_$(date +%d).sql.gz

      Und dann muss man noch eine .plist für den launchd erstellen und einbinden, um das Script zur gewünschten Zeit aufzurufen...