Jul 19 2011

Foreign Keys beim Backup von MySQL-Datenbanken (InnoDB)

Wer ab und an Backups seiner MySQL Datenbank durchführen möchte, kann dies z.B. auf der Konsolenebene mit mysqldump durchführen. Ich stand neulich vor dem Problem ein Backup File – generiert aus phpMyAdmin – in eine lokale Entwicklungsumgebung einspielen zu müssen. Da ich hierbei grandios an den Foreign Keys gescheitert bin (foreign key constraints), hier die Lösung für alle Verzweifelten, die das auch versuchen möchten:

Bei InnoDB werden die Foreign Keys bei den Datenbankoperationen (UPDATE, INSERT, DELETE) geprüft. Deshalb scheitert meistens ein reiner Datenimport in eine leere Datenbank. Also was tun? Wir schalten hierzu diese Prüfung temporär aus und nach dem Import wieder an, logisch, oder? :) Und diese Magie geht wie folgt:

Am Anfang des Import fügen wir noch folgende Zeilen hinzu:

SET AUTOCOMMIT = 0;
SET FOREIGN_KEY_CHECKS=0;

Und am Ende des Imports aktiviert man wieder die Prüfung und commitet das Geschriebene:

SET FOREIGN_KEY_CHECKS = 1;
COMMIT;
SET AUTOCOMMIT = 1;

Unfassbar einfach! Aber halt, auf der Konsole? Ja, geht auch:

mysql -u$USER -p
use ${datenbankname hier eintragen};
SET FOREIGN_KEY_CHECKS = 0;
source ${dumpdatei hier eintragen};
SET FOREIGN_KEY_CHECKS = 1;
COMMIT;


Mrz 3 2010

Ubuntu für das Zend Framework konfigurieren

Aus aktuellem Anlass – einer Neuinstallation meines Systems – möchte ich euch die Schritte erklären, die zu einer lokalen LAMP (Linux Apache MySQL und PHP) Entwicklungsumgebung für Zend-Framework Projekte unter Ubuntu 9.10 Karmic Koala führen.

Ein fertiges Linux-System solltet ihr mit Ubuntu ja bereits besitzen. D.h. den nächsten Schritt, den man gehen muss, ist den Apache-Server zu installieren. Unter Ubuntu bewerkstelligt man dies in der Console mit dem einfachen Aufruf

sudo apt-get install apache2

Eine Internetverbindung vorausgesetzt, solltet ihr nun die Download-, Installations- und Konfigurationsroutine sehen. Um zu überprüfen, ob der Apache nach der Installation läuft, öffnet einen Browser eurer Wahl und versucht die Adresse http://127.0.1.1 aus. Ihr solltet etwas in der Art “It Works” zu lesen erhalten.

Das Zend-Framework basiert ja bekanntlich auf PHP und so benötigen wie jetzt entsprechend PHP. Um PHP5 zu installieren, bemüht man widerum die Console und holt die aktuelle Version aus den Quellen:

sudo apt-get install php5

Nach erfolgreicher Installation sollte der Apache neu starten und wir können überprüfen, ob die Installation korrekt ausgeführt wurde. Dazu wechselt man in das Web-Verzeichnis des Servers:

cd /var/www

Hier sollte bereits eine index.html existieren, die wir schon im Web-Browser bewundern durften. Mit dem Aufruf…

sudo gedit phpinfo.php

… erstellt man die Datei phpinfo.php und öffnet diese gleichzeitig mit dem (in Ubuntu mitgelieferten) Editor, welcher übrigens um einges mächtiger ist, als z.B. Notepad unter Windows, da er für sehr viele Dateitypen Syntax-Highlighting unterstützt. In diese Datei fügt ihr nun folgende Zeile ein und speichert die Datei ab:

<?php phpinfo(); ?>

Damit haben wir eine Test-PHP-Datei erstellt, welche die Methode phpinfo aufruft und uns somit ausführliche Informationen über die installierte PHP-Version liefert. Diese Datei könnt ihr über den Web-Browser unter http://127.0.1.1/phpinfo.php aufrufen. Bei erfolgreicher PHP-Installation solltet ihr nun PHP-Informationen (z.B. die Version) sehen.

Einen großen Teil habt ihr damit schon geschafft und könntet schon fast mit einem Zend-Projekt anfangen. Was noch fehlt ist die Datenbank und das Apache ModRewrite Modul. Wofür die Datenbank (MySQL) gebraucht wird, sollte klar sein. Das Modul benötigen wir, um euer Projekt zu “privatisieren”. Das bedeutet, dass wir – gemäß ZF-Vorgabe – einzig und allein einen öffentlichen Zugriff auf die index.php anbieten.

Starten wir doch mit dem Einfacheren, dem Modul. Dieses ist nämlich schon installiert und muss nur noch aktiviert werden. Dazu wieder die Konsole:

sudo a2enmod rewrite

Kurze Erklärung dazu: a2 (Apache2, unser Server) en (enable, aktivieren) mod (Modul) rewrite. Eventuell – falls nicht automatisch durchgeführt – müsst ihr den Apache neu starten.

Nun möchten wir uns noch um die letzte Komponente, einen MySQL-Server kümmern. Dazu bemühen wir wieder die geliebte Konsole und holen uns den mysql-server mit Hilfe von apt:

sudo apt-get install mysql-server

Bei der Installation solltet ihr die entsprechenden Zugriffspasswörter wählen, der Rest passiert automatisch. Für diejenigen, die phpMyAdmin kennen und nutzen möchten, bietet sich an das Paket phpmyadmin zu installieren, welches dann unter http://127.0.1.1/phpmyadmin zu finden ist.

sudo apt-get install phpmyadmin

Mit dieser Konfiguration könnt ihr euch nun in aller Ruhe in ein neues Zend-Projekt stürzen. Falls ihr möchtet, könnt ihr auch entsprechende Tipps und Tutorials dazu in meinem kleinen ScienceBlog zur Hilfe nehmen.