seeseekey.net - Invictus Deus Ex Machina

Möchte man unter Win­dows eine ent­fernte MySQL-Datenbank anspre­chen, so kann man hier­für Hei­diSQL nut­zen. Mit der Soft­ware Sequel Pro gibt es so etwas ähn­li­ches für Mac OS X. Die Soft­ware kann dabei auf der offi­zi­el­len Seite bezo­gen wer­den.

Sequel Pro

Sequel Pro ist unter der MIT-Lizenz ver­füg­bar und somit freie Soft­ware. Der Quell­text ist auf Google Code zu fin­den. Er kann mit­tels eines SVN Cli­ent aus­ge­checkt werden:

svn checkout http://sequel-pro.googlecode.com/svn/trunk/ sequel-pro

Eine Alter­na­tive zu Sequel Pro ist das platt­form­über­grei­fende MySQL Work­bench, bei wel­chem es sich eben­falls um freie Soft­ware handelt.

Wer Entity-Relationship-Modelle bzw. die ent­spre­chen­den Dia­gramme (ERD) erstel­len möchte, der kann hier­für Soft­ware wie die freie MyS­QL­Work­bench nut­zen. Für das platt­form­über­grei­fende Erzeu­gen sol­cher Dia­gramme kann man aller­dings auch die freie Webap­pli­ka­tion wwws­ql­de­si­gner nutzen.

Der ERD-Designer in Aktion

Auf der Web­seite des Autors gibt es eine Demo zum Aus­pro­bie­ren. Die in PHP und Java­script geschrie­bene Soft­ware steht dabei unter einer BSD-Lizenz und ist somit freie Soft­ware. Bei der Instal­la­tion muss das ent­spre­chende Archiv nur auf dem Web­ser­ver ent­packt wer­den und kann sofort genutzt wer­den. Nur wer die Mög­lich­kei­ten der ser­ver­sei­ti­gen Spei­che­rung nut­zen möchte, muss einige Para­me­ter kon­fi­gu­rie­ren.

In der Bun­des­re­pu­blik gibt es unzäh­lige Bau­ten und Anla­gen deren Zweck den wenigs­ten geläu­fig sein wird. In einem Pro­jekt des Hob­by­his­to­ri­kers Michael Grube wer­den diese gesam­melt und auf einer Web­seite prä­sen­tiert. Das ganze trägt dabei den Namen Geschichts­spu­ren und ist auf der gleich lau­ten­den Web­seite zu fin­den.

geschichtsspuren.de

Dabei wer­den auf der Seite ver­schie­dene Daten­ban­ken, wie die Zivilschutzanlagen-Datenbank, die Luftnachrichten-Datenbank und die Geo-DB DDR Geschichte geführt. Ergänzt wird das ganze mit Arti­keln rund um sol­che Anla­gen und ähn­li­che Baulichkeiten.

In den letz­ten Tagen hatte ich mit einer Word­Press Instal­la­tion einige Pro­bleme. Diese äußer­ten sich darin, das die Web­seite bei jedem Auf­ruf hohe Last erzeugte. Im Laufe der Zeit wurde die Laste dabei immer grö­ßer. Irgend­wann gab der Ser­ver nur noch einen HTTP 500 Error von sich. Im Backend äußerte sich das ganze mit einer wei­ßen Seite, was im Nor­mal­fall auf zu wenig Spei­cher für PHP hinweist.

In die­sem Fall lag das Pro­blem an ande­rer Stelle. Beim Über­prü­fen der Daten­bank stellte sich her­aus das die Tabelle „wp_options“ enorm groß war. Im Nor­mal­fall ist diese Tabelle ein paar MiB groß. In mei­nem Fall war sie knapp 600 MiB groß und bestand aus über 500.000 Ein­trä­gen. Bei die­sen Dimen­sio­nen wird klar, wohin die Per­for­mance ver­schwun­den ist. Im kon­kre­ten Fall gab es viele „tran­si­ent“ und „displayed_galleries“ Ein­träge. Letzte Ein­träge wer­den vom Plu­gin „Next­GEN Gal­lery“ erzeugt. Die „transient“-Einträge enste­hen durch Caches (unter ande­rem für den RSS-Feed). Möchte man die Daten­bank berei­ni­gen hel­fen fol­gende SQL Befehle:

DELETE FROM wp_options WHERE option_name LIKE ('_transient_%')
DELETE FROM wp_options WHERE option_name LIKE ('displayed_galleries%')

Anschlie­ßend sollte die Tabelle opti­miert wer­den, damit der von den gelösch­ten Ein­trä­gen belegte Spei­cher­platz wie­der frei­ge­ge­ben wird.

Update:
Mitt­ler­weile gibt es auch einen ent­spre­chen­den Arti­kel im Word­Press Forum.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://www.staze.org/wordpress-_transient-buildup/

Wis­sen in struk­tu­rier­ter Form hat im Gegen­satz zu unstruk­tu­rier­tem Wis­sen, einige ent­schei­dende Vor­teile. Der wich­tigste ist wahr­schein­lich die auto­ma­ti­sierte Anwen­dung und Aus­wer­tung durch Com­pu­ter­sys­teme. Natür­lich muss hierzu erst ein­mal das ent­spre­chende Wis­sen in eine struk­tu­rierte Form gebracht wer­den. Genau dies wird beim DBPe­dia Pro­jekt gemacht. Im Falle die­ses von der Uni­ver­si­tät Leip­zig betrie­be­nen Pro­jek­tes wer­den dabei die struk­tu­rier­ten Daten der Wiki­pe­dia aus­ge­wer­tet und der All­ge­mein­heit unter der GPL bzw. der CC-BY-SA Lizenz zur Ver­fü­gung gestellt. Zu fin­den ist das Pro­jekt dabei unter http://de.dbpedia.org/.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://de.wikipedia.org/wiki/DBpedia

Manch­mal benö­tigt man eine MySQL Kom­man­do­zeile, hat aber kein „phpmyad­min“ zur Ver­fü­gung. Für einen sol­chen Fall wäre es schön wenn man eine kleine Anwen­dung hätte wel­che die­ses Pro­blem löst. Genau hier setzt die PHP Anwen­dung „Admi­ner“ an. Dabei han­delt es sich sozu­sa­gen um eine „phpmyad­min“ Minimalversion.

SQL-Query Ansicht im Adminer

Das schöne am Admi­ner ist das er nur aus einer Datei besteht und so unkom­pli­ziert „instal­liert“ wer­den kann. Zu fin­den ist das ganze unter http://www.adminer.org.

Möchte man unter Word­Press den Nut­zer­na­men ändern, so wird man fest­stel­len das dies nicht in der Nut­zer­ober­flä­che mög­lich ist. Viel mehr muss man in die­sem Fall an die Daten­bank ran. Dort gibt es die Tabelle „wp_users“ in wel­cher man den ent­spre­chen­den Nut­zer­na­men unter „user_login“ sucht und ihn dort ändert. Danach kann man sich mit dem neuen Nut­zer­na­men anmelden.

Die Daten in einer SQLite Daten­bank sind im Nor­mal­fall unver­schlüs­selt. Natür­lich kann man die Daten von Hand ver­schlüs­seln, was aber auf Dauer wahr­schein­lich etwas anstren­gend wird. Anhilfe schafft hier die Biblio­thek SQL­Ci­pher mit wel­cher SQLite Daten­ban­ken ver­schlüs­selt wer­den kön­nen. Die Biblio­thek ist dabei Open Source und steht unter der BSD Lizenz. Zu fin­den ist die Biblio­thek unter http://sqlcipher.net/.

Wei­tere Infor­ma­tio­nen gibt es unter:
http://de.wikipedia.org/wiki/Sqlite

Bei einer Daten­bank­ab­frage mit­tels PHP auf eine Post­greSQL Daten­bank kam es zu fol­gen­der Fehlermeldung:

Ungül­tige Byte-Sequenz für Kodie­rung »UTF8«

Gelöst wurde das ganze in dem die Abfrage rich­tig kodiert wurde:

$query=mb_convert_encoding($query, 'UTF-8', mb_detect_encoding($query, "UTF-8, ISO-8859-1, ISO-8859-15", true));

Damit konn­ten die Abfra­gen ohne Pro­bleme an die Daten­bank über­ge­ben werden.