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

Die zum Umgang mit MySQL benötigten Skripte befinden sich im folgenden Verzeichnis:

/home/sep2006/software/installed/mysql-skripts/
Sie können jedoch durch Ausführen des Skriptes setvars mit
turing$ . /home/sep2006/software/installed/setvars
die Datenbank-Skripte in den Pfad einbinden. Nun sind sie ohne Angabe des obigen Pfades ausführbar.

Zum Arbeiten mit der Datenbank sind einige Angaben notwendig. In der Anleitung sind diese Angaben rot markiert uns müssen durch die jeweils eigenen Wahlen für Datenbankname (hier: mydb), Verzeichnis (hier: ~/db) und Passwort (hier: mypassword), welches für den einzigen Benutzer sep gilt, ersetzt werden.

mydb (der Default-Name ist main) steht für den Namen der Natenbank, ~/db für den absoluten Pfad zum Verzeichnis, in dem die Datenbank gespeichert werden soll. Das Verzeichnis darf noch nicht exisitieren. mypassword ist durch das gewählte Password für den einzigen Benutzer sep zu ersetzen.

turing$ createdb -d mydb ~/db mypassword
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

turing$ ls db
ib_arch_log_0000000000  ib_logfile0  ib_logfile1  ibdata1  mydb  mysql  setenv
turing$
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:

turing$ cat db/setenv
MYSQL_UNIX_PORT=/home/turing/chrissch/db/socket
MYSQL_TCP_PORT=15827
turing$
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:

turing$ startdb ~/db
turing$ 041011 17:26:37  InnoDB: Started
/usr/local/mysql/bin.orig/mysqld: ready for connections

turing$
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.
turing$ cat createtables
#!/bin/bash

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
turing$ ./createtables
Enter password: mypassword
turing$
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:
turing$ 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
turing$ workondb ~/db mydb
Enter password: mypassword
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)

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.

mysql> quit
Bye 
turing$

Durch Eingabe von

turing$ stopdb ~/db
Enter password: mypassword
041011 17:54:13  /usr/local/mysql/bin.orig/mysqld: Normal shutdown

turing$ 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


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

Alle Schritte nochmal im Überblick:

  1. Datenbank-Skripte einbinden
    turing$ . /home/sep2006/software/installed/setvars
  2. Initialisierung
    turing$ createdb -d mydb ~/db mypassword
    
  3. Datei createtables anpassen (am besten im Katalog ~/db), ausführbar machen und ausführen.
  4. Datenbank starten
    turing$ startdb ~/db
    
  5. Verbindung zur Datenbank herstellen
    turing$ workondb ~/db mydb
    
  6. Fröhliches Arbeiten mit SQL, am Ende dann
    mysql> quit
    
  7. Datenbank anhalten
    turing$ stopdb ~/db
    
Bei wiederholtem Arbeiten sind nur noch die Schritte 4-7 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".


Christoph Schneckenburger, 24.10.2006