Sauber eingeräumt

MySQL-Datenbank verwalten

01.08.2004
Ob Weblog, Wiki oder Bildergalerie, kaum eine Web-Anwendung kommt ohne Datenbank aus. Mit ein paar Grundlagen werden Sie leicht ihr eigener Datenbankadministrator.

Datenbank, das klingt nach professioneller IT, und wirklich setzen viele große Firmen MySQL ein. Doch keine Angst, auch wenn fortgeschrittene Anwendungen einiges an Fachwissen erfordern, lässt sich MySQL recht einfach betreiben. Dieser Artikel zeigt die grundlegenden Schritte der MySQL-Administration, die zum Beispiel viele Web-Anwendungen voraussetzen, die eine Datenbank brauchen. Auf die Installation geht dieser Artikel nur kurz ein, denn die meisten Distributionen bringen MySQL schon mit, siehe Kasten "Installation".

Installation

MySQL zu installieren ist recht einfach, denn praktisch alle Distributionen liefern die Datenbank mit aus. Sollte es nicht ohnehin schon installiert sein, suchen Sie einfach im Paketmanager Ihrer Distribution nach den MySQL-Paketen. Installieren Sie am besten alle Pakete, auch das Entwicklungspaket (führt oft "devel" oder "dev" im Namen), denn viele Skriptsprachen und Programme brauchen es, wenn man sie aus dem Quellcode selbst kompiliert.

Fedora 2 bringt zum Beispiel folgende Pakete mit: mysql-3.23.58-9.i386.rpm (MySQL-Library, MySQL-Monitor und andere Dienstprogramme), mysql-bench-3.23.58-9.i386.rpm (Skripts und Daten für Benchmarks, also Performancemessungen), mysql-devel-3.23.58-9.i386.rpm (Entwicklungspakete), mysql-jdbc-3.0.8-2.noarch.rpm (Datenbankschnittstelle für Java), mysql-jdbc-tomcat-3.0.8-2.noarch.rpm (Adapter für den Java-Server Tomcat), mysql-server-3.23.58-9.i386.rpm (eigentlicher MySQL-Server).

Bei Suse sieht es ähnlich aus, allerdings befindet sich der Monitor im Paket mysql-client und die Library in mysql-shared. Die wichtigste Datei ist /etc/my.cnf, die alle Einstellungen des MySQL-Servers enthält.

Es gibt einige grafische Programme, um MySQL zu administrieren, aber es geht auch mit dem mitgelieferten Kommandozeilenprogramm, dem MySQL-Monitor oder auch -Client mysql, der in diesem Artikel durchgehend zum Einsatz kommt. Er setzt dieselben Kenntnisse voraus wie die meisten grafischen Tools, kommt dafür ohne Einarbeitung in die Menü- und Fensterstruktur aus. Wer den MySQL-Monitor bedienen kann, hat auf jeden Fall mit den grafischen Programmen keine Schwierigkeiten. Einige grafische Verwaltungsprogramme sind zum Beispiel KMySQLAdmin [3], der MySQL-Navigator und mysqlcc vom Datenbankhersteller selbst, das zur aktuellen Version 4 der Datenbank passt.

Abbildung 1: Als textbasiertes Kommandozeilenprogramm macht mysql einen aufgeräumten Eindruck.
Abbildung 2: Das neue grafische Verwaltungsprogramm mysqlcc der Herstellerfirma.

Ohne weitere Parameter aufgerufen, stellt der Client mysql mit dem aktuellen Linux-Benutzernamen und ohne Passwort eine Verbindung zum MySQL-Server her. Der Parameter -u erlaubt, einen andere Benutzernamen anzugeben, -p fragt nach einem Passwort, und dahinter folgt optional der Name der gewünschten Datenbank. Um als Administrator mit Passwortabfrage die Datenbank mysql zu bearbeiten, benutzen Sie folgende Befehlszeile:

mysql -u root -p mysql

Der Monitor ist für Kommandozeilenverhältnisse recht komfortabel, besitzt zum Beispiel eine "History" (behält alte Einträge in Erinnerung, durch die die Benutzerin mit der [Pfeil nach oben]-Taste scrollt). Die Eingaben, die das Programm hinter der Eingabeaufforderung mysql> erwartet, schließt ein Strichpunkt ab. Drückt der Benutzer vorher die Enter-Taste, zeigt das Programm mit -> an, dass es weitere Eingaben erwartet. Sie verlassen den Monitor wieder mit \q. Datenbanken anlegen

Streng genommen ist MySQL keine "Datenbank", sondern ein Datenbank-Management-System (DBMS). Das bedeutet, dass die Software mehrere so genannte Datenbanken gleichzeitig verwalten kann, also je eine Sammlung zusammengehöriger Tabellen. So bietet es sich an, für CD-Sammlung und Adressen zwei unterschiedliche Datenbanken anzulegen, die beide von ein und demselben MySQL-Server betreut werden. Existierende Datenbanken listen Sie im Client mit dem Befehl show databases; auf. Eine neue Datenbank legen Sie mit mysqladmin, dem Standardprogramm für die MySQL-Administration, so an:

mysqladmin create bild_db

Will MySQL ein Passwort wissen, geben Sie das mit denselben Optionen an, wie beim Client, nämlich mit -p, zum Beispiel mysqladmin -p create bild_db. Die Datenbank fragt dann das Passwort ab. Wer schon im MySQL-Monitor arbeitet, muss ihn dazu nicht verlassen, denn mit ihm geht es genauso einfach:

mysql> create database bild_db;

Sie löschen eine Datenbank wieder, indem Sie denselben Befehl mit drop statt create eintippen.

Um eine bestimmte Datenbank zu bearbeiten, geben Sie im Monitor den Befehl use Datenbank ein. Wenn Sie dann Tabellen anlegen oder ändern, beziehen sich die Eingaben immer auf die aktuell ausgewählte Datenbank. Wollen Sie also die MySQL-Systemtabellen bearbeiten (zum Beispiel, um die Benutzerrechte zu ändern, s.u.), wählen Sie die MySQL-eigene Datenbank aus: use mysql; – andernfalls zeigt MySQL einen Fehler an: ERROR 1046: No Database Selected. Die Tabellen der ausgewählten Datenbank listen Sie mit show tables; auf. Benutzer pflegenDer Verwalter der Datenbank muss nicht mit dem Linux-Admin identisch sein und deshalb auch nicht unbedingt root heißen. Bei den meisten Distributionen ist der Datenbank-User root allerdings als Administrator voreingestellt, besitzt also die weitestgehenden Rechte. Das Skript mysql_install_db trägt die entsprechenden Felder in die Systemtabellen ein, sollte die Datenbank beim Start noch leer sein. Am besten setzen Sie dann gleich das Passwort für den Administrator:

mysqladmin -u root password 'geheim'

Um die Datenbanken sauber zu trennen, empfiehlt es sich, für jede einen extra User anzulegen, der Einfachheit halber mit demselben Namen. Vielen Web-Anwendungen wollen wenigstens Datenbanknamen, Benutzernamen und Passwort wissen, bevor sie funktionieren. Am besten vergeben Sie alle verfügbaren Rechte an den jeweiligen Benutzer, er darf also zum Beispiel alle möglichen SQL-Befehle ausführen, Tabellen anlegen oder löschen. Existiert ein Benutzer zum Zeitpunkt der Rechtevergabe noch nicht, legt MySQL ihn einfach neu an.

mysql> GRANT ALL ON bild_db.* TO bild_user@localhost IDENTIFIED BY 'geheim';
mysql> flush privileges;

Der erste Befehl vergibt, wie beschrieben, alle Rechte an der Datenbank bild_db an den Benutzer bild_user, der sich in Zukunft mit dem Passwort geheim ausweisen muss. Der Teil @localhost gibt an, dass der Benutzer den Server nur vom selben Rechner aus kontaktieren darf. Wollen Sie den Zugang auch von anderen Rechnern erlauben, tragen Sie hier den jeweiligen Rechnernamen bzw. die IP-Adresse ein. Das Thema Sicherheit kann dieser Artikel nicht erschöpfend behandeln, Sie sollten sich aber gut überlegen, in welchem Zusammenhang Sie die Datenbank einsetzen: Wollen Sie beispielsweise den Zugang auf den Server von anderen Computern erlauben, sollten Sie das generell nur tun, wenn der Server hinter einem Firewall steht. Oder Sie treffen zusätzliche Maßnahmen der Absicherung. Am sichersten ist es auf jeden Fall, nur den lokalen Zugriff zu erlauben – das ist natürlich auch die restriktivste Methode, genügt aber für die meisten Web-Anwendungen, da die ohnehin auf demselben Rechner laufen. Zwei mitgelieferte Programme können hier helfen: mysql_setpermission verwaltet Rechte, mysql_access zeigt sie übersichtlich an. Tabellen anlegenNach demselben Schema wie Datenbanken und Benutzer lassen sich auch die Tabellen anlegen. Allerdings müssen Sie dabei den genauen Aufbau der Tabelle beschreiben. Jede Tabelle besteht aus mehreren Feldern, in der die Datenbank später die eigentlichen Daten einträgt. Um welche Art von Daten es sich handelt, legen die so genannten Datentypen fest: zum Beispiel Fließtext, einzelne Zeichen, Zeichenketten, Dezimalzahlen, ganz Zahlen usw. Fertige Web-Anwendungen erzeugen diese Tabellen oft selbst, so dass es genügt, Datenbank, Benutzer und Passwort anzulegen. Ein einfaches Beispiel einer Bilddatenbank könnte so aussehen:

mysql> CREATE TABLE
    -> bild_info (
    -> datei VARCHAR(20),
    -> format CHAR(3),
    -> datum DATE);

VARCHAR steht für Zeichenketten (Buchstaben, Zahlen, ..) variabler Länge, im Beispiel allerdings maximal 20 Zeichen. CHAR(3) erwartet immer genau drei Zeichen. DATE ist ein Datumsformat, das MySQL in der Form 'YYYY-MM-DD' ausgibt, also zum Beispiel 2004-03-31 für den 31. März 2004. Neben diesen verfügt MySQL noch über eine Vielzahl weiterer Datentypen, die Sie in der Dokumentation finden [3]. Grafische Tools erleichtern die Tabellenverwaltung auf jeden Fall, denn der Benutzer muss sich nicht um jedes Komma und jede Klammer bei der Eingabe kümmern. Alternativ startet der MySQL-Monitor mit dem Befehl edit einen Editor, mit dem Sie die letzte Eingabe bis zum Strichpunkt bearbeiten. Welcher das ist, legt die Umgebungsvariable EDITOR fest.

Den Aufbau einer Tabelle gibt der MySQL-Monitor mit describe aus, also zum Beispiel (siehe Abb. 3)

mysql> describe bild_info;
Abbildung 3: Der Client mysql zeigt den Aufbau der Tabelle bild_info der Datenbank bild_db.

Die Eingabe mehrzeiliger Tabellendefinitionen wird einfacher, wenn Sie sie in eine Textdatei schreiben. Der MySQL-Client verarbeitet solche Dateien auf mehrere Arten: Läuft er schon, lesen Sie die Datei mit dem Befehl source Dateiname (kurz \.) ein. Auf der Linux-Kommandozeile verarbeitet der Client die Standardeingabe, die Sie mit dem entsprechenden Operator umleiten:

mysql < sqldaten.txt

So übergeben Sie MySQL auch Dateien, die das Programm mysqldump geschrieben hat, siehe Tabelle 1.

Normalerweise hat jede Tabelle einen so genannten Primärschlüssel (primary key), ein Feld, das nie leer sein darf, denn über dieses lässt sich jede Tabellenzeile ansprechen. Häufig wird dafür eine fortlaufende Nummer verwendet, die sich nie ändert, während die anderen Felder sich ändern dürfen. Dafür besitzt MySQL das Attribut AUTO_INCREMENT, das das betreffende Feld mit einer Zahl ausfüllt, die es für jede neue Zeile erhöht. Mit diesen beiden Elementen sieht das Beispiel so aus:

mysql> CREATE TABLE
    -> bild_info (
    -> id INT AUTO_INCREMENT,
    -> datei VARCHAR(20),
    -> format CHAR(3),
    -> datum DATE,
    -> PRIMARY KEY (id));

Sinnvoll wird eine Datenbank erst, wenn man mehrere Tabellen verknüpft und seine Daten damit effizient speichert. So bietet es sich für das Beispiel an, weitere Tabellen anzulegen, die zum Beispiel die Fotografen, den Bildinhalt, oder sogar die Bilder selbst speichern. Statt zu jedem Bild in der obigen Tabelle den Fotografen einzutragen, kann die Fotografentabelle die Identifikationsnummern aller seiner Bilder enthalten. Wie ein solches Datenbankmodell im Einzelfall aussieht, ist allerdings keine ganz einfache Sache und kann hier nicht ausführlich behandelt werden.

Kasten 2: Passwort vergessen?

Haben Sie das Passwort des Datenbankadministrators (meist root) vergessen, können Sie sich als solcher gleich gar nicht mehr mit der Datenbank verbinden. Glücklicherweise bietet MySQL einen Modus, in dem es startet, ohne die Tabellen für Benutzerrechte zu beachten, die so genannten Grant-Tables. Starten Sie also MySQL in diesem Modus und ändern Sie dann das Datenbankpasswort von root:

safe_mysqld --skip-grant-tables
mysqladmin -u root flush-privileges password "neuespasswd"

Tabelle 1: Wichtige Hilfsprogramme

mysql Client-Programm oder auch MySQL-Monitor
mysqladmin Hilfsprogramm zur Verwaltung, z.B. Anlegen von Datenbanken, Passwort ändern usw.
mysql_setpermission Verwaltet Zugriffsrechte
mysqlaccess Zeigt Zugriffsrechte an
mysqlcheck Überprüft, optimiert und repariert ggf. Tabellen.
mysqldump Gibt Struktur und Inhalt von Datenbanken als Textdateien aus
mysqlhotcopy Legt bei laufendem MySQL-Server eine Kopie einer Datenbank an
mysqlimport Importiert strukturierte Daten, z.B. durch Kommas getrennte Werte
myisamcheck Überprüft und repariert Tabellen
mysqlshow Zeigt die Struktur einer Datenbank an
mysql_config gibt den Ort der Header-Dateien, der Libraries , MySQL-Version und Port zurück

Abfragen

Um Daten in die Tabellen zu schreiben, sie zu verändern und auszulesen, gibt es eine standardisierte Sprache, die auch MySQL unterstützt, die Structured Query Language (SQL). Auch wenn Programmiersprachen oder grafische Programme den direkten Einsatz von SQL oft überflüssig machen, ist es nützlich, zumindest die Basics zu kennen. Die grundlegenden SQL-Befehle sind SELECT, INSERT, UPDATE und DELETE. Listing 1 zeigt, wie man sie mit der oben angelegten Tabelle verwendet.

Listing 1

mysql> INSERT INTO bild_info (datei, format) VALUES ('himmel.jpg', 'JPG');
Query OK, 1 row affected (0.00 sec)
mysql> INSERT INTO bild_info (datei, format) VALUES ('erde.gif', 'GIF');
Query OK, 1 row affected (0.00 sec)
ysql> select * from bild_info;
+—-+————+——--+——-+
| id | datei      | format | datum |
+—-+————+——--+——-+
|  1 | himmel.jpg | JPG    | NULL  |
|  2 | erde.gif   | GIF    | NULL  |
+—-+————+——--+——-+
2 rows in set (0.00 sec)
mysql> SELECT * FROM bild_info WHERE format = 'JPG';
+—-+————+——--+——-+
| id | datei      | format | datum |
+—-+————+——--+——-+
|  1 | himmel.jpg | JPG    | NULL  |
+—-+————+——--+——-+
1 row in set (0.03 sec)
mysql> UPDATE bild_info SET datum = '2004-07-22' WHERE datei = 'himmel.jpg';
mysql> DELETE FROM bild_info WHERE id = 1;

Der INSERT-Befehl trägt eine Zeile in die Tabelle ein. Dabei müssen nicht alle Felder angegeben werden, normalerweise aber mindestens der Primary Key, den hier allerdings MySQL übernimmt, da es sich um ein AUTO_INCREMENT-Feld handelt. Das SELECT-Kommando verwendet die Wildcard *, um alle Felder einer Zeile aufzulisten. Das WHERE gibt eine Einschränkung an: In diesem Fall listet SELECT nur die Zeilen auf, bei denen in der Format-Spalte JPG steht. UPDATE verändert einzelne Felder in schon existierenden Zeilen und verarbeitet wie SELECT die WHERE-Bedingung. Der DELETE-Befehl löscht analog ganze Zeilen, hier diejenige mit der Identifikationsnummer 1, die MySQL durch AUTO_INCREMENT selbst vergeben hat.

Kasten 3: Lizenzstreit

Fedora liefert als eine der wenigen großen Distributionen nicht die aktuelle MySQL-Version 4 aus. Der Grund dafür ist, dass MySQL auf dem Weg von Version 3 zu 4 die freie Lizenz geändert hat. Statt der "liberaleren" LGPL steht die Datenbank nun unter der GPL (GNU Public License) [4]. Restriktiver ist die GPL insofern, als sie nicht zulässt, dass Programme mit anderen Lizenzen Programmteile von MySQL verwenden, ohne selbst wieder freie Software im Sinn der GPL zu werden – was mit der LGPL möglich wäre. Die Firma MySQL will damit kommerzielle Anwender dazu bringen, statt der freien die kommerzielle und damit kostenpflichtige Lizenz an ihrer Datenbank zu kaufen. Für Fedora ist der Wechsel zur GPL der Grund, bis auf weiteres bei Version 3 zu bleiben, da diese Lizenz zum Beispiel auch nicht mit derjenigen des PHP-Paketes verträglich ist [5].

Kasten 4: Sicherheit bei Suse

Suse baut seit einiger Zeit den so genannten TCP-Wrapper tcpd in MySQL ein. Damit lässt sich einstellen, welche IP-Adressen bzw. Rechnernamen eine Verbindung zur Datenbank aufbauen dürfen. Die Datei /etc/hosts.allow legt diejenigen fest, die Zugriff haben, /etc/hosts.deny führt die auf, die draußen bleiben müssen. Einem Rechner mit der IP-Adresse 192.168.1.1 erlauben Sie die Verbindung mit folgender Zeile in /etc/hosts.allow:

mysqld: 192.168.1.1

Ergänzend verhindern Sie den Zugriff aller anderen mit diesem Eintrag in /etc/hosts.deny:

mysqld: ALL

Die mitgelieferte Dokumentation rufen Sie mit man 5 hosts_access auf. Zusätzlich dazu muss MySQL selbst den Zugriff vom andere Rechner erlauben, zum Beispiel mit dem GRANT-Befehl, siehe den Abschnitt "Benutzer pflegen".

Nach oben sind der Beschäftigung mit Datenbanken keine Grenzen gesetzt, dementsprechend füllt das Thema ganze Bibliotheken. Der Einstieg ist aber halb so schwer und man kann ohne weiteres auch ohne Informatikerdiplom Datenbanken verwenden. MySQL und seine Hilfsprogramme sind klar aufgebaut und leicht zu bedienen. Fertige Web-Applikationen damit zu betreiben sollte nun kein Problem mehr sein, dann ist der Schritt zur eigenen Datenbankanwendung nicht mehr weit. Einige weiterführende Informationen finden Sie auf der Website des Linux-Magazins [6][7].

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

  • Anleitung: Digikam mit MySQL zusammen nutzen
    Mit der vor einiger Zeit erschienen Version 1.3 bietet Digikam nun auch die Möglichkeit eine vollwertige relationale MySQL-Datenbank zu nutzen. Die Funktion ist zwar noch nicht komplett ausgereift, bietet aber ein erhebliches Potential.
  • MySQL-Fork Drizzle in erster Beta-Version veröffentlicht
    Drizzle ist ein Fork der MySQL-Version 6.0. Mit dem Build 1802 präsentiert sich nun die erste Beta-Version der Microkernel-Datenbank der Öffentlichkeit.
  • Tabellendschungel lichten
    Kleine Datenbanken planen Sie leicht auf Papier. Sobald die Strukturen aber komplexer ausfallen, hilft MySQL Workbench dabei, die Übersicht zu behalten.
  • Datenbanken bearbeiten unter KDE
    Knoda ist ein leicht zu bedienendes KDE-Programm, welches die Handhabung von Datenbanken auch Benutzern erschließt. Im zweiten Teil unseres Workshops zeigen wir Ihnen, wie Sie mit dem KDE-Programm Formulare erstellen und Berichte drucken.
  • Die richtige Datenbank finden
    MySQL oder Postgres, Firebird oder lieber doch SQLite? Die Wahl der richtigen Datenbank für den Desktop fällt nicht schwer, wenn man die Hintergründe kennt.
Kommentare

Infos zur Publikation

LU 12/2014: ANONYM & SICHER

Digitale Ausgabe: Preis € 4,95
(inkl. 19% MwSt.)

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

HINWEIS ZU PAYPAL: Die Zahlung ist auch ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!       

Tipp der Woche

Ubuntu 14.10 und VirtualBox
Ubuntu 14.10 und VirtualBox
Tim Schürmann, 08.11.2014 18:45, 0 Kommentare

Wer Ubuntu 14.10 in einer virtuellen Maschine unter VirtualBox startet, der landet unter Umständen in einem Fenster mit Grafikmüll. Zu einem korrekt ...

Aktuelle Fragen

Nach Ubdates alles weg ...
Maria Hänel, 15.11.2014 17:23, 4 Antworten
Ich brauche dringen eure Hilfe . Ich habe am wochenende ein paar Ubdates durch mein Notebook von...
Brother Drucker MFC-7420
helmut berger, 11.11.2014 12:40, 1 Antworten
Hallo, ich habe einen Drucker, brother MFC-7420. Bin erst seit einigen Tagen ubuntu 14.04-Nutzer...
Treiber für Drucker brother MFC-7420
helmut berger, 10.11.2014 16:05, 2 Antworten
Hallo, ich habe einen Drucker, brother MFC-7420. Bin erst seit einigen Tagen ubuntu12.14-Nutzer u...
Can't find X includes.
Roland Welcker, 05.11.2014 14:39, 1 Antworten
Diese Meldung erhalte ich beim Versuch, kdar zu installieren. OpenSuse 12.3. Gruß an alle Linuxf...
DVDs über einen geeigneten DLNA-Server schauen
GoaSkin , 03.11.2014 17:19, 0 Antworten
Mein DVD-Player wird fast nie genutzt. Darum möchte ich ihn eigentlich gerne abbauen. Dennoch wür...