Administration von MySQL-Datenbanken
Kommandogewalt

DeveloperIT-ProjekteSoftware

MySQL-Datenbanken lassen sich auf verschiedene Weise administrieren. SQL-Spezialisten erzielen auf Kommandozeilen-Ebene schnelle Ergebnisse. Wer es bequemer wünscht, greift auf Tools mit grafischer Bedienoberfläche zurück.

Zugriff via SSH

Administration von MySQL-Datenbanken

MySQL-Datenbanken sind besonders gut für die Nutzung im Internet geeignet. Sie arbeiten vergleichsweise schnell und zuverlässig. Die Administration solcher Datenbanken kann entweder auf Kommandozeilen-Ebene oder über Admin-Tools mit grafischer Bedienoberfläche erfolgen. Wenn Sie die Administration Ihrer MySQL-Datenbanken auf der Kommandozeilen-Ebene erledigen wollen, ist neben guten Kenntnissen der SQL-Abfragesprache auch ein direkter Zugang zum Datenbank-Server via Telnet oder SSH notwendig. Diese Voraussetzungen sind meist nur bei einem Root- oder V-Server gegeben.

Bei Shared-Hosting-Paketen ist die MySQL-Datenbankumgebung in der Regel fest vorkonfiguriert, was die Administrationsoptionen von vornherein erheblich einschränkt. Hier erfolgt die Administration am sinnvollsten über Admin-Tools wie PhpMyAdmin, die auf dem Shared-Hosting-Paket installiert werden oder vom Provider standardmäßig angeboten werden.

Der Zugriff auf den MySQL-Datenbankserver zur Eingabe von SQL-Kommandos erfolgt über den so genannten MySQL-Monitor, den Sie auf einem Linux-System nach Herstellung einer Telnet/SSH-Verbindung durch Eingabe des Kommandos mysql aufrufen können.

Steht die Verbindung, erscheint der Prompt mysql> und SIe können mit der Eingabe der gewünschten SQL-Kommandos loslegen. Eine Übersicht der verfügbaren Kommandos können Sie durch die Eingabe von -? oder -help abrufen.

MySQL verfügt über einen umfangreichen Befehlssatz, der dem der Standard-Datenbank-Abfragesprache SQL sehr ähnlich ist. Damit lassen sich alle erforderlichen Aktivitäten zum Anlegen, Administrieren und Pflegen von Datenbanken realisieren. Der Vorteil der Arbeit auf Kommandozeilen-Ebene ist vor allem die Geschwindigkeit. Die Befehle gehen ohne Umwege direkt an den Datenbank-Server und es muss nicht der Overhead, den eine grafische Oberfläche zwangsläufig mit sich bringt, zwischen Client und Server hin- und hergeschickt werden.


Datenbanken anlegen und löschen

Administration von MySQL-Datenbanken

Um eine neue MySQL-Datenbank anzulegen, reicht ein einziger Befehl:

CREATE DATABASE Datenbankname;

Normalerweise wird bei der Installation schon eine Datenbank angelegt. Sie heißt mysql und enthält die notwendigen Systemtabellen. Ansonsten kann man sie behandeln wie jede andere Datenbank auch, also zum Beispiel auch eigene Tabellen dort anlegen ? sofern man die Rechte hat. Das ist aber nicht zu empfehlen. Besser ist es, für die Tabellen, die man für eine Web-Applikation benötigt, jeweils eine eigene Datenbank anzulegen.

Intern wird jede Datenbank in einem gesonderten Unterordner des MySQL-Ordners der MySQL-Installation gespeichert. Es sind normale Dateien. Man sollte sie aber mit keinem anderen Werkzeug als mit MySQL bearbeiten, da sonst möglicherweise schwerwiegende Inkonsistenzen entstehen, die so weit reichen können, dass die Datenbank anschließend nicht mehr benutzbar und nicht mehr wiederherstellbar ist.


Nutzer und Berechtigungen

Administration von MySQL-Datenbanken

Berechtigungen gibt es auf der Datenbank- und der Betriebssystem-Ebene. Auf Letzterer muss natürlich sichergestellt sein, dass der Benutzer die Rechte auf die jeweiligen Ordner ? gegebenenfalls auch im Netzwerk ? hat. Hier ist nur von der Datenbank-Ebene die Rede, die von der des Betriebssystems völlig unabhängig arbeitet.

Der Eigentümer, also der, der die Datenbank angelegt hat, wird als Benutzer schon standardmäßig angelegt. In MySQL heißt er root, hat kein Passwort, aber alle Rechte. Er kann andere Benutzer anlegen und ihnen bestimmte Rechte zuteilen oder entziehen. Er kann auch anderen Benutzern Administratorrechte erteilen ? sie können dann so wie er Benutzer anlegen und Rechte verwalten.

Das Verwalten von Benutzern und Rechten ist mit folgenden Befehlen möglich:

GRANT ALL PRIVILEGES ON *.* TO NeuerUser IDENTIFIED BY ‘passwort’;

Dieser Befehl legt einen neuen Benutzer an. In unserem Beispiel werden dem Benutzer NeuerUser dabei alle Rechte erteilt. Analog wird ein Benutzer unbrauchbar gemacht, indem ihm mit dem REVOKE-Befehl alle Rechte entzogen werden.


Rechte ändern

Administration von MySQL-Datenbanken

Der GRANT-Befehl kann auch nachträglich zum Zuweisen von Rechten benutzt werden:

GRANT Recht ON Was TO UserName;

Er vergibt ein Recht. Dabei kann für Recht ALL PRIVILEGES, FILE, RELOAD, ALTER, INDEX, SELECT, CREATE, INSERT, SHUTDOWN, DELETE, PROCESS, UPDATE, DROP, REFERENCES und USAGE eingesetzt werden.

Für Was kann ein Tabellenname oder Datenbankname ? dann gilt das Recht für alle Tabellen dieser Datenbank ? eingesetzt werden. Der Zusatz WITH GRANT OPTION beim GRANT-Befehl bewirkt, dass der Benutzer seine Rechte an andere weitergeben darf. Das Gegenteil von GRANT ist REVOKE. Mit REVOKE werden Rechte entzogen:

REVOKE Recht ON Was FROM UserName;

Ansonsten gilt für REVOKE das gleiche wie für GRANT. In MySQL kann man einem User zunächst alle Rechte entziehen:

REVOKE ALL PRIVILEGES ON * FROM UserName;

um ihm dann gezielt wieder bestimmte Rechte zu erteilen. Um sich anzeigen zu lassen, welche Rechte jemand hat, gibt man den Befehl ein:

SHOW GRANTS FOR Benutzer;

Noch ein Tipp: Dem Eigentümer root sollte man schnellstmöglich ein Passwort erteilen, da sonst eine Sicherheitslücke bleibt, von der zu viele wissen.


Systemtabellen von MySQL

Administration von MySQL-Datenbanken

Die Berechtigungen auf alle Objekte eines MySQL-Systems sind in der Datenbank mysql in den Tabellen user, host, db, tables_priv und columns_priv gespeichert. Mit entsprechenden Rechten kann man diese Tabellen verwalten wie jede andere MySQL-Tabelle auch. Es ist allerdings Vorsicht geboten. Zum Beispiel führt ein Löschen der Datensätze dazu, dass MySQL nicht mehr verwendbar sein kann. Die Tabellen regeln die Berechtigungen auf unterschiedlichen Ebenen:

– Die Tabelle user regelt, welcher Benutzer sich von welchem Host aus mit welchem Passwort anmelden darf und welche globalen Rechte er dort hat.

– Die Tabelle host regelt, welche Rechte die Benutzer auf den Datenbanken abhängig von dem Host, von dem aus sie sich anmelden, haben.

– Die Tabelle db regelt, welche Datenbanken ein User benutzen darf.

– Die Tabelle tables_priv regelt, welche Tabellen der Benutzer mit welchen Rechten benutzen darf.

– Die Tabelle columns_priv regelt, welche Spalten welcher Tabellen der Benutzer mit welchen Rechten benutzen darf.


Datenbank-Design

Administration von MySQL-Datenbanken

Wie bei jeder Datenbank ist der entscheidende Ansatz zur Optimierung das Datenbank-Design. Daneben gibt es auch für MySQL Anweisungen und Werkzeuge, mit deren Hilfe Tabellen geprüft, optimiert und repariert werden können.

Der Ausdruck Datenbank-Design beschreibt vereinfacht gesagt, welche Felder die Tabellen haben und wie sie untereinander in Beziehung stehen (Primary Keys und Foreign Keys). Darüber kann man unter passenden Stichwörtern wie Entity-Relationship-Modell, Normalisierung, Redundanz, Integrität nachlesen.

Ganz wichtig ist die durchdachte Nutzung von Indizes. Ein Index beschleunigt nicht nur erheblich die Performance bei Abfragen, er kann als Unique Key auch verhindern, dass Daten unbeabsichtigt mehrfach gespeichert werden.


Optimieren von Tabellen

Administration von MySQL-Datenbanken

Nun zu den technischen Möglichkeiten von MySQL, Tabellen zu optimieren. Optimierun
g meint in diesem Fall Folgendes:

Durch häufiges Aktualisieren werden systembedingt die Daten an physischen Speicheradessen abgelegt, die nach und nach immer weiter verstreut sind, also fragmentiert. Daneben bleiben einige alte Daten, die eigentlich hätten gelöscht oder überschrieben werden sollen, physisch noch gespeichert. Sie werden zwar nie benutzt, aber immer wieder durchsucht. Das bremst die Performance und erhöht auch die Fehleranfälligkeit. Deshalb sollte von Zeit zu Zeit aufgeräumt werden. Für diese Aufgabe bieten sich die MySQL-Kommandos myisamchk, isamchk und OPTIMIZE TABLES an, die als Anweisungen aufgerufen werden können oder auch in grafische Werkzeuge wie den MySQL Administrator integriert sind.

Diese Anweisungen können auch benutzt werden, um beschädigte Tabellen ? zum Beispiel nach einem Absturz ? wiederherzustellen. Bevor eine dieser Anweisungen ausgeführt wird, sollten unbedingt Sicherheitskopien der betreffenden Tabellen angelegt werden.

Das Kommando myisamchk kann speziell zum Optimieren (Defragmentieren) einer Tabelle genutzt werden. Dazu geben Sie ein:

myisamchk -r tabelle

Darüber hinaus bietet myisamchk zahlreiche weitere Optionen. Welche Optionen möglich sind, zeigt die Anweisung myisamchk –help. Ohne Optionen aufgerufen, führt das Kommando nur eine Prüfung der Tabellen durch. Um alle Tabellen zu prüfen, geben Sie folgende Anweisung ein:

myisamchk –silent –fast /pfad/*/*.MYI

Weitere Optionen von myisamchk können zur Verbesserung der Performance eingesetzt werden.

Isamchk ist eine Variante von myisamchk für Isam-Tabellen und kann nahezu analog benutzt werden.

Die Anweisung OPTIMIZE TABLE repariert und defragmentiert nicht nur die Tabelle, sondern analysiert auch die verwendeten Schlüssel und sortiert den Indexbaum. Letzteres ermöglicht ein Key-Lookup, also ein schnelleres Nachschlagen der Schlüssel. OPTIMIZE TABLES zeigt besonders gute Wirkung, wenn große Teile der Tabelle gelöscht wurden oder bei Tabellen mit Zeilen variabler Länge viele Änderungen durchgeführt wurden, also Tabellen, in denen gehäuft VARCHAR-, BLOB– oder TEXT-Spalten enthalten sind.