MySQL unter OpenBSD

Was dem Einen sein PDA ist dem Anderen sein 'kleines' Adressbuch auf Basis von MySQL und dem Perl-DBI-Interface. Also, wer noch einen alten 486'er uebrig hat weiss nun was er damit tun kann ...

Diese Anleitung bezieht sich auf OpenBSD 3.1 ...

Da ich selber ein Anfaenger auf diesem Gebiet bin wird es mit Sicherheit so sein, dass die eine oder andere Vorgehensweise, Felddeklaration oder whatever nur suboptimal sind. Aber ich hoffe, dass dieser kleine Workshop trotzdem als Einstieg dienen kann.

1. Installieren und Konfigurieren von MySQL

	% pkg_add mysql-client-3.23.49.tgz
	% pkg_add mysql-server-3.23.49.tgz
Weitere Abhaengigkeiten loest OpenBSD wie gewohnt auf. Ausserdem werden die /etc/passwd und /etc/group um den user/group 'mysql' ergaenzt. Das Verzeichnis /var/mysql ist nun ebenfalls vorhanden.

Damit die Datenbank auch automatisch beim Booten startet schreiben wir noch schnell folgendes an das Ende von /etc/rc.local:

	echo 'starting mysql'; /usr/local/bin/safe_mysqld --user=mysql --log&

Hinweis: Die Datenbank laesst sich mittels 'mysqladmin shutdown' stoppen.

Wir testen ... nach einem reboot sollten nun mit 'ps ax| grep mysql' die Datenbank-Prozesse erkennbar sein.

Als naechstes sollte das Datenbank-root-Password (hat nichts mit dem root-Account aus /etc/passwd gemein!) gesetzt werden:

	% mysqladmin -u root password geheim

Im Lieferumfang der DB ist fuer administrative Aufgaben ein Commandline-Interface vorhanden, welches wir im weiteren verwenden wollen um uns ein wenig umzusehen und um die Adressdatenbank incl. einem Datenbank-User anzulegen:

	% mysql -u root -p
	  > show databases;
	  > use mysql;
	  > show tables;
	  > describe user;
	  > select host, user, password from user;
	  > quit;

Die Anzeige mittels 'select' zeigt die Informationen aus der Tabelle 'user', welche die Accounts enthaelt, die auf die DB's zugreifen duerfen. Die Tabelle 'db' erlaubt die Zugriffsrechte dann noch genauer auf die Datenbanken einzugrenzen. Der 'blank'- User wird von MySQL verwendet um anonyme Zugriffe zu erlauben - wird aber bei der Defaultinstallation ohne jede Rechte versehen.

Aus allg. Sicherheitserwaegungen loeschen wir aber den 'blank'-User sowie die Testdatenbank. Dazu starten wir wieder das Commandline-DB-Interface:

	> use mysql;
	> delete from user where user="";
	> drop database test;

2. Erstellen der Adressdatenbank und Einrichtung eines Users

	> create database adressen;
	> use adressen;
	> edit
	  create table priv_a 
		(name  char(30),
		vname char(15),
		strasse char(25),
		stadt char(25),
		telefon char(20),
		handy char(20),
		work  char(20),
		email char(30),
		serial char(4))
	:wq
	> ;
	> use mysql;
	> insert into user (host, user, password) values ('localhost', 
                                                          'ingolf', 'bla');
	> update user set Password=password('geheim') where user='ingolf';
	> insert into db (host, db, user, select_priv, insert_priv, 
                  update_priv, delete_priv) values ('%', 'adressen', 
                                             'ingolf', 'y', 'y', 'y', 'y');
	> flush privileges;
	> quit;

3. Installieren des Perl-DBI-Datenbankinterface

Wir benoetigen folgende Packet's (welche aber automatisch beim installieren von mysql-server-3.23.49 mitkommen, da sie als abhaengige Packket gekennzeichnet sind):

	p5-DBI-1.21        unified perl interface for database access
	p5-DBD-Msql-Mysql-1.22.19 MySQL drivers for the Perl DBI

4. Erfassen von Userdaten mit einem ersten Perl-Programm.

Die Serial-Nummer sollte eineindeutig vergeben und zudem besser automatisch generiert werden. Sie kann fuer administrative Zwecke oder zur Identifikation fuer Loesch- oder Updatescripte verwendet werden - dies wurde hier aber zunaechst ignoriert.

5. Abfrage der Datenbank ueber ein CGI-Frontend.

Diese Programm muss lediglich nach /var/www/cgi-bin kopiert werden (der Apache muss natuerlich schon laufen).

Durch Aufrufen der URL http://localhost/cgi-bin/data.cgi koennen nun die Adressdaten abgefragt werden.

Die Zeile '$a[0] = $query->param('such');' fragt zudem noch spezielle Suchbegriffe ab, welche dem CGI mit der URL uebergeben werden koennen.

Beispiel: http://localhost/cgi-bin/data.cgi?such=Hamburg

In diesem Fall werden die Felder Nachname, Vorname und Stadt nach dem Begriff 'Hamburg' durchsucht. Wenn kein Suchwort verwendet wird, dann werden alle Eintraege der Datenbank ausgegeben.

6. Datensicherung

Die Datenbanken koennen am einfachsten mit kleinen selbstgebauten Shellscripten gesichert werden. Dazu schreibt man folgendes:

	% mysqldump -u root --password=geheim --opt adressen > adressen.dump
	% mysqldump -u root --password=geheim --opt mysql > mysql.dump

Nach einem 'rm /var/mysql/adressen/*' (*aua*) kann dann die DB wieder hergestellt werden:

	% mysql -u root -p adressen < adressen.dump

Hinweis: Fuer Performance-Verbesserungen bitte hier: http://www.hostbaby.com/misc/mysql-openbsd.html nachlesen!

--
I.S.