Virtual OS/2 International Consumer Education
VOICE-Homepage: http://de.os2voice.org
März 2004

Inhaltsverzeichnis
< Vorherige Seite | Nächste Seite >
Artikelverzeichnis

editor@os2voice.org


Auf gute Zusammenarbeit: MySQL und OS/2
Teil 2: Einrichten der Datenbank

Von Wolfgang Draxler © März 2004

Kommen wir nun zum zweiten Artikel meiner Reihe. In diesem werde ich beschreiben, wie man mehrere User anlegen kann. Weiter werden wir auch WPS-Objekte anlegen, die diverse Funktionen übernehmen. Wie z.B. das Anlegen bzw. Löschen einer Datenbank.

Aber bevor wir damit anfangen, nehmen wir noch eine Änderung an der Datenbank vor.

Ich bin der Ansicht, dass Programme und Daten auf verschiedenen Laufwerken gespeichert werden sollten. Denn damit ist es weitaus einfacher, ein Backup zu erstellen. Dies werden wir nun auch mit MySQL durchführen. Deswegen sollten Sie den MySQL-Server beenden. Dafür gibt es mehrere Möglichkeiten:

  1. Sie »schiessen« den Server einfach ab. (Nicht die sauberste Lösung, aber es funktioniert. Es ist besser, eine der anderen beiden Möglichkeiten zu verwenden.)

  2. Über das Objekt Shutdown server

  3. oder über das eCS-Fenster. Dazu müssen Sie folgenden Befehl eingeben:

    [F:\os2_prog\datenbank\mysql\bin]mysqladmin -ppw -u root shutdown
    

    Hinweis: Statt des oben angegebenen Verzeichnis müssen Sie ihr Installationsverzeichnis angeben. Bei dem Parameter -p müssen Sie statt des Wertes pw Ihr eigenes Paßwort eingeben.

Jetzt sollte die Datenbank nicht mehr in der Fensterliste erscheinen.

MySQL speichert die Daten standardmäßig in dem Verzeichnis <installationspfad>\data ab. (Also bei mir: F:\OS2_Prog\Datenbank\MySQL\data) Dieses Verzeichnis und dessen Unterverzeichnisse kopieren Sie nun auf ein anderes Laufwerk. Am besten verwenden Sie entweder die WPS oder den Befehl xcopy. Ich habe mich für das Verzeichnis G:\Work-OS2\MySQL\data entschieden. Dadurch heißt der xcopy-Befehl:

xcopy F:\OS2_Prog\Datenbank\MySQL\data\*.* G:\Work-OS2\MySQL\data\*.* /h/o/t/s/e/r/v

Nun müssen wir MySQL beim Start das neue Verzeichnis bekanntgeben.

Die Konfigurationsdatei von MySQL heißt my.cnf und befindet sich standardmäßig im Verzeichnis <startlaufwerk>:\MPTN\ETC (dies hängt von der Umgebungsvariable ETC ab). Der Inhalt dieser Datei ist:

[client]
compress
user=root

[mysqld]
user=mysql
preload-client-dll
server-id=419888
basedir=F:/OS2_Prog/Datenbank/MySQL
datadir=F:/OS2_Prog/Datenbank/MySQL/data

Nun öffnen Sie die Datei my.cnf in einem Editor (z.B. e.exe) und ändern den Wert der Anweisung datadir auf das neue Verzeichnis. In meinem Fall wäre das:

datadir=G:/Work-OS2/MySQL/data

Speichern Sie nun die Datei ab und beenden den Editor. Nun müßte die Datei folgendermaßen aussehen:

[client]
compress
user=root

[mysqld]
user=mysql
preload-client-dll
server-id=419888
basedir=F:/OS2_Prog/Datenbank/MySQL
datadir=G:/Work-OS2/MySQL/data

Jetzt können Sie die MySQL-Datenbank wieder starten.

Als nächstes werden wir noch einige Objekte für die WPS einrichten.

Diese wären:

Dazu werden wir einen User anlegen und die oben genannten Programmobjekte erstellen.

Um einen User anzulegen, müssen Sie wieder die Console starten.

Nun müssen wir in die Datenbank mysql wechseln. Dies geschieht mit dem Befehl use.

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

Jetzt werden wir einmal nachschauen, welche Tabellen in dieser Datenbank »mysql« gespeichert sind:

mysql> show tables;
+-----------------+
| Tables_in_mysql |
+-----------------+
| columns_priv    |
| db              |
| func            |
| host            |
| tables_priv     |
| user            |
+-----------------+
6 rows in set (0.00 sec)

user: In dieser Tabelle werden alle Benutzer, die auf die Datenbank zugreifen dürfen, gespeichert.

db: Mit dieser Tabelle wird der Zugriff auf die Datenbank beschrieben.

host: Beschreibung der Zugriffsrechte für Hosts.

tables_priv: Beschreibung der Zugriffsrechte für einzelne Tabellen.

columns_priv: Beschreibung der Zugriffsrechte für einzelne Spalten in den Tabellen.

func: In dieser Tabelle werden Informationen zu selbstdefinierten Funktionen gespeichert. (Für die Berechtigungen ist diese Tabelle nicht notwendig.)

Um nun den User WPS anzulegen, benötigen wir die Tabelle USER. Um nun nähere Informationen über diese Tabelle zu erhalten, verwenden Sie den Befehl desc <Tabelle>.

mysql> desc user;
+-----------------+---------------+------+-----+---------+-------+
| Field           | Type          | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+-------+
| Host            | char(60)      |      | PRI |         |       |
| User            | char(16)      |      | PRI |         |       |
| Password        | char(16)      |      |     |         |       |
| Select_priv     | enum('N','Y') |      |     |    N    |       |
| Insert_priv     | enum('N','Y') |      |     |    N    |       |
| Update_priv     | enum('N','Y') |      |     |    N    |       |
| Delete_priv     | enum('N','Y') |      |     |    N    |       |
| Create_priv     | enum('N','Y') |      |     |    N    |       |
| Drop_priv       | enum('N','Y') |      |     |    N    |       |
| Reload_priv     | enum('N','Y') |      |     |    N    |       |
| Shutdown_priv   | enum('N','Y') |      |     |    N    |       |
| Process_priv    | enum('N','Y') |      |     |    N    |       |
| File_priv       | enum('N','Y') |      |     |    N    |       |
| Grant_priv      | enum('N','Y') |      |     |    N    |       |
| References_priv | enum('N','Y') |      |     |    N    |       |
| Index_priv      | enum('N','Y') |      |     |    N    |       |
| Alter_priv      | enum('N','Y') |      |     |    N    |       |
+-----------------+---------------+------+-----+---------+-------+

Wie man sieht, erstellt DESC eine Liste aller Spalten der Tabelle USER. Weitere angezeigte Informationen sind:

Um nun den WPS-User anzulegen, muß ein neuer Satz zu der Tabelle hinzugefügt werden. Dazu verwenden wir den Insert-Befehl.

mysql> insert into user
-> (host, user, password, Create_priv, Drop_priv)
-> values
-> ("localhost", "wps", password("wps"), "Y", "Y");
Query OK, 1 row affected (0.04 sec)

Nun ist der Satz bzw. der User in der Datenbank gespeichert. Da MySQL die Berechtigungen intern speichert, müssen diese neue Berechtigungen aktualisiert werden.

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

Um zu kontrollieren, ob der Satz wirklich in der Tabelle gespeichert ist, können wir noch eine Abfrage starten. Dazu verwenden wir den Select-Befehl.

mysql> select * from user;
+-----------------------------------------+------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+
| Host                                    | User | Password         | Select_priv | Insert_priv | Update_priv | Delete_priv | Create_priv | Drop_priv | Reload_priv | Shutdown_priv | Process_priv | File_priv | Grant_priv | References_priv | Index_priv | Alter_priv |
+-----------------------------------------+------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+
| localhost                               | root | 28748dc05f058960 |      Y      |      Y      |      Y      |      Y      |      Y      |     Y     |      Y      |       Y       |       Y      |     Y     |      Y     |        Y        |     Y      |     Y      |
| localhost                               | wps  | 6867a41c29783e9f |      N      |      N      |      N      |      N      |      Y      |     Y     |      N      |       N       |       N      |     N     |      N     |        N        |     N      |     N      |
+-----------------------------------------+------+------------------+-------------+-------------+-------------+-------------+-------------+-----------+-------------+---------------+--------------+-----------+------------+-----------------+------------+------------+
2 rows in set (0.00 sec)

Wie man sieht, haben wir jetzt zwei User:

Den User Root, der alle Berechtigungen hat, und den neuangelegten User WPS, der nur die Berechtigung hat, eine neue Datenbank anzulegen bzw. zu löschen.

Normalerweise werden bei dem Insert-Befehl die Spalten, die nicht angegeben sind, mit NULL (also kein Eintrag oder leer) gefüllt. Bei der Tabelle USER ist dies nicht der Fall, denn alle Felder enthalten N. Der Grund hierfür ist, dass die Tabellenbeschreibung der Spalte unter DEFAULT den Wert N enthält.

Nun werden wir noch die dazugehörigen MySQL-Objekte auf der Arbeitsoberfläche anlegen.

Dazu erstellen Sie zwei neue Programmobjekte mit den folgenden Einstellungen:

  1. Objekt: Create Database

    Programmname: F:\OS2_PROG\DATENBANK\MYSQL\BIN\MYSQLADMIN.EXE

    Parameter: -uwps -pwps create [New Database:]

    Symbol: F:\OS2_Prog\Datenbank\MySQL\bin\icons\mySQL-CreateDatabase.ico

  2. Objekt: Drop Database

    Programmname: F:\OS2_PROG\DATENBANK\MYSQL\BIN\MYSQLADMIN.EXE

    Parameter: -uwps -pwps drop [Drop Database:]

    Symbol: F:\OS2_Prog\Datenbank\MySQL\bin\icons\mySQL-DropDatabase.ico

Damit schließe ich den zweiten Teil des Artikels. Im nächsten Artikel werde ich auf SQL genauer eingehen.

Daten und Quellen:

MySQL: http://www.mysql.de
MySQL für OS/2 (Yuri Dario): http://os2power.dnsalias.com/index.html
MySQL für OS/2 (Netlabs): http://mysql.netlabs.org


Wolfgang Draxler lebt mit seiner Ehefrau Yvonne in Wien. Er ist für eine Softwareentwicklungs- und Beratungsfirma im Bereich der Organisations- und Datenbankprogrammierung tätig. Privat arbeitet er unter anderem an der Weiterentwicklung von Sibyl für OS/2, einer Delphi-ähnlichen Programmiersprache.

Artikelverzeichnis
editor@os2voice.org
< Vorherige Seite | Inhaltsverzeichnis | Nächste Seite >
VOICE-Homepage: http://de.os2voice.org