Kategorien
Allgemein Content Management Systeme Datenbanken Infrastruktur Shared Hosting Tools Wunschthema

Dateien und Datenbanken

Auf den Artikel Datenrettung – komfortabel, sicher und kostenlos! in der letzten Woche gab es viele positive Kommentare. Positive Kommentare freuen uns, zeigen sie doch, dass wir auf dem richtigen Weg sind. Interessant als Feedback sind aber auch die eher negativen Kommentare. Schliesslich erfahren wir auf diese Art und Weise, woran wir vielleicht gar nicht gedacht hat. Hier ein Beispiel von Fabian:

Ein vorbildlicher Service! Habe ich das aber richtig gelesen. Ich verliere damit „die schnelle Sicherung“ vor einem Update und kann das auch nicht mehr automatisiert (bequem) im cpanel machen? Und die super mega coole Clone-Möglichkeit einer WP Umgebung im Installatron geht dann auch nicht mehr? Für mich persönlich wäre das ein Rückschritt im Workflow.
Für den „normalen“ Betrieb natürlich eine Verbesserung. Aber man kann es nie allen Recht machen 😉

Ich wollte erst eine Antwort im Kommentar schreiben, dachte dann aber, es wäre besser daraus einen Blogeintrag zu machen.

Dateien und Datenbanken

Backups bestehen normalerweise aus Dateien (Textdateien, Bilddateien, HTML-Dateien, etc). Wenn eine Website, die mit einem Content Management System wie WordPress oder Joomla erstellt ist, gesichert werden soll, muss ausser den Dateien auch die Datenbank gesichert werden. Das hört sich einfach an, ist aber eine Wissenschaft für sich.

Wenn ich beispielsweise eine Bilddatei habe (meinbild.jpg), dann kopiere ich dieses Bild einfach an den gewünschten Ort im Dateisystem und habe ein Backup. Der Restore Prozess besteht ebenfalls aus dem Kopierbefehl.

Wenn ich eine Datenbank benutze, so greife ich auf diese Datenbank mit einem Hostnamen, einem Benutzernamen und einem Passwort über eine wie auch immer gestaltete Programmiersprache zu. Ich kann die Datenbank daher nicht einfach so „kopieren“. Um die Arbeitsweise zu verdeutlichen hier ein kleines Beispiel.

Wenn ich eine Joomla Site betreibe, könnte ich in der Tabelle jos_content mit dem SQL Befehl:

SELECTFROM `jos_content` WHERE `id` = 1

den Inhalt des ersten erstellten Artikels erhalten. Dieser Inhalt wird mir dann in einem Array, einer Liste oder einem Objekt meiner Programmiersprache angeboten. Um den eigentlichen Inhalt zu sehen, muss ich ihn irgendwo ausgeben. Das geht natürlich auf der Website:

Joomla Website
Joomla Website

Das geht aber auch in Programmen wie phpMyAdmin. Da sieht die Ausgabe nicht so schick aus, der Inhalt ist allerdings tatsächlich der Gleiche.

jos_content Tabelle
jos_content Tabelle

So richtig „greifen“, wie eine Bilddatei, lässt sich eine Datenbank daher nicht.  Joomla kann tausende von Artikeln verwalten, wie soll ich die sichern? Du ahnst es vielleicht schon: Ich verwandle die Datenbank in eine Datei. Um das zu machen, benötige ein Werkzeug, ein Programm, eine Programmiersprache … irgendwas, dass es mir erlaubt, auf die Daten in der der Datenbank zuzugreifen.

Der Datenbankserver MySQL bringt das Kommandozeilen Tool mysqldump mit. Mit dem Befehl:

mysqldump -u [uname] -p[pass] db_name > db_backup.sql

kann ich den Inhalt der Datenbank in eine Datei verwandeln.
Mit einem anderen Befehl könnte ich eine einzige Tabelle, wie die jos_content sichern/exportieren.

mysqldump -u [uname] -p[pass] db_name table > table_backup.sql

So prinzipiell geht es um das im- und exportieren von Daten in eine Datenbank hinein oder aus einer Datenbank heraus.

Die .sql Datei, die beim Sichern/Exportieren erzeugt wird, enthält den Befehl diese Tabelle wieder zu erzeugen (CREATE TABLE)

CREATE TABLE `jos_content` (
 `id` int(10) UNSIGNED NOT NULL,
 `asset_id` int(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT 'FK to the jos_assets table.',
 `title` varchar(255) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',

.............. VIEL MEHR ANWEISUNGEN ...........................
 `language` char(7) COLLATE utf8_unicode_ci NOT NULL COMMENT 'The language code for the article.',
 `xreference` varchar(50) COLLATE utf8_unicode_ci NOT NULL COMMENT 'A reference to enable linkages to external data sets.'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

und die Befehle die einzelnen Artikel wieder zu erzeugen (INSERT INTO)

INSERT INTO `jos_content` (`id`, `asset_id`, `title`, `alias`, `introtext`, `fulltext`, `state`, `catid`, `created`, `created_by`, `created_by_alias`, `modified`, `modified_by` ...) VALUES
(1, 61, 'Getting Started', 'getting-started', '<p>It\'s easy to get started creating your website. Knowing some of the basics will help.</p><h3>What is a Content Management System?</h3><p>A content management system is software that allows you to create and manage webpages easily by separating the creation of your content from the mechanics required to present it on the web.</p><p>In this site, the content is stored in a <em>database</em>. The look and feel are created by a <em>template</em>. Joomla! brings together the template and your content to create web pages.</p><h3>Logging in</h3><p>To login to your site use the user name and password that were created as part of the installation process. Once logged-in you will be able to create and edit articles and modify some settings.</p><h3>Creating an article</h3>
.............. VIEL MEHR ANWEISUNGEN ...........................

Nun haben wir die Datenbank als Datei vorliegen, können diese Datei kopieren und wir können die Daten in der Datei in eine andere Datenbank importieren.

Hinweis: Die normalerweise mit einem Passwort geschützten Daten liegen nun übrigens ungeschützt in einer Datei auf einer Festplatte. 

An dieser Stelle wird es interessant, weil diese Funktionen für mehrere Zwecke genutzt werden.

  1. Backup und Restore im Sinne der Sicherung der Daten
  2. Export und Import im Sinne von Umziehen und Kopieren von Daten

Da der mysqldump Befehl natürlich nicht besonders benutzerfreundlich ist und teilweise den Nutzern auch gar nicht zur Verfügung steht, werden Backup Tools (außer zum Backup) auch gern zum Klonen von Websites genutzt. Das funktioniert bei „überschaubaren“ Sites noch ganz gut, bei Sites mit größeren Datenbanken klappt es oft nicht mehr so gut. Die Gründe sind vielfältig.

Nach dieser langen Vorrede möchte ich zum Kern meiner Antwort an Fabian kommen.

phpMyAdmin

Wer mit Datenbanken hantiert, dem ist der Name phpMyAdmin sicher schon mal über den Weg gelaufen. Mit phpMyAdmin lassen sich Datenbanken exportieren (Backup) und importieren (Restore). Musste man früher noch Parameter festlegen, so sind es heutzutage wirklich nur ein paar Mausklicks zum Erfolg.
Im cPanel muss das Icon phpMyAdmin angeklickt werden.

cPanel Datenbanken
cPanel Datenbanken
phpMyAdmin
phpMyAdmin

Auf der linken Seite sehe ich meine Datenbanken. Die seafoll1_jos1 ist die Joomla Datenbank.

Backup einer Datenbank

Um nun diese Datenbank zu sichern, musst du sie mit einem Klick auf den Namen auswählen und auf den Reiter Exportieren klicken.

phpMyAdmin Datenbank Export
phpMyAdmin Datenbank Export

Du kannst alle Einstellungen so lassen, wie sie sind und auf den OK Button klicken. Das Programm phpMyAdmin erzeugt eine .sql Datei und lädt sie auf deinen PC herunter. Das ist das Backup!
Aus Platzgründen kannst du die Datei noch in ein komprimiertes Archiv verwandeln (zippen).

Restore einer Datenbank

Genau so einfach wie das Backup ist der Restore Vorgang. Es liegt nun an dir, welches Szenario du benötigst

  1. vor einem Update soll eine schnelle Sicherung gemacht werden
  2. nach einem Schaden soll ein Restore in der gleichen Datenbank vorgenommen werden
  3. die Site soll „geklont“ werden

Schnelle Sicherung

Wenn du eine schnelle Sicherung vor einem Update benötigst, würde ich die Datenbank gar nicht exportieren, ich würde sie einfach „kopieren“. Das funktioniert komplett auf dem Server und reicht als Notfall für ein fehlgeschlagenes Update aus.

phpMyAdmin - Datenbank kopieren
phpMyAdmin – Datenbank kopieren

Achtung: Wenn das Update ohne Fehler durchgelaufen ist, solltest du die Kopie der Datenbank wieder löschen um Speicherplatz zu sparen.

Restore in der gleichen Datenbank

In diesem Fall müssen die existierenden „schlechten“ Tabellen zunächst gelöscht werden. Dazu musst du im Reiter Struktur alle Tabellen markieren und löschen. Damit wirklich nichts verloren geht, kannst du vorher die „schlechte“ Datenbank unter einem anderen Namen kopieren.

phpMyAdmin - Tabellen löschen
phpMyAdmin – Tabellen löschen

Anschließend klickst du auf den Reiter Importieren, wählst deine .sql Datei des Backups mit den „guten“ Daten aus und klickst auf den OK Button. Alle Daten aus der Datei werden in die Datenbank importiert.

phpMyAdmin - Datenbank importieren
phpMyAdmin – Datenbank importieren

Site soll geklont werden

In diesem Fall muss das .sql Backup der einen Datenbank einfach in die gewünschte andere Datenbank importiert werden.

Fazit

Zunächst einmal vielen Dank an Fabian für den Kommentar. Bei einer kurzen Diskussion über das Thema wurde uns wieder klar, wie komplex die Zusammenhänge bei Datenbanken sein können. Unter anderem um die diese Komplexität zu reduzieren, haben wir das neue System überhaupt eingeführt. Wer wie Fabian (und ich auch) manchmal komplexere Aktionen machen will, dem sei daher phpMyAdmin wärmstens empfohlen.


tl;dr: Wir machen aus einer Datenbank eine Datei 🙂

 

 

#ffffff; background: #bd081c no-repeat scroll 3px 50% / 14px 14px; position: absolute; opacity: 1; z-index: 8675309; display: none; cursor: pointer; top: 7726px; left: 50px;">Save

Kategorien
Backup Content Management Systeme

Ein Backup in Drupal

Das Thema BACKUP und RESTORE ist wichtig, aber doch eher langweilig.
Nach dem Artikel Backups und Updates in Joomla war ich überrascht über positives Feedback. Gestern stand das Thema wieder zur Debatte, diesmal allerdings in Drupal.

In Drupal gibt es das Modul Backup and Migrate (Sichern und Migrieren) für diese Zwecke

Es sichert Datenbank und Dateien auf zahlreichen Medien wie FTP, Verzeichnis auf dem lokalen Server, Amazon S3 und mit Erweiterungsmodulen auch in Dropbox und weiteren Services.
Mit nodesquirrel.com existiert ein bis zu 5 GB kostenloser, verschlüsselter Backup Service, der von den Entwicklern von Backp and Migrate betrieben wird.

Installation

Installieren Sie das Backup and Migrate Modul über drush oder admin/modules/install.

Backup and Migrate Modul im Modulverzeichnis
Backup and Migrate Modul im Modulverzeichnis

Konfiguration

Unter /admin/config/system/backup_migrate können Sie Ihre Backups konfigurieren.

Backup and Migrate - Administration
Backup and Migrate – Administration
Zunächst erhalte ich einen Hinweis, dass ich noch kein privates Dateiverzeichnis angelegt habe. In Drupal gibt es ein öffentliches Verzeichnis, das sich normalerweise in /sites/default/files befindet und optional ein privates Dateiverzeichnis, das ausserhalb des Dokumentenverzeichnisses des Webservers angelegt werden sollte.

Klicken Sie auf den Link in der Meldung oder rufen Sie /admin/config/media/file-system auf um das private Dateiverzeichnis festzulegen.

Private und öffentliche Dateiverzeichnisse in Drupal
Private und öffentliche Dateiverzeichnisse in Drupal
Wechseln Sie zurück in die Backup and Migrate EInstellungen auf das Tab Einstellungen und dort in die Standardeinstellungen (/admin/config/system/backup_migrate/settings/profile/edit/default). Sie können hier alle Parameter festlegen, wie beispielsweise eine optionale Verschlüsselung durch das AES Modul und die Einstellungen, welche Dateiverzeichnisse und welche Tabellen Sie sichern wollen. In den erweiterten Optionen können Sie eine Checkbox ankreuzen, die Ihnen eine E-Mail sendet.
E-Mail Einstellungen
E-Mail Einstellungen
Das Modul geht davon aus, dass Sie die Datenbank, die Ihr Drupal verwendet, sichern wollen (Quellen – /admin/config/system/backup_migrate/settings/source).

Zu sichernde DB
Zu sichernde DB
Die Ziele sind bereits für den NodeSquirrel.com Service und für das private Serververzeichnis vordefiniert, weitere Ziele können hinzugefügt werden (/admin/config/system/backup_migrate/settings/destination/add).
Backup Ziele
Backup Ziele

Zeitgesteuertes Backup

Unter Zeitpläne können Sie einen neuen Zeitplan erstellen, beispielsweise täglich, abhängig vom eingebauten Drupal Cronjob in das private Verzeichnis (/admin/config/system/backup_migrate/schedule/add)

Zeitgesteuertes Backup
Zeitgesteuertes Backup
Um die Einstellungen zu testen, können Sie nun ein manuelles Backup erstellen (/admin/config/system/backup_migrate). Sie müssten auch eine E-Mail erhalten!
Manuelles Backup
Manuelles Backup
Im Tab gespeicherte Sicherungen (/admin/config/system/backup_migrate/backups) sehen Sie nun ein erstes Backup Paket, dass Sie auch downloaden und in ein anderes Drupal einspielen können. Das ist die Migrate Funktion!

Es erscheint auch der Hinweis, das ich bisher keine offsite Backups habe, d.h. kein Backup ausserhalb meines Servers.

Gespeicherte Sicherungen
Gespeicherte Sicherungen
Je nach Ihren Möglichkeiten können Sie nun FTP, Amazon S3 oder den NodeQuirrel Service einrichten.


tl;dr: Backup and Migrate ist eine sehr komfortable Möglichkeit automatisiert Backups von Ihrer Drupal Site zu erstellen, eine Site zu migrieren und aus einem Backup wiederherzustellen.