Eigene Datenbank mit MySQL
Das Starten einer Datenbank darf bei uns nur auf dem Server thales erfolgen!

Die im Folgenden rot dargestellten Texte sind durch die jeweils eigenen Wahlen für Datenbankname (hier: mydb), Verzeichnis (hier: ~/db) und Passwort (hier: test), welches für den einzigen Benutzer sep gilt, zu ersetzen.

Um eine eigene Datenbank mit Namen mydb (der Default-Name ist main) im Katalog ~/db (das muss ein absoluter Pfadname sein!) anzulegen, gehen Sie wie folgt vor (test ist dabei das Passwort, das für den Benutzer sep angegeben werden muss):

thales$ /home/sep2004/software/installed/mysql-scripts/createdb -d mydb ~/db test
InnoDB: The first specified data file ./ibdata1 did not exist:
InnoDB: a new database to be created!
041011 17:18:29  InnoDB: Setting file ./ibdata1 size to 10 MB
InnoDB: Database physically writes the file full: wait...
041011 17:18:30  InnoDB: Log file ./ib_logfile0 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile0 size to 5 MB
InnoDB: Database physically writes the file full: wait...
041011 17:18:31  InnoDB: Log file ./ib_logfile1 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile1 size to 5 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Doublewrite buffer not found: creating new
InnoDB: Doublewrite buffer created
InnoDB: Creating foreign key constraint system tables
InnoDB: Foreign key constraint system tables created
041011 17:18:33  InnoDB: Started
/usr/local/mysql/bin.orig/mysqld: ready for connections
041011 17:18:33  /usr/local/mysql/bin.orig/mysqld: Normal shutdown

041011 17:18:34  InnoDB: Starting shutdown...
041011 17:18:34  InnoDB: Shutdown completed
041011 17:18:34  /usr/local/mysql/bin.orig/mysqld: Shutdown Complete

thales$ ls db
ib_arch_log_0000000000  ib_logfile0  ib_logfile1  ibdata1  mydb  mysql  setenv
thales$
Damit gibt es nun eine Datenbank, aber der Datenbank-Server läuft noch nicht!

In der Datei setenv (im Datenbankverzeichnis) stehen die Informationen, über die der Datenbankserver erreicht werden kann:

thales$ cat db/setenv
MYSQL_UNIX_PORT=/home/thales/jmayer/db/socket
MYSQL_TCP_PORT=15827
thales$
Dies ist später wichtig, wenn wir von einem Programm aus an die Datenbank herangehen! Dazu ist es aber nötig die Datenbank vorher zu starten.

Starten der Datenbank:

thales$ /home/sep2004/software/installed/mysql-scripts/startdb ~/db
thales$ 041011 17:26:37  InnoDB: Started
/usr/local/mysql/bin.orig/mysqld: ready for connections

thales$
Bevor wir die interaktive Kommunikation mit dem Datenbankserver suchen, ist es sinnvoll, ein Skript zu entwickeln mit dem die Tabellen unserer Datenbank mydb angelegt werden. Als Beispiel sei die Datei createtables angegeben, mit der die Beispiele im Skript erzeugt werden.
thales$ cat createtables
#!/bin/bash

/home/sep2004/software/installed/mysql-scripts/workondb ~/db mydb <<'END_OF_SQL'

CREATE TABLE Angestellte (
   persid VARCHAR(32) NOT NULL PRIMARY KEY, INDEX (persid),
   name VARCHAR(255) NOT NULL,
   abtid VARCHAR(32) NOT NULL REFERENCES Abteilungen
);

CREATE TABLE Abteilungen (
   abtid VARCHAR(32) NOT NULL PRIMARY KEY, INDEX (abtid),
   name VARCHAR(255) NOT NULL,
   chef VARCHAR(32) REFERENCES Angestellte
);

CREATE TABLE Projekte (
   projektid VARCHAR(32) NOT NULL PRIMARY KEY,
      INDEX (projektid),
   name VARCHAR(255) NOT NULL
);

CREATE TABLE ProjektTeilnehmer (
   projektid VARCHAR(32) NOT NULL REFERENCES Projekte,
      INDEX (projektid),
   persid VARCHAR(32) NOT NULL REFERENCES Angestellte,
      INDEX (persid),
   PRIMARY KEY (projektid, persid)
);

END_OF_SQL
thales$ ./createtables
Enter password: test
thales$
Natürlich muss das Skript entsprechend dem gewählten Verzeichnis- und Datenbanknamen geändert werden. Die Zeilen zwischen "... <<'END_OF_SQL'" und "END_OF_SQL" enthalten die Tabellen-Definitionen, die entsprechend geändert werden können. Danach kann die Datei ausführbar (chmod +x createtables) gemacht und ausgeführt werden. Damit werden dann im Datenbank-Directory mydb interne Repräsentationen dieser Tabellen angelegt:
thales$ ls db/mydb/
Abteilungen.MYD  Angestellte.MYD  Names.MYD  ProjektTeilnehmer.MYD  Projekte.MYD
Abteilungen.MYI  Angestellte.MYI  Names.MYI  ProjektTeilnehmer.MYI  Projekte.MYI
Abteilungen.frm  Angestellte.frm  Names.frm  ProjektTeilnehmer.frm  Projekte.frm
thales$ /home/sep2004/software/installed/mysql-scripts/workondb ~/db mydb
Enter password: test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 4.0.9-gamma-standard-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> show tables;
+-------------------+
| Tables_in_mydb    |
+-------------------+
| Abteilungen       |
| Angestellte       |
| ProjektTeilnehmer |
| Projekte          |
+-------------------+
4 rows in set (0.00 sec)

mysql> Bye
thales$
Um in den interaktiven Arbeitsmodus mit der Datenbank zu kommen, empfiehlt sich folgendes kleine Skript workondb:
thales$ cat workondb
#!/bin/bash
/home/sep2004/software/installed/mysql-scripts/workondb ~/db mydb
thales$
Dieses Skript sollte wieder angepasst werden (~/db und mydb) und mit chmod +x wieder ausführbar gemacht werden. Dieses kann danach ausgeführt werden:
thales$ ./workondb
Enter password: test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 4.0.9-gamma-standard-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>
Damit ist der interaktive Modus erreicht: Die Datenbank meldet sich mit ihrem Prompt mysql>!

Durch Eingabe von quit oder <Ctrl-D> können wir diesen interaktiven Modus beenden.

Durch Eingabe von

thales$ /home/sep2004/software/installed/mysql-scripts/stopdb ~/db
Enter password: test
041011 17:54:13  /usr/local/mysql/bin.orig/mysqld: Normal shutdown

thales$ 041011 17:54:13  InnoDB: Starting shutdown...
041011 17:54:13  InnoDB: Shutdown completed
041011 17:54:13  /usr/local/mysql/bin.orig/mysqld: Shutdown Complete


thales$
"fahren" wir danach die Datenbank "herunter".

Da die Kommandozeilen zum Starten wie zum beenden relativ lange sind, können wir beide Kommandos auch in eine ausführbare Datei stecken:

thales$ cat startdb
#!/bin/bash
/home/sep2004/software/installed/mysql-scripts/startdb ~/db
thales$ cat stopdb
#!/bin/bash
/home/sep2004/software/installed/mysql-scripts/stopdb ~/db
thales$
Alle Schritte nochmal im Überblick:
  1. Initialisierung
    thales$ /home/sep2004/software/installed/mysql-scripts/createdb -d mydb ~/db test
    
  2. Datei createtables anpassen, am besten im Katalog ~/db
  3. Datei workondb anpassen, am besten ebenfalls im Katalog ~/db
  4. Dateien startdb und stopdb herstellen und ausführbar machen
  5. Datenbank starten
    thales$ startdb
    
  6. Datenbanktabellen herstellen
    thales$ createtables
    
  7. Verbindung zur Datenbank herstellen
    thales$ workondb
    
  8. Fröhliches Arbeiten mit SQL, am Ende dann
    mysql> quit
    
  9. Datenbank anhalten
    thales$ stopdb
    
Bei wiederholtem Arbeiten sind nur noch die Schritte 5, 7, 8, 9 durchzuführen!

Bitte denken Sie immer daran, Ihren Datenbank-Server mittels stopdb zu beenden, sobald Sie ihn nicht mehr benötigen, um nicht unnötig Ressourcen zu "verbraten".


Johannes Mayer, 30. März 2005