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:
SELECT * FROM `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:

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

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.
- Backup und Restore im Sinne der Sicherung der Daten
- 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.


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.

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
- vor einem Update soll eine schnelle Sicherung gemacht werden
- nach einem Schaden soll ein Restore in der gleichen Datenbank vorgenommen werden
- 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.

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.

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.

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 🙂
Schreibe einen Kommentar