Eigene Datenbank mit MySql
Anlegen einer eigenen Datenbank namens mydb (default-Name ist main) im Katalog MY-DEMODB z.B. im Heimatkatalog (anzugeben ist hier auf jeden Fall der absolute Pfadname) -- das Ganze unbedingt auf theseus:
theseus$ /usr/local/mysql-scripts/createdb -d mydb ~/MY-DEMODB
InnoDB: The first specified data file ./ibdata1 did not exist:
InnoDB: a new database to be created!
030502 10:38:24  InnoDB: Setting file ./ibdata1 size to 10 MB
InnoDB: Database physically writes the file full: wait...
030502 10:38:25  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...
030502 10:38:26  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
030502 10:38:28  InnoDB: Started
/usr/local/mysql/bin.orig/mysqld: ready for connections
030502 10:38:28  /usr/local/mysql/bin.orig/mysqld: Normal shutdown

030502 10:38:29  InnoDB: Starting shutdown...
030502 10:38:30  InnoDB: Shutdown completed
030502 10:38:30  /usr/local/mysql/bin.orig/mysqld: Shutdown Complete

theseus$ cd MY-DEMODB/
theseus$ ls
ib_arch_log_0000000000  ib_logfile0  ib_logfile1  ibdata1  mydb  mysql  setenv
theseus$
Wenn das getan ist, sind einige Vorbereitungen getroffen. Aber: der Datenbank-Server läuft noch nicht! In der Datei setenv stehen die Informationen, über die der Datenbankserver erreicht werden kann:
theseus$ cat setenv
MYSQL_UNIX_PORT=/home/thales/jmayer/MY-DEMODB/socket
MYSQL_TCP_PORT=10400
theseus$
Dies ist später wichtig, wenn wir von Perl-Programmen aus an die Datenbank herangehen! Dazu ist es aber nötig die Datenbank vorher zu starten. Starten der Datenbank:
theseus$ /usr/local/mysql-scripts/startdb  ~/MY-DEMODB
030502 10:41:13  InnoDB: Started
/usr/local/mysql/bin.orig/mysqld: ready for connections
theseus$
Bevor wir die interaktive Kommunikation mit dem Datenbankserver suchen, ist es sinnvoll, eine 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.
theseus$ cat createtables
#!/bin/sh

PATH=/usr/local/mysql/bin:$PATH
export PATH
. $HOME/MY-DEMODB/setenv
export MYSQL_UNIX_PORT
export MYSQL_TCP_PORT

mysql 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)
);

CREATE TABLE Names (
   name CHAR(32) NOT NULL,
   nr INT
);

END_OF_SQL
theseus$
Die Zeile ". $HOME/MY-DEMODB/setenv" muss natürlich jeweils angepasst werden (Datenbank-Directory MY-DEMODB?);
gleiches gilt für die Zeile "mysql mydb <<'END_OF_SQL' (Datenbankname mydb?). Die Zeilen zwischen "mysql mydb <<'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:
theseus$ ls mydb/
Abteilungen.MYD  Angestellte.MYI  Names.frm              Projekte.MYD
Abteilungen.MYI  Angestellte.frm  ProjektTeilnehmer.MYD  Projekte.MYI
Abteilungen.frm  Names.MYD        ProjektTeilnehmer.MYI  Projekte.frm
Angestellte.MYD  Names.MYI        ProjektTeilnehmer.frm
theseus$
Um in den interaktiven Arbeitsmodus mit der Datenbank zu kommen, empfiehlt sich folgendes kleine Skript workondb:
theseus$ cat workondb
#!/bin/sh

PATH=/usr/local/mysql/bin:$PATH
export PATH

. $HOME/MY-DEMODB/setenv
export MYSQL_UNIX_PORT
export MYSQL_TCP_PORT

exec mysql mydb
theseus$
Dieses Skript sollte wieder angepasst werden (MY-DEMODB und mydb) und mit chmod +x wieder ausführbar gemacht werden. Dieses kann danach ausgeführt werden:
theseus$ workondb
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>
Damit ist der interaktive Modus erreicht: die Datenbank meldet sich mit ihrem Prompt mysql>! Durch Eingabe von quit können wir diesen interaktiven Modus beenden. Durch Eingabe von
theseus$ /usr/local/mysql-scripts/stopdb ~/MY-DEMODB
030502 10:57:32  /usr/local/mysql/bin.orig/mysqld: Normal shutdown

030502 10:57:32  InnoDB: Starting shutdown...
030502 10:57:34  InnoDB: Shutdown completed
030502 10:57:34  /usr/local/mysql/bin.orig/mysqld: Shutdown Complete

theseus$
"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:
theseus$ cat startdb
#!/bin/sh
/usr/local/mysql-scripts/startdb $HOME/MY-DEMODB
theseus$ cat stopdb
#!/bin/sh
/usr/local/mysql-scripts/stopdb $HOME/MY-DEMODB
theseus$
Alles zusammen am Anfang:
  1. Initialisierung
    theseus$ /usr/local/mysql-scripts/createdb -d mydb ~/MY-DEMODB
    
  2. Datei createtables anpassen, am besten im Katalog MY-DEMODB
  3. Datei workondb anpassen, am besten ebenfalls im Katalog MY-DEMODB
  4. Dateien startdb und stopdb herstellen und ausführbar machen
  5. Datenbank starten
    theseus$ startdb
    
  6. Datenbanktabellen herstellen
    theseus$ createtables
    
  7. Verbindung zur Datenbank herstellen
    theseus$ workondb
    
  8. Fröhliches Arbeiten mit SQL, am Ende dann
    mysql> quit
    
  9. Datenbank anhalten
    theseus$ 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".


Franz Schweiggert und Johannes Mayer, 2. Mai 2003