Archiv für den Monat: April 2012

Vergleiche Strukturen zwischen MySQL Datenbanken

Möchte man die ALTER Statements zweier Datenbank-Revisionen automatisch generieren lassen, bietet sich das Commandline Tool mysqldiff an. Damit kann man auf einfache Art und Weise die benötigten DDL-Statements zwischen Produktiv-Version und aktuellem Development-Snapshot erstellen.

Unter Ubuntu installiert man das in Perl geschriebene Programm am einfachsten via CPAN:

> sudo cpan
cpan[1]> install MySQL::Diff

Nach der Installation führt man den Vergleich durch

> mysqldiff -u root -p PASS powerlab_latest_stable powerlab_dev

In meinem Beispiel möchte ich die Änderungen der Datenbank powerlab_latest_stable hin zu powerlab_dev bekommen.

Der Output sieht dabei wie folgt aus:

ALTER TABLE lab_event_tags ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; # was ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
ALTER TABLE lab_event_tags_mapping ENGINE=InnoDB DEFAULT CHARSET=utf8; # was ENGINE=InnoDB DEFAULT CHARSET=latin1
ALTER TABLE lab_person DROP COLUMN last_participation; # was varchar(30) DEFAULT NULL
ALTER TABLE lab_person CHANGE COLUMN comment comment text; # was varchar(45) DEFAULT NULL
ALTER TABLE lab_person ADD COLUMN is_deleted tinyint(1) DEFAULT NULL;
ALTER TABLE lab_person ENGINE=InnoDB AUTO_INCREMENT=3113 DEFAULT CHARSET=utf8; # was ENGINE=InnoDB AUTO_INCREMENT=3112 DEFAULT CHARSET=utf8
ALTER TABLE lab_person_values ENGINE=InnoDB AUTO_INCREMENT=42424 DEFAULT CHARSET=utf8; # was ENGINE=InnoDB AUTO_INCREMENT=42390 DEFAULT CHARSET=utf8

Nach php5-intl Installtion: Unable to load dynamic library idn.so

Nach einer Installation von php5-intl auf einem Debian 6.0 Host erschien regelmäßig die folgende Fehlermeldung:

PHP Warning: PHP Startup: Unable to load dynamic library
'/usr/lib/php5/20090626/idn.so' - /usr/lib/php5/20090626/idn.so:
cannot open shared object file: No such file or directory in Unknown on line 0

Negative Auswirkungen hat diese Meldung zunächst keine, aber es ist eine Fehlkonfiguration die zeitnah behoben werden sollte:

rm /etc/php5/conf.d/idn.ini

php5-idn wird bei der Installation von php5-intl deinstalliert, jedoch wird fälschlicherweise weiterhin versucht idn zu laden.

Das php5-Modul intl stellt Internationalisierungsfunktionen zur Verfügung und wird von Frameworks wie Symfony2 oder Web-Apps wie Roundcubemail verwendet.