Dateien und Datenbanken

Datei - Datenbank

Datei - Datenbank

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 🙂

 

 

Save

Autor: Hagen Graf

consultant, author, trainer, solution finder, web architect, developer, open source lover, visionary, orator, the good old webmaster. Able to simplify!

4 Gedanken zu „Dateien und Datenbanken“

  1. Hallo Hagen

    Vielen Dank für den Artikel!
    Natürlich kenne ich diese Vorgehensweise und wandte diese auch lange so an. Nur sie ist etwas umständlich, im Vergleich zu den bisherigen Möglichkeiten bei Novatrend. Und sie lässt sich nur sehr umständlich per Script (in einem Standardhosting ohne Shell) automatisieren.

    Bisher konnte man per cpanel bequem bestimmen, dass eine WordPress-Installation vor einem Update zuerst gesichert werden soll. Sowohl auf File-Ebene, wie auch auf Datenbankebene mit einem Export. Das völlig easy automatisiert. Also total einfach und hilfreich für jemanden, der viele Auftritte betreut, auch Websites von Dritten. Etwas, dass auch relativ einfach an jemanden zu übergeben ist, der sich technisch nicht so auskennt.
    Oder anders formuliert, ein simples, aber effizientes „aktuell-halten-der-releases“. Was ja in aller Interesse ist 😉

    Auch die manuelle Möglichkeit für einen Clone mittels Datenbankexport ist die gängige Methode. Nur ist dabei viel manuelle Arbeit nötig und bei grossen Exports auch nicht unproblematisch mit phpmyAdmin. Aber machbar…

    Als ich per Zufall die Clonemöglichkeit im Installatron (so heisst das Ding glaub) fand, war ich absolut begeistert. Mit wenigen Klicks ist ein Clone in der selben Umgebung gemacht. Sind in diesem Auftritt mehrere Domänen eingerichtet, sogar über diese hinweg klonbar. Natürlich können dabei ganz grosse Auftritte an die Grenzen stossen. Dann ist der manuelle Weg zu bevorzugen. Allerdings, wie bereits erwähnt mit phpmyAdmin auch nicht immer ohne.

    Für mich waren das in der Vergangenheit zwei extrem wichtige Features, die neben dem absolut super Support von Novatrend einzigartig waren.

    Mir ist klar, dass sich mit dem neuen Angebot die Datensicherheit nicht verschlechtert. Es ändert sich lediglich MEIN Workflow.

    Nun stellt sich wahrscheinlich die simple Frage, wieviele (wenige) brauchen diese zwei tollen Features und wie vielen Kunden bringt die neue Restorefunktion (vom Hosing ausgelagerten Speicherplatz) mehr. Schätze für euch wird es primär wichtig sein, die Backups nicht auf teueren Disk, sondern auf günstigen Storage auszulagern 😉

    Trotzdem kann ich Novatrend immer noch gerne weiter empfehlen!

    Grüsse, Fabian

  2. Hallo Hagen,

    Danke für den Artikel. Gerade bei grossen Datenbanken kann man aber das von Dir vorgeschlagene Vorgehen nicht mehr anwenden. PHPMyAdmin macht dann schlapp. Ich empfehle da eher http://www.mysqldumper.de. Ferner gibts mittlerweile gute Systeme wie z.B. rexo (http://rexo.ch), welche – genügend DB-Rechte vorausgesetzt – per Knopfdruck autom. ein komplettes Backup – d.h. Files und DB machen können. Bei Shared Hosting ist dann halt noch das Erstellen der DB von Hand zu erledigen.

Kommentar verfassen