SAI, WS 2000, Software Engineering Praxis

Eigene Datenbank mit MySQL

Obwohl MySQL dafür ausgelegt ist, viele Benutzer und Tabellen gleichzeitig zu unterstützen, ist es uns aus administrativen Gründen lieber, wenn jeder selbst seinen eigenen MySQL-Server startet. Prinzipiell sollten alle MySQL-Server auf der Turing laufen.

Auf Theseus sollte dann folgendes Skript aufgerufen werden mit einem noch nicht existierenden Verzeichnis:

/usr/local/mysql-scripts/installdb <Zielverzeichnis>

Bitte den absoluten Pfad des Zielverzeichnisses angeben!

Das installdb-Skript richtet das angegebene Verzeichnis mitsamt einem Unterverzeichnis namens bin ein, das einige Skripte zur Administration Ihrer Datenbank enthält:

SkriptBeschreibung
admin_project Eröffnet eine Datenbank-Sitzung, bei der Sie auf Ihrer Projekt-Datenbank arbeiten können.
admin_mysql Analog zu admin_project -- nur arbeiten Sie hier mit den Systemtabellen.
createdb Erzeugt eine neue Datenbank für Sie. Passen Sie bitte zuerst createtables Ihren Bedürfnissen an.
createtables Enthält die Definition Ihrer Tabellen. Bitte von Hand anpassen.
grant Erlaubt anderen Benutzer den Zugriff auf Ihre DB. Sie sollten bei Bedarf grant für Ihre Teammitglieder und/oder Ihren Tutor aufrufen.
reloaddb Lädt die Tabellen neu.
startdb Startet den MySQL-Server für Ihre Datenbank. Die bestehenden Tabellen werden nicht verändert.
stopdb Beendet den MySQL-Server. Die bestehenden Tabellen werden nicht verändert. Sie können den Server jederzeit mit startdb wieder starten.
zapdb Beendet den Server und löscht alle Tabellen. Ihre Daten gehen verloren.
Passen Sie bitte createtables und rufen Sie dann auf Theseus createdb ; stopdb auf. Danach sollte MySQL auf Turing laufen. Natürlich muss der Server auf Turing noch gestartet werden (startdb). Ohne Änderung der Rechte können Perl-Skripte nur von der Turing aus auf die Datenbank zugreifen. Dies können Sie mit grant oder admin_mysql ändern.


Das folgende Programm sollte den Inhalt eine Tabelle ausgeben:
#!/usr/local/bin/perl -w

use Getopt::Std;
use DBI;
use Mysql::Admin qw(dbi_connect);
use strict;

my $cmdname = $0; $cmdname =~ s{.*/}{};
my $usage = "Usage: $cmdname [-d delim] dbdir table\n";
my %opts = (); getopts('d:', \%opts);
my $delim = ' ';
$delim = $opts{'d'} if defined($opts{'d'});
die $usage unless @ARGV == 2;
my $dbdir = shift;
my $table = shift;
my $db = DBI->connect(dbi_connect($dbdir), "", "");
die "$cmdname: unable to connect to db: $DBI::errstr\n" unless defined $db;
$db->{RaiseError} = 1;
my $st = $db->prepare("select * from $table");
$st->execute();
my $record;
while (defined($record = $st->fetch())) {
   print join($delim, @{$record}), "\n";
}
$st->finish;
$db->disconnect;

Ingo Melzer, 12. Januar 2000,