{"id":491,"date":"2017-02-16T20:04:57","date_gmt":"2017-02-16T20:04:57","guid":{"rendered":"https:\/\/highwaytohoell.de\/wordpress\/?p=491"},"modified":"2017-02-16T20:04:57","modified_gmt":"2017-02-16T20:04:57","slug":"automatisiertes-backup-von-datenbanken-und-dateisicherung-via-ssh","status":"publish","type":"post","link":"https:\/\/highwaytohoell.de\/wordpress\/2017\/02\/16\/automatisiertes-backup-von-datenbanken-und-dateisicherung-via-ssh\/","title":{"rendered":"Automatisiertes Backup von Datenbanken und Dateisicherung via SSH"},"content":{"rendered":"<p>Schon lange auf der ToDo Liste war bei mir ein automatisiertes Backup meiner Datenbanken auf diesem Server einzurichten.<\/p>\n<p>Zur Ged\u00e4chtnisst\u00fctze, und falls jemand \u00e4hnliches n\u00fctzlich findet nun eine Beschreibung dessen was ich eingerichtet habe.<\/p>\n<p>&nbsp;<\/p>\n<h1>Anforderung<\/h1>\n<p>Ich wollte ein automatisiertes Backup einzelner Datenbanken (damit ich selektiv wiederherstellen kann), welches t\u00e4glich l\u00e4uft.<\/p>\n<p>Zus\u00e4tzlich wollte ich, f\u00fcr den Fall eines kompromittierten oder anderweitig nicht mehr zugreifbaren Servers diese Backupdateien au\u00dferhalb des gehosteten Servers speichern.<\/p>\n<p><!--more-->Daher sollte mein zu Hause befindliches <a href=\"https:\/\/de.wikipedia.org\/wiki\/Network_Attached_Storage\">NAS<\/a> die Backupdateien automatisch holen.<\/p>\n<p>&nbsp;<\/p>\n<h1>Umsetzung<\/h1>\n<h2>Datenbankbackup<\/h2>\n<h3>Crontab<\/h3>\n<p>Das Backupscript soll regelm\u00e4\u00dfig ausgef\u00fchrt werden, das mach man indem man in die Crontab Liste einen Eintrag macht &#8211; eine genaue Beschreibung der crontab Syntax findet man z.B. <a href=\"https:\/\/www.stetic.com\/developer\/cronjob-linux-tutorial-und-crontab-syntax.html\">hier<\/a>.<\/p>\n<p>Mein Eintrag sieht wie folgt aus<\/p>\n<p><code>15 3 * * * \/verzeichnisname\/dbbackup.sh<\/code><\/p>\n<h3>Das Backupscript<\/h3>\n<p>Das Script hat folgenden Inhalt<\/p>\n<h2><code>\/bin\/bash<\/code><br \/>\n<code>mysqldump --user=USERNAME --password='PASSWORT' datenbankname &gt; datenbankbackupdatei.sql | gzip &gt; \/Zielverzeichnis\/`date '+%Y%m%d'`_datenbankname.sql.gz<br \/>\n<\/code><\/h2>\n<p>Damit wird jede Nacht um 3:15 Uhr eine mit GZIP komprimierte Backupdatei im Zielverzeichnis erstellt, welche das Tagesdatum mit im Dateinamen tr\u00e4gt.<\/p>\n<p>So w\u00fcrde die Datei die am 24.12.2017 erstellt wird<strong> 2017-12-24_datenbankname.sql.gz<\/strong> hei\u00dfen.<\/p>\n<h2>Abholen der Dateien<\/h2>\n<p>Zum Abholen der Dateien habe ich gem\u00e4\u00df der Anleitung von <a href=\"https:\/\/www.schlittermann.de\/doc\/ssh.html\">Heiko Schlittermann <\/a>auf meinem NAS via<\/p>\n<p><code>ssh-keygen -t dsa<\/code><\/p>\n<p>einen SSH Key erstellt und diesen via<\/p>\n<p><code>cat ~\/.ssh\/*.pub | ssh user@highwaytohoell.de 'umask 077; cat &gt;&gt;.ssh\/authorized_keys'<\/code><\/p>\n<p>auf meinen Webserver \u00fcbertragen.<\/p>\n<p>Dann habe ich via crontab -e ebenfalls einen Eintrag erzeugt:<\/p>\n<p><code>30 3 * * * scp user@highwaytohoell.de:\/Zielverzeichnis\/* \/mein\/Verzeichnis<\/code><\/p>\n<p>Damit werden jede Nacht um 3:30 Uhr die Backupdateien in \/mein\/Verzeichnis auf meinem NAS geschrieben.<\/p>\n<p>Damit nicht jeden Tag alle Dateien abgeholt werden und sich die Backupdateien auf dem Server stapeln habe ich auf meinem Datenbankserver den Crontab Eintrag noch erweitert, via<\/p>\n<p><code>55 3 * * * rm \/Zielverzeichnis\/*.gz<\/code><\/p>\n<p>werden die Backupdateien nach Abholung gel\u00f6scht (im Zielverzeichnis liegen nat\u00fcrlich keine anderen Dateien mit .gz Endung, die w\u00fcrden sonst auch gel\u00f6scht). Somit liegen in diesem Ordner immer nur die aktuellen Dateien.<code><br \/>\n<\/code><\/p>\n<p>&nbsp;<\/p>\n<p>Diese L\u00f6sung ist mit Sicherheit weit von der Perfektion entfernt, so verliere ich sollte mein Internetanschluss zu Hause gest\u00f6rt sein m\u00f6glicherweise mal einen Satz Backupdateien &#8211; da ich aber nicht t\u00e4glich \u00e4ndere kann ich damit gut leben.<\/p>\n<p>Ich wollte eine L\u00f6sung die automatisch und dauerhaft funktioniert und das habe ich damit.<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Schon lange auf der ToDo Liste war bei mir ein automatisiertes Backup meiner Datenbanken auf diesem Server einzurichten. Zur Ged\u00e4chtnisst\u00fctze, und falls jemand \u00e4hnliches n\u00fctzlich findet nun eine Beschreibung dessen was ich eingerichtet habe. &nbsp; Anforderung Ich wollte ein automatisiertes Backup einzelner Datenbanken (damit ich selektiv wiederherstellen kann), welches t\u00e4glich l\u00e4uft. Zus\u00e4tzlich wollte ich, f\u00fcr [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-491","post","type-post","status-publish","format-standard","hentry","category-computerzeug"],"_links":{"self":[{"href":"https:\/\/highwaytohoell.de\/wordpress\/wp-json\/wp\/v2\/posts\/491","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/highwaytohoell.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/highwaytohoell.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/highwaytohoell.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/highwaytohoell.de\/wordpress\/wp-json\/wp\/v2\/comments?post=491"}],"version-history":[{"count":4,"href":"https:\/\/highwaytohoell.de\/wordpress\/wp-json\/wp\/v2\/posts\/491\/revisions"}],"predecessor-version":[{"id":495,"href":"https:\/\/highwaytohoell.de\/wordpress\/wp-json\/wp\/v2\/posts\/491\/revisions\/495"}],"wp:attachment":[{"href":"https:\/\/highwaytohoell.de\/wordpress\/wp-json\/wp\/v2\/media?parent=491"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/highwaytohoell.de\/wordpress\/wp-json\/wp\/v2\/categories?post=491"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/highwaytohoell.de\/wordpress\/wp-json\/wp\/v2\/tags?post=491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}