Mit der vor einiger Zeit erschienen Version 1.3 bietet Digikam nun auch die Möglichkeit eine vollwertige relationale MySQL-Datenbank zu nutzen. Die Funktion ist zwar noch nicht komplett ausgereift, bietet aber ein erhebliches Potential.
Fototools an eine Datenbank anzubinden sind keine Neuheit. Der große Vorteil von Digikam [1] & MySQL gegenüber webbasierten Anwendungen wie Gallery [2] oder Pic2base [3] besteht darin, dass die Einrichtung einer lokalen MySQL-Datenbank und der Aufbau einer Verbindung mit Digikam mit wenig bis gar keinen Kenntnissen um und über MySQL und einen Webserver zu bewerkstelligen ist.
Testsystem für die folgende Ausarbeitung ist ein Mandriva 2010.1. Ich würde mich freuen, wenn der eine oder andere an Hand dieser Ausführungen das mal auf einem anderen Basis-System testen würde und mir seine Erfahrungen dann zuarbeitet. Vielleicht kann man dann ja auch noch mehr daraus machen und auf diese Art etwas an die Digikam-Community zurückgeben.
MySQL installieren
Die relationale Datenbank MySQL ist Bestandteil aller üblichen Linux-Distributionen und kann über die jeweilige Paketverwaltung installiert werde. Die meisten Distributionen bieten dafür ein oder mehrere sogenannte Meta-Pakete an (mysql oder mysql-server, mysql-client), welche fast alles an benötigten Abhängigkeiten nach sich ziehen. In meiner Mandriva-Installation musste ich lediglich die Qt4-Bindigs von Hand nachinstallieren. Das entsprechende Paket heißt unter Mandriva qt4-database-plugin-mysql und ist notwendig, damit in Qt geschriebene Anwendungen mit MySQL kommunizieren können. OpenSuse- und Ubuntu-Nutzer installieren libqt4-sql-mysql. Fehlt das Paket, dann zeigt Digikam beim Start eine Fehlermeldung an.
Damit MySQL funktioniert, muss der Server gestartet werde. In Mandriva macht man das im Kontrollzentrum über System | Ein- oder Ausschalten von Systemdiensten. Unter OpenSuse erfolgt das in ähnlicher Weise über den Runlevel-Editor in YaST. Auf jeder Distribution funktionieren sollte der als Administrator ausgeführte Befehl
/etc/init.d/mysqld start
MySQL-Root einrichten
Besitzer eines Rechners mit Debian oder dessen Verwandten wie zum Beispiel alle Ubuntu-Derivate können diesen Abschnitt überspringen – diese Distributionen setzen das Passwort für den Datenbankbenutzer “root” bereits bei der Installation der Pakete eingerichtet.
Unter den meisten Distributionen arbeitet der MySQL-Server nach dem Start ohne Root-Passwort und es gibt zudem einen anonymen Account. Das hat Vor- und Nachteile, ist aber nicht unbedingt sicher. Es empfiehlt sich deshalb, für den den MySQL-Root-Account ein Passwort zu setzen. Diesen Benutzer darf man auf keinen Fall mit dem Systemadministrator root in einen Topf werfen. Das sind zwei völlig verschieden Dinge.
Es gibt für MySQL eine Reihe von Hilfsmitteln, die auch mit graphischen Oberflächen arbeiten – das praktischste und schnellste Werkzeug ist aber immer noch die Konsole, und darin die MySQL-Shell. Also einfach ein Terminalfenster öffnen und hier den Befehl
mysql -u root
eingeben und mit der Enter-Taste bestätigen. Das öffnet die besagte MySQL-Shell, in der man nun weitere Anweisungen übergeben kann (Abbildung 1).

mysql >.” width=”300″ height=”167″ />
Abbildung 1: Nach dem Login in den MySQL-Datenbankserver ändert sich der Prompt zumysql >. Die Anweisung zum setzen des Passwortes für den Datenbank-Benutzers root lautet im Beispiel
set password for root@localhost = password('MySQL-root_Password');
Wobei das Passwort MySQL-root_Password natürlich von mir ein willkürlich gewählter Begriff ist und so mit Sicherheit von mir nicht verwendet wird (Abbildung 2). Also selber was ausdenken! Und dabei die üblichen Regeln für die Passwortvergabe beachten.
Auch hier sind übrigens nur im deutschen übliche Sonderzeichen oder Umlaute eher kontraproduktiv. Diese Eingabe mit [Enter] bestätigen und im Anschluss MySQL anweisen, die Änderungen zu übernehmen. Das funktioniert über den MySQL-Befehl FLUSH PRIVILEGES; (Abbildung 3).

flush privileges; wendet MySQL die neuen Rechte an.” width=”300″ height=”169″ />
Abbildung 3: Über den Befehlflush privileges; wendet MySQL die neuen Rechte an. Bei allen MySQL-Befehlen darauf achten, dass diese Befehle für die Weitergabe (und vor der Bestätigung über die [Enter]-Taste) mit einem Semikolon (;) geschlossen werden müssen. Hat man das mal vergessen, dann kann man das in der nächsten Eingabezeile nachholen.
Damit ist das Passwort für den MySQL-Administrator gesetzt und man kann die MySQL-Shell mit dem Befehl quit; verlassen.

quit; verlässt man den lokalen MySQL-Server.” width=”300″ height=”169″ />
Abbildung 4: Über den Befehlquit; verlässt man den lokalen MySQL-Server.Ich habe mir an dieser Stelle angewöhnt, MySQL über den Befehl
/etc/init.d/mysqld restart
neu zu starten. Wirklich notwendig sollte das aber nicht sein!
Alternativ kann man das Passwort auch über das Tool mysqladmin setzen:
sudo /usr/bin/mysqladmin -u root password 'geheimespasswort''
Datenbank für Digikam
Jetzt geht es an das Erzeugen einer Datenbank. Diese Arbeit darf nur der Datenbankbenutzer root erledigen. Auch das geht mit wenigen Befehlszeilen in der MySQL-Shell. Dazu loggt man sich zunächst als MySQL-Admin ein:
mysql -u root -p
Die Option -p ist deshalb notwendig, damit MySQL nach dem soeben gesetzten Admin-Passwort fragt. Nach der Passworteingabe erscheint der (hoffentlich) schon bekannte Prompt der MySQL-Shell (mysql >). Hier geben Sie nun folgenden MySQL-Befehl ein:
CREATE DATABASE digikam;
Anschließend weist man MySQL an, diese Datenbank in Benutzung zu nehmen:
USE digikam;
und bestätigt das wieder mit [Eingabe].
Im nächsten Schritt muss festgelegt werden, wer wie und wo in dieser noch völlig leeren Datenbank arbeiten darf. Also zum Beispiel Tabellen anlegen, diese verändern bzw. mit Daten füllen darf. Das erledigt der Befehl
GRANT ALL ON digikam .* TO digikam_user@loclahost IDENTIFIED BY 'meinpasswort';
Die Anweisung GRANT ALL ist wichtig, denn die Anwendung Digikam (bzw. deren Benutzer) soll ja erstens die eigentliche Tabellenstruktur der Datenbank erzeugen dürfen und zweitens diese dann auch mit Daten befüllen (Abbildung 6).

digikam volle Rechte haben.” width=”300″ height=”169″ />
Abbildung 6: Auf die als MySQL-Root angelegte Datenbank soll der Nutzerdigikam volle Rechte haben. Für den Benutzer digikam_user und das dazugehörige Passwort gilt wieder das bereits gesagt. Von mir willkürlich gewählt – besser Einfälle sind erwünscht. Man sollte nur später dann noch wissen, was man sich ausgesucht hat!
Im Anschluss weist man mit dem MySQL-Befehl
FLUSH PRIVILEGES;
den MySQL-Server an, diese Anweisungen zu akzeptieren. Damit ist die Erstellung der MySQL-Datenbank für Digikam schon abgeschlossen und man kann die MySQL-Shell mit dem Befehl
quit;
verlassen. Höflich verabschiedet sich MySQL wieder mit einem netten “Bye”!
Bei Problemen
Hat man sich innerhalb dieser ganzen Einrichtung vertan oder kommt nach einem Fehler nicht mehr weiter, dann kann man mit einem einzigen Befehl in der MySQL-Shell wieder reinen Tisch machen:
DROP DATABASE digikam;
Der Befehl löscht die gesamte Datenbank – und damit alle bisherige Arbeit endgültig und unwiderruflich! Man sollte sich also mit diesem Befehl nicht an einer bereits mit Daten gefüllten Datenbank versuchen!
Digikam einrichten
Digikam und seine Abhängigkeiten installiert man mit der Paketverwaltung seiner Distribution. Das sollte wohl kein Problem sein. Bevor man nun die Einrichtung startet, kann man mal einen Blick in die schon vorhandene, aber noch leer Datenbank werfen. MySQL legt die Datenbanken unterhalb von /var/lib/mysql ab. Dort gibt es jetzt schon die Datenbank digikam. Diese hat aber noch keine Inhalte.
Diese Inhalte – also die Tabellen, deren Strukturen, Bezüge dieser untereinander und so weiter werden erst durch Digikam selber erzeugt. Dazu muss man Digikam mit der der neuen Datenbank sozusagen aber erst mal bekannt machen. Leider bietet der Dialog zur Ersteinrichtung von Digikam zurzeit noch keine Möglichkeit die Verbindung zur MySQL-Datenbank einzurichten. Man muss also notgedrungen erst mal die gesamte Einrichtung durchlaufen lassen und kann erst danach über das Menü Einstellungen | Digikam einrichten | Datenbanken die MySQL-Verbindung einrichten. In der Grundeinstellung benutzt Digikam eine Datenbank im SQLite-Format.
Hier wählt man auf dem Reiter MySQL und gelangt damit in das nächste Dialog-Fenster. Was hier drinnen steht ist unbrauchbar (entspricht dem SQLite-Setup) und muss als erstes vollständig gelöscht werden. Anschließend füllt man die Felder neu wie in Abbildung 8 und in der Tabelle “Verbindungsdaten” zu sehen.

Abbildung 8: Die Einstellungen sind zwar durch die deutsche Übersetzung relativ schwer verständlich aber eigentlich ganz einfach.
Verbindungsdaten
| Hostname | localhost |
Die Datenbank läuft ja momentan auf dem eigenen Rechner. Hier sollte wohl auch die Verbindung zu einem entfernten Rechner möglich sein, aber das habe ich bisher nicht zum funktionieren bekommen. Ich kann eine Verbindung aufbauen, aber das erzeugen der eigentlichen Datenbank schlug bisher immer fehl. |
| Anschluss | 3306 |
Hier sollten die Digikam-Übersetzer mal über die Bücher gehen. Gemeint ist Port. MySQL läuft standardmäßig auf dem Port 3306. |
| Schema | digikam |
Datenbankname für die allgemeine Datenbank |
| Thumbnails Schema Name | digikam |
Datenbanknamen für die Vorschaubilder (kann man in eine separate Datenbank tun, muss man aber nicht) |
| Benutzer | digikam_user |
Sollte eigentlich klar sein ;-) |
| Passwort | ********** |
Das zum Nutzer digikam_user passende Passwort |
Nun kann man testen, ob der MySQL-Server die Verbindung annimmt. Dazu einfach auf den Button Datenbankverbindung testen klicken. Hat man alles richtig gemacht, kann man den Dialog schließen.
Damit ist man wieder bei den gewohnten Abläufen und Digikam will nun die Verzeichnisse mit den Bildern einlesen (Abbildung 9).
Erst bei diesem Schritt legt das Tool die eigentliche Datenbank an. Ein Blick in das Verzeichnis /var/lib/mysql/digikam zeigt jetzt, was sich dort alles so befindet (Abbildung 10). An dieser Stelle gleich eine eindringliche Warnung: Hier sollte man niemals – niemals – niemals versuchen irgendwie direkt daran rumzufummeln! Das geht todsicher immer schief – und zwar vollständig!!!

Abbildung 10: Die Datenbankstruktur von Digikam auf dem MySQL-Server. An diesen Dateien sollten Sie nichts ändern.
Damit ist die Verheiratung von Digikam und MySQL eigentlich abgeschlossen. Hat man sich in seiner Sammlung schon früher dafür entschieden, Schlagworte direkt in die Bilddateien zu schreiben, dann wird man damit belohnt, dass die wiedergefunden und – wie das Beispiel zeigt – in die neue Datenbank übernommen werden (Abbildung 11).
Doch auch die manchmal ja über Jahre gewachsenen, alten Sammlungsdaten sind nicht verloren. Ein Assistent ermöglicht die Übernahme dieser Daten in die neue Datenbank. Über das Menü Extras | Database Migration öffnet sich ein Dialog-Fenster, in dem man lediglich noch die Pfade zu den alten SQLite-Datenbanken einstellen muss (Abbildung 12). Der Import in die MySQL-Datenbank kann bei größeren Sammlungen allerdings durchaus mehrere Stunden in Anspruch nehmen.

Abbildung 12: Auch bereits vorhandene Sammlungen lassen sich problemlos in eine MySQL-Datenbank überführen.
Schlussbemerkung
Diese ganze Geschichte ist bei weiten noch nicht ausgereift. So gehen bei fast bei jedem Ausflug in das Einstellungsmenü erst mal die Verbindungsdaten für die MySQL-Einrichtung verloren. Sie werden einfacher gesagt auf SQLite zurückgestellt. Man ist dann gezwungen alle Einstellungsdaten erneut einzugeben. Nicht schön, aber zumindest werden die eigentlichen Daten in der Datenbank davon nicht behelligt.
In die hier dargestellte Einrichtung habe ich in den letzten Tagen ca. 100.000 Bilder in den verschiedensten Formaten und von den verschiedensten Speichermedien eingelesen. Es funktioniert eigentlich recht ordentlich. Auch der Zugriff und die Verwaltung für mehrere Nutzer auf einer Datenbank ist möglich. Wenn jetzt auch noch die Einrichtung für eine auf einem entfernten Server laufende Datenbank einfach zu bewerkstelligen wäre, ist Digikam auf einem guten und vor allem einfachen Weg. Wer mehr Glück als ich hatte, möge doch seine Anleitung hier unter den Kommentaren posten.
Ich möchte mich an dieser Stelle vor allen bei Aleksandra & Kirsten Puschner und Meinhard Winkelmüller bedanken. Sie waren die ersten, die diese Anleitung auf ihren Rechnern getestet haben. Mein Dank geht auch an Monique Kaiser, Jochen Käßler, Stefan Reißner und Uwe Herrmuth. Sie haben sich die Anleitung angesehen und mich mit wichtigen Hinweisen versorgt.
Infos
[1] Digikam: http://www.Digikam.org
[2] Gallery: http://gallery.menalto.com
[3] Pic2base: http://www.pic2base.de











Danke Heinz-Stefan! Nach einer solchen Anleitung habe ich schon öfter gesucht und nichts gefunden!
Mahmud
Moin,
danke zunächst einmal für die Anleitung. Beim entscheidenden Einrichten der mysql-Datenbank hat sich jedoch ein Buchstabendreher eingeschlichen:
> GRANT ALL ON digikam .* TO digikam_user@loclahost IDENTIFIED BY ‘meinpasswort’;
Hier müsste es besser ‘localhost’ heissen, sonst klappt nach Einrichtung die Verbindung zur Datenbank nicht.
Viele Grüsse …
Steve`
Unter Kubuntu 10.4 mit Digikam 1.5 und MySQL bin ich wie hier beschrieben vorgegangen: Keine Schwierigkeiten, auch nicht beim Import der alten sqlite Datenbank per “Datenbank-Migration”s-tool. Danke für die Anleitung!
Auch von mir ein herzliches Dankeschön für die gute Anleitung.
Ich habe Digikam in der Version 1.8 unter SABAYON-Linux laufen.
Die MYSQL-Datenbank läuft extern auf einer kleinen Buffalo Linkstation.
Digikam kann dabei sehr gut mit der externen Datenbank umgehen. Man muss dazu jedoch die Datenbank in MYSQL für den jeweiligen Rechner freigeben. Das erreicht man, wenn man im Befehl “> GRANT ALL ON digikam .* TO digikam_user@’localhost’ IDENTIFIED BY ‘meinpasswort’;” statt “localhost” die IP des Client-Rechners einträgt oder mit IP/MASK einen ganzen IP-Bereich freigibt.
Viele Grüße
Pierre
Hi,
habe es nach dieser Beschreibung mit openSUSE 12.1 eingerichtet. Lief aller sehr gut. Nu beim starten von digikam bekomme ich folgende Fehlermeldung:
Sie besitzen nicht die nötigen Rechte für die Datenbank.
Sie besitzen fplgende Rechte nicht:
CREATE TRIGGER
Überprüfen Sie die Rechte Ihrer Datenbank und starten Sie digiKam neu.
Was muss ich in der Datenbank hinzufügen?
Gruß
Rene
Wurde die Frage jetzt beantwortet und ich habe es nur nicht mitbekommen? Ich habe genau das gleiche Problem und komme nicht weiter…
Gruß an alle und danke für die hilfreichen Tipps!