Magento

Magento-Backups erstellen und schneller importieren

Datensicherung und -wiederherstellung sind ein wichtiges Thema für jeden Magento-Entwickler und Shopbetreiber. Allerdings gibt es auch hier einige Fallstricke, die man durchaus beachten sollte, damit man im Falle des Falles schnell reagieren kann. Sei es, um als Shopbetreiber ein Backup zurückzuspielen, nachdem man aus Versehen 100 Produkte gelöscht hat oder als Entwickler, um die Datenbank zu Entwicklungszwecken auf seinen Development-Server zu kopieren. Ein Datenbank-Backup kann je nach Größe des Shops schonmal mehrere Gigabyte groß sein. Aktuelles Beispiel: 12 GB Dump mit ca. 100.000.000 Datensätzen, davon 80.000.000 in log_url und log_url_info, da im Shop die Log-Dateien nicht per Cron gepflegt wurden.

Während der Dump per Console und mysqldump noch sehr schnell durchgeführt wird, dauert der Import solcher Dateien doch recht lange. MySQL ist als Datenbank sehr schnell im Lesen von Daten, beim Schreiben dauert das naturgemäß deutlich länger. Und gerade hier kann man ansetzen, indem man den generierten Dump entsprechend erstellt. Wichtig sind für MySQL folgende Befehle:

SET @OLD_AUTOCOMMIT=@@AUTOCOMMMIT, AUTOCOMMIT=0;
SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT;
SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS;
SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION;
SET NAMES utf8;
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO';
SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0;

Durch das Deaktivieren der Überprüfung auf Unique-Keys und Foreign Keys kann der Import dann um einiges schneller durchgeführt werden.

Da der Autocommit deaktiviert wurde, muss am Ende der SQL-Befehle ein manueller Commit eingefügt werden.

COMMIT;

Hier das ganze als Shell-Befehl für die Bash

#!/bin/bash
echo "SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT;
SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS;
SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION;
SET NAMES utf8;
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO';
SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0;
SET foreign_key_checks=0;" > magento_backup.sql

mysqldump -umeinbenutzer -pmeinpasswort --single-transaction meinedatenbank >> magento_backup.sql

echo "COMMIT;" >> magento_backup.sql
echo "SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT;
SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS;
SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION;
SET SQL_NOTES=@OLD_SQL_NOTES;" >> magento_backup.sql

Damit haben wir dann ein Backup erstellt, das sofort die oberen SET-Befehle enthält, den kompletten Dump sowie den abschließenden Commit-Befehl. Danach werden die Ausgangswerte wieder hergestellt.

Der Import des Backups kann dann wie folgt über die Shell vorgenommen werden:

mysql -umeinbenutzer -pmeinpasswort meinedatenbank<magento_backup.sql

Weiterführende Links:
Restoring a backup of a Magento database

Tags: , , , , , , ,

Trackbacks/Pingbacks

  1. Lesetipps KW39/40 | Magento eCommerce, Webshop, Reddot - webguys.de - 11. Oktober 2010

    [...] Magento-Backups erstellen und schneller importieren [...]

Kommentar schreiben