Kapitel 8. Client- und Hilfsprogramme
Zurück |  | Weiter

## Kapitel 8. Client- und Hilfsprogramme

Es gibt eine Vielzahl verschiedener MySQL-Clientprogramme, die Verbindungen mit dem Server herstellen, um auf Datenbanken zuzugreifen oder administrative Aufgaben durchzuführen. Auch andere Hilfsprogramme sind verfügbar. Diese stellen keine Clientverbindung mit dem Server her, sondern führen MySQL-spezifische Operationen durch.

In diesem Kapitel bieten wir einen kurzen Überblick über diese Programme und beschreiben sie nachfolgend jeweils im Detail. In der Beschreibung der Programme sind die Syntax zum Aufruf und die unterstützten Optionen enthalten. In Kapitel 4, Benutzung von MySQL-Programmen, finden Sie allgemeine Informationen zum Aufruf von Programmen und zur Angabe von Programmoptionen.

## 8.1. Überblick über Client- und Hilfsprogramme

Die folgende Liste stellt eine kurze Beschreibung der MySQL-Clientprogramme und Hilfsprogramme dar:

- myisamchk

  Mit diesem Hilfsprogramm können Sie `MyISAM`-Tabellen beschreiben, überprüfen, optimieren und reparieren. Siehe auch Abschnitt 8.2, „myisamchk — Hilfsprogramm für die Tabellenwartung von MyISAM“.

- myisamlog

  Ein Hilfsprogramm, das den Inhalt einer `MyISAM`-Logdatei verarbeitet. Siehe auch Abschnitt 8.4, „myisampack — Erzeugung komprimierter, schreibgeschützter MyISAM Tabellen“.

- myisampack

  Ein Hilfsprogramm, das `MyISAM`-Tabellen komprimiert und so kleinere schreibgeschützte Tabellen erzeugt. Siehe auch Abschnitt 8.4, „myisampack — Erzeugung komprimierter, schreibgeschützter MyISAM Tabellen“.

- mysql

  Befehlszeilen-Tool zur interaktiven Eingabe von SQL-Anweisungen und zur Ausführung solcher Anweisungen aus einer Datei im Stapelbetriebsmodus. Siehe auch Abschnitt 8.5, „mysql — Das MySQL-Befehlszeilenwerkzeug mysql“.

- mysqlaccess

  Ein Skript, welches die Zugriffsberechtigungen für eine Kombination aus Hostnamen, Benutzernamen und Datenbank überprüft. Siehe auch Abschnitt 8.6, „mysqlaccess — Client für die Überprüfung von Zugriffsberechtigungen“.

- mysqladmin

  Ein Client, der administrative Operationen durchführt. Hierzu gehören etwa das Erstellen und Löschen von Datenbanken, das Neuladen der Grant-Tabellen, das Synchronisieren von Tabellen auf Festplatte und das Neuöffnen von Logdateien. mysqladmin kann auch verwendet werden, um Versions-, Prozess- und Statusinformationen vom Server abzurufen. Siehe auch Abschnitt 8.7, „mysqladmin — Client für die Verwaltung eines MySQL Servers“.

- mysqlbinlog

  Ein Hilfsprogramm zum Lesen von Anweisungen aus einem Binärlog. Die im Binärlog enthaltene Abfolge der ausgeführten Anweisungen kann zur Wiederherstellung nach einem Absturz nützlich sein. Siehe auch Abschnitt 8.8, „mysqlbinlog — Hilfsprogramm für die Verarbeitung binärer Logdateien“.

- mysqlcheck

  Ein Client zur Wartung von Tabellen. Überprüft, repariert, analysiert und optimiert Tabellen. Siehe auch Abschnitt 8.9, „mysqlcheck — Hilfsprogramm für die Wartung und Reparatur von Tabellen“.

- mysqldump

  Ein Client, der eine MySQL-Datenbank in Form von SQL-Anweisungen oder als tabulatorgetrennte Texte in eine Datei speichert. Siehe auch Abschnitt 8.10, „mysqldump — Programm zur Datensicherung“.

- mysqlhotcopy

  Ein Hilfsprogramm, welches schnelle Backups von `MyISAM`-Tabellen erstellt, während der Server ausgeführt wird. Siehe auch Abschnitt 8.11, „mysqlhotcopy — Backup-Programm für Datenbanken“.

- mysqlimport

  Ein Client, der Textdateien mithilfe von `LOAD DATA INFILE` in die jeweiligen Tabellen importiert. Siehe auch Abschnitt 8.12, „mysqlimport — Programm zum Datenimport“.

- mysqlshow

  Ein Client, der Informationen zu Datenbanken, Tabellen, Spalten und Indizes anzeigt. Siehe auch Abschnitt 8.13, „mysqlshow — Anzeige von Informationen über Datenbanken, Tabellen und Spalten“.

- mysqlslap

  Ein Client, dessen Zweck die Emulation einer Clientlast für einen MySQL Server ist und der zeitbezogene Angaben der einzelnen Operationsstufen meldet. Er simuliert den Zugriff mehrerer Clients auf den Server. Abschnitt 8.14, „mysqlslap — Client zur Lastemulation“.

- mysql_zap

  Ein Hilfsprogramm, mit dem Prozesse terminiert werden, bei denen eine Übereinstimmung für einen Mustervergleich vorliegt. Abschnitt 8.15, „mysql_zap — Prozesse beenden, die einem Muster entsprechen“.

- perror

  Ein Hilfsprogramm, das die Bedeutung von System- oder MySQL-Fehlercodes anzeigt. Siehe auch Abschnitt 8.16, „perror — Erklärung der Fehlercodes“.

- replace

  Ein Hilfsprogramm, das Strings in eingegebenem Text ersetzt. Siehe auch Abschnitt 8.17, „replace — Hilfsprogramm für String-Ersetzungen“.

MySQL AB bietet auch eine Anzahl von Tools mit grafischer Oberfläche an, um MySQL Server zu administrieren oder anderweitig zu bearbeiten. Grundlegende Informationen zu diesen Programmen finden Sie in Kapitel 4, Benutzung von MySQL-Programmen.

Jedes MySQL-Programm akzeptiert viele verschiedene Optionen. Die meisten Programme enthalten eine Option `--help`, über die Sie eine vollständige Beschreibung der verschiedenen Programmoptionen erhalten können. Probieren Sie z. B. mysql --help aus.

MySQL-Clientprogramme, die unter Verwendung der MySQL-Client/Server-Bibliothek mit dem Server kommunizieren, verwenden die folgenden Umgebungsvariablen:

`MYSQL_UNIX_PORT` | die vorgabeseitige Unix-Socketdatei. Sie wird für Verbindungen mit `localhost` verwendet.
`MYSQL_TCP_PORT` | die Standardportnummer. Wird für TCP/IP-Verbindungen verwendet.
`MYSQL_PWD` | das Standardpasswort.
`MYSQL_DEBUG` | gibt Trace-Optionen für das Debuggen an.
`TMPDIR` | Verzeichnis, in dem Temporärtabellen und -dateien erstellt werden.

Die Verwendung von `MYSQL_PWD` ist nicht sicher. Siehe auch Abschnitt 5.9.6, „Wie Sie Ihre Kennwörter sicher halten“.

Sie können die standardmäßigen oder durch Umgebungsvariablen festgelegten Optionswerte für alle Standardprogramme außer Kraft setzen, indem Sie andere Optionen in einer Optionsdatei oder über die Befehlszeile angeben. Siehe auch Abschnitt 4.3, „Angabe von Programmoptionen“.

## 8.2. myisamchk — Hilfsprogramm für die Tabellenwartung von MyISAM

Das Hilfsprogramm myisamchk holt Informationen zu Ihren Datenbanktabellen und überprüft, repariert und optimiert sie. myisamchk funktioniert bei `MyISAM`-Tabellen (d. h. Tabellen, die über `.MYD`- und `.MYI`-Dateien zum Speichern von Daten und Indizes verfügen).

Rufen Sie myisamchk wie folgt auf:

    shell> myisamchk [options] tbl_name ...

Mithilfe von Optionen geben Sie myisamchk an, was es tun soll. Diese Optionen sind in den folgenden Abschnitten beschrieben. Eine Liste der Optionen erhalten Sie ferner, indem Sie myisamchk --help aufrufen.

Ohne Angabe von Optionen überprüft myisamchk Ihre Tabelle; dies ist die Standardoperation. Um weitere Informationen abzurufen oder myisamchk zur Durchführung von Korrekturmaßnahmen anzuweisen, geben Sie die Optionen wie nachfolgend beschrieben an.

`tbl_name` ist dabei die Datenbanktabelle, die Sie überprüfen oder reparieren wollen. Führen Sie myisamchk in einem anderen als dem Datenbankverzeichnis aus, dann müssen Sie den Pfad zum Datenbankverzeichnis angeben, weil myisamchk sonst nicht weiß, wo es die Datenbank suchen soll. Eigentlich ist es myisamchk sogar egal, ob die Dateien, die Sie verarbeiten wollen, sich im Datenbankverzeichnis befinden. Sie können die Dateien, die einer Datenbanktabelle entsprechen, an eine andere Position kopieren und Wiederherstellungsoperationen auch dort vornehmen.

Bei Bedarf können Sie auf der Befehlszeile auch mehrere Tabellen für myisamchk angeben. Ferner ist es möglich, eine Tabelle durch Angabe ihrer Indexdatei (d. h. der Datei mit der Dateierweiterung `.MYI`) auszuwählen. Auf diese Weise können Sie alle Tabellen in einem Verzeichnis auswählen, indem Sie das Muster `*.MYI` verwenden. Befinden Sie sich beispielsweise in einem Datenbankverzeichnis, dann können Sie alle dort vorhandenen `MyISAM`-Tabellen wie folgt überprüfen:

    shell> myisamchk *.MYI

Befinden Sie sich nicht im Datenbankverzeichnis, dann können Sie alle dort vorhandenen Tabellen trotzdem überprüfen, indem Sie den Verzeichnispfad angeben:

    shell> myisamchk /path/to/database_dir/*.MYI

Sie können sogar alle Tabellen in allen Datenbanken überprüfen. Hierzu geben Sie den Pfad zum MySQL-Datenverzeichnis mit Jokerzeichen an:

    shell> myisamchk /path/to/datadir/*/*.MYI

Die empfohlene Vorgehensweise zur schnellen Überprüfung aller `MyISAM`-Tabellen ist die folgende:

    shell> myisamchk --silent --fast /path/to/datadir/*/*.MYI

Wenn Sie alle `MyISAM`-Tabellen überprüfen und alle ggf. beschädigten Tabellen reparieren wollen, können Sie den folgenden Befehl verwenden:

    shell> myisamchk --silent --force --fast --update-state \
              --key_buffer_size=64M --sort_buffer_size=64M \
              --read_buffer_size=1M --write_buffer_size=1M \
              /path/to/datadir/*/*.MYI

Dieser Befehl setzt mindestens 64 Mbyte freien Arbeitsspeicher voraus. Weitere Informationen zur Speicherzuweisung bei myisamchk finden Sie in Abschnitt 8.2.5, „Speicherbenutzung von `myisamchk`“.

Sie müssen sicherstellen, dass kein anderes Programm die Tabellen verwendet, während Sie myisamchk ausführen. Andernfalls kann bei der Ausführung von myisamchk folgende Fehlermeldung angezeigt werden:

    warning: clients are using or haven't closed the table properly

Das bedeutet, dass Sie gerade versuchen, eine Tabelle zu überprüfen, die von einem anderen Programm (z. B. dem Server mysqld) verändert wurde, welches die Datei noch nicht geschlossen hat oder abgestürzt ist, bevor es die Datei korrekt schließen konnte.

Wenn mysqld läuft, müssen Sie durch Verwendung von `FLUSH TABLES` das Synchronisieren aller Änderungen an Tabellen erzwingen, die noch im Speicher gepuffert sind. Nachfolgend müssen Sie sicherstellen, dass kein anderes Programm die Tabellen verwendet, während Sie myisamchk ausführen. Die einfachste Möglichkeit, dieses Problem zu umgehen, ist die Tabellenüberprüfung mit `CHECK TABLE` anstelle von myisamchk.

### 8.2.1. Allgemeine Optionen für `myisamchk`

Die in diesem Abschnitt beschriebenen Optionen können für alle Arten von Wartungsvorgängen verwendet werden, die von myisamchk an Tabellen vorgenommen werden. Die nachfolgenden Abschnitte beschreiben dann Optionen, die spezifisch für bestimmte Operationen wie die Überprüfung oder Reparatur von Tabellen sind.

- `--help`, `-?`

  Zeigt eine Hilfemeldung an und wird dann beendet.

- `--debug=`debug_options`, -# `debug_options``

  Schreibt ein Debuglog. Der String `debug_options` heißt häufig `'d:t:o,`file_name`'`.

- `--silent`, `-s`

  Stummer Modus. Eine Ausgabe erfolgt nur, wenn ein Fehler auftritt. Sie können `-s` zweimal angeben (`-ss`), um myisamchk vollständig zum Verstummen zu bringen.

- `--verbose`, `-v`

  Ausführlicher Modus. Es werden zusätzliche Angaben zu den Aktivitäten des Programms ausgegeben. Die Option kann gemeinsam mit `-d` und `-e` eingesetzt werden. Verwenden Sie `-v` mehrfach (`-vv`, `-vvv`), um noch mehr Angaben auszugeben.

- `--version`, `-V`

  Zeigt die Versionsinformation an und wird dann beendet.

- `--wait`, `-w`

  Statt mit einem Fehler beendet zu werden, wenn die Tabelle gesperrt ist, wartet das Programm, bis die Sperre aufgehoben ist, und fährt dann mit der Ausführung fort. Beachten Sie, dass, wenn Sie mysqld mit deaktivierter externer Sperrung ausführen, die Tabelle nur durch einen weiteren myisamchk-Befehl gesperrt werden kann.

Sie können mit der Syntax `--`var_name`=`value`` auch die folgenden Variablen einstellen:

Variable | Standardwert
`decode_bits` | 9
`ft_max_word_len` | versionsspezifisch
`ft_min_word_len` | 4
`ft_stopword_file` | integrierte Liste
`key_buffer_size` | 523264
`myisam_block_size` | 1024
`read_buffer_size` | 262136
`sort_buffer_size` | 2097144
`sort_key_blocks` | 16
`stats_method` | nulls_unequal
`write_buffer_size` | 262136

Welche myisamchk-Variablen unterstützt werden und welche Standardwerte sie haben, ermitteln Sie mit myisamchk --help:

`sort_buffer_size` wird benutzt, wenn die Schlüssel durch Sortierung repariert werden, was bei Verwendung von `--recover` der Normalfall ist.

`key_buffer_size` verwenden Sie bei der Überprüfung der Tabelle mit `--extend-check` oder aber dann, wenn die Schlüssel durch Einfügen von Schlüsseldatensätzen in die Tabelle (ähnlich normalen Einfügeoperationen) repariert werden. Die Reparatur über den Schlüsselpuffer wird in den folgenden Fällen verwendet:

- Sie verwenden `--safe-recover`.

- Die zur Sortierung der Schlüssel erforderlichen Temporärdateien wären mehr als doppelt so groß wie bei der direkten Erstellung der Schlüsseldatei. Dies passiert häufig, wenn Sie große Schlüsselwerte für `CHAR`-, `VARCHAR`- oder `TEXT`-Spalten haben, weil im Zuge des Sortiervorgangs die vollständigen Schlüsselwerte gespeichert werden müssen. Wenn Sie viel Speicher für temporäre Daten haben und die Reparatur durch Sortierung mithilfe von myisamchk erzwingen wollen, verwenden Sie die Option `--sort-recover`.

Die Reparatur über den Schlüsselpuffer benötigt wesentlich weniger Festplattenspeicher als die Sortierung, ist allerdings auch langsamer.

Wenn Sie eine schnellere Reparatur wünschen, setzen Sie die Variablen `key_buffer_size` und `sort_buffer_size` auf einen Wert von ca. 25 Prozent Ihres verfügbaren Speichers. Sie können beide Variablen auf hohe Werte setzen, da immer nur eine von ihnen gleichzeitig verwendet wird.

`myisam_block_size` ist die Größe, die für Indexblöcke verwendet wird.

`stats_method` beeinflusst, wie `NULL`-Werte bei der Erfassung von Indexstatistiken behandelt werden, wenn die Option `--analyze` angegeben wurde. Sie agiert wie die Systemvariable `myisam_stats_method`. Weitere Informationen entnehmen Sie der Beschreibung von `myisam_stats_method` in Abschnitt 5.2.2, „Server-Systemvariablen“, und Abschnitt 7.4.7, „Sammlung von `MyISAM`-Indexstatistiken“.

`ft_min_word_len` und `ft_max_word_len` geben die minimale bzw. maximale Wortlänge für `FULLTEXT`-Indizes an. `ft_stopword_file` gibt die Datei mit den Stoppwörtern an. Diese Optionen müssen unter den nachfolgend beschriebenen Umständen eingestellt werden.

Wenn Sie mit myisamchk eine Operation durchführen, die Tabellenindizes verändert (dies können etwa Reparatur- oder Analyseoperationen sein), dann werden die `FULLTEXT`-Indizes unter Verwendung der standardmäßigen Volltextparameterwerte für die minimale und maximale Wortlänge und die Stoppwortdatei verwendet, sofern Sie nichts anderes angeben. Dies kann dazu führen, dass Abfragen fehlschlagen.

Das Problem tritt auf, weil diese Parameter nur dem Server bekannt sind. Sie werden nicht in den `MyISAM`-Indexdateien gespeichert. Um das Problem zu umgehen, wenn Sie die minimale oder maximale Wortlänge oder die Stoppwortdatei am Server geändert haben, geben Sie dieselben Werte `ft_min_word_len`, `ft_max_word_len` und `ft_stopword_file` für myisamchk an, die Sie für mysqld verwendet haben. Haben Sie also beispielsweise die Mindestwortlänge auf 3 gesetzt, dann können Sie eine Tabelle mit myisamchk wie folgt reparieren:

    shell> myisamchk --recover --ft_min_word_len=3 tbl_name.MYI

Wenn Sie gewährleisten wollen, dass myisamchk und der Server dieselben Werte für Volltextparameter verwenden, können Sie sie jeweils in die Abschnitte `[mysqld]` und `[myisamchk]` einer Optionsdatei eintragen:

    [mysqld]
    ft_min_word_len=3

    [myisamchk]
    ft_min_word_len=3

Eine Alternative zur Verwendung von myisamchk besteht in der Nutzung von `REPAIR TABLE`, `ANALYZE TABLE`, `OPTIMIZE TABLE` oder `ALTER TABLE`. Diese Anweisungen werden vom Server ausgeführt, der die korrekten Werte der Volltextparameter kennt.

### 8.2.2. Prüfoptionen für `myisamchk`

myisamchk unterstützt die folgenden Optionen für Operationen zur Tabellenüberprüfung:

- `--check`, `-c`

  Überprüft die Tabelle auf Fehler. Dies ist die Standardoption; sie wird verwendet, wenn Sie keine Option angeben, die ausdrücklich einen Operationstyp spezifiziert.

- `--check-only-changed`, `-C`

  Überprüft nur Tabellen, die seit der letzten Überprüfung geändert wurden.

- `--extend-check`, `-e`

  Überprüft die Tabelle sehr gründlich. Das kann recht lange dauern, wenn die Tabelle viele Indizes hat. Sie sollten die Option nur in Extremfällen einsetzen. Normalerweise sollten Sie mit myisamchk oder myisamchk --medium-check ermitteln können, ob Fehler in einer Tabelle vorhanden sind.

  Wenn Sie `--extend-check` verwenden und viel Speicher haben, können Sie die Variable `key_buffer_size` auf einen großen Wert setzen. Hierdurch wird der Reparaturvorgang schneller ausgeführt.

- `--fast`, `-F`

  Überprüft nur Tabellen, die nicht ordnungsgemäß geschlossen wurden.

- `--force`, `-f`

  Führt eine Reparaturoperation automatisch aus, wenn myisamchk Fehler in der Tabelle findet. Der Reparaturtyp ist derselbe, der auch mit der Option `--recover` bzw. `-r` angegeben wird.

- `--information`, `-i`

  Gibt informative Statistiken zur überprüften Tabelle aus.

- `--medium-check`, `-m`

  Führt eine Überprüfung durch, die schneller ist als eine `--extend-check`-Operation. Hierdurch werden nur 99,99 Prozent aller Fehler gefunden (dies sollte allerdings in den meisten Fällen ausreichend sein).

- `--read-only`, `-T`

  Kennzeichnet die Tabelle nicht als überprüft. Das kann praktisch sein, wenn Sie mit myisamchk eine Tabelle überprüfen, die gerade von einer anderen Anwendung benutzt wird, welche keine Sperrung verwendet. Dies kann beispielsweise mysqld sein, wenn es mit deaktivierter externer Sperrung ausgeführt wird.

- `--update-state`, `-U`

  Speichert Daten in der `.MYI`-Datei, die angeben, wann die Tabelle zum letzten Mal überprüft wurde und ob sie abgestürzt war. Diese Option sollten Sie verwenden, um die Option `--check-only-changed` optimal nutzen zu können, nicht jedoch, wenn der Server mysqld die Tabelle verwendet und ohne externe Sperrung ausgeführt wurde.

### 8.2.3. Reparaturoptionen für `myisamchk`

myisamchk unterstützt die folgenden Optionen für Operationen zur Tabellenreparatur:

- `--backup`, `-B`

  Erstellt ein Backup der Datei `.MYD` als ``file_name`-`time`.BAK`.

- `--character-sets-dir=`path``

  Das Verzeichnis, in dem Zeichensätze installiert sind. Siehe auch Abschnitt 5.11.1, „Der für Daten und zum Sortieren benutzte Zeichensatz“.

- `--correct-checksum`

  Korrigiert die Prüfsummeninformation für die Tabelle.

- `--data-file-length=`len`, -D `len``

  Gibt die maximale Länge der Datendatei an (zur Neuerstellung der Datendatei, wenn diese „voll“ ist).

- `--extend-check`, `-e`

  Führt eine Reparatur durch, die alle Datensätze aus der Datendatei wiederherzustellen versucht, bei denen dies möglich ist. Normalerweise werden hierdurch auch viele nicht mehr erforderliche Datensätze gefunden. Verwenden Sie diese Option nur, wenn Sie vollkommen verzweifelt sind.

- `--force`, `-f`

  Überschreibt alte Zwischendateien (Dateien mit Namen wie ``tbl_name`.TMD`) anstatt abzubrechen.

- `--keys-used=`val``, `-k `val``

  Bei myisamchk ist die Option ein Bitwert, der angibt, welche Indizes aktualisiert werden müssen. Jedes Binärbit des Optionswerts entspricht einem Tabellenindex, wobei der erste Index Bit 0 ist. Der Optionswert 0 deaktiviert Änderungen an allen Indizes, was zur Beschleunigung von Einfügeoperationen genutzt werden kann. Deaktivierte Indizes können mit myisamchk -r reaktiviert werden.

- `--parallel-recover`, `-p`

  Verwendet dieselbe Methode wie `-r` und `-n`, erstellt aber alle Schlüssel parallel unter Verwendung verschiedener Threads. Der Code hat bislang nur Betaqualität. Verwendung auf eigene Gefahr!

- `--quick`, `-q`

  Beschleunigt die Reparatur, da die Datendatei nicht geändert wird. Sie können diese Option zweimal angeben, um die Änderung der Originaldatendatei durch myisamchk im Falle von Schlüsseldubletten zu erzwingen.

- `--recover`, `-r`

  Führt eine Reparatur aus, die praktisch jedes Problem behebt (ausgenommen sind eindeutige Schlüssel, die nicht eindeutig sind – ein Fehler, der bei `MyISAM`-Tabellen extrem selten vorkommt). Wenn Sie eine Tabelle wiederherstellen wollen, sollten Sie diese Option zuerst ausprobieren. `--safe-recover` sollten Sie nur verwenden, wenn myisamchk meldet, dass die Tabelle mit `--recover` nicht wiederhergestellt werden kann. (In dem unwahrscheinlichen Fall, dass `--recover` fehlschlägt, bleibt die Datendatei intakt.)

  Wenn Sie sehr viel Speicher haben, sollten Sie den Wert von `sort_buffer_size` erhöhen.

- `--safe-recover`, `-o`

  Führt eine Reparatur unter Verwendung einer alten Wiederherstellungsmethode durch, die alle Datensätze der Reihe nach ausliest und alle Indexbäume entsprechend den gefundenen Datensätzen aktualisiert. Dies ist um eine Größenordnung langsamer als `--recover`, kann aber ein paar sehr unwahrscheinliche Fälle beheben, die `--recover` nicht korrigiert. Diese Methode verwendet überdies wesentlich weniger Festplattenspeicher als `--recover`. Normalerweise sollten Sie zuerst eine Reparatur mit `--recover` durchführen und `--safe-recover` nur dann verwenden, wenn `--recover` fehlschlägt.

  Wenn Sie sehr viel Speicher haben, sollten Sie den Wert von `key_buffer_size` erhöhen.

- `--set-collation=`name``

  Gibt die für die Tabellen zu verwendende Sortierung an. Dabei wird der Zeichensatzname implizit durch den ersten Teil des Sortierungsnamens festgelegt.

- `--sort-recover`, `-n`

  Erzwingt die Verwendung der Sortierung zur Auflösung von Schlüsseln durch myisamchk auch für den Fall, dass die Temporärdateien sehr groß werden würden.

- `--tmpdir=`path`, -t `path``

  Pfad zu dem Verzeichnis, in dem die Temporärdateien gespeichert werden. Wenn diese Einstellung nicht vorgenommen wird, verwendet myisamchk den Wert der Umgebungsvariablen `TMPDIR`. `tmpdir` kann eine Liste der Verzeichnispfade enthalten, in denen zyklisch abwechselnd die Temporärdateien erstellt werden. Die Verzeichnispfade sind unter Unix mit Doppelpunkten (‘`:`’) und unter Windows, NetWare und OS/2 mit Semikola (‘`;`’) voneinander zu trennen.

- `--unpack`, `-u`

  Entpackt eine Tabelle, die mit myisampack gepackt wurde.

### 8.2.4. Weitere Optionen für `myisamchk`

myisamchk unterstützt die folgenden Optionen für andere Vorgänge als die Überprüfung und Reparatur von Tabellen:

- `--analyze`, `-a`

  Analysiert die Verteilung der Schlüsselwerte. Hierdurch wird die Leistungsfähigkeit von Joins verbessert, denn der Join-Optimierer kann die Reihenfolge, in der die Tabellen verknüpft werden, und die zu verwendenden Indizes besser auswählen. Um Angaben zur Schlüsselverteilung zu erhalten, verwenden Sie den Befehl myisamchk --description --verbose `tbl_name` oder die Anweisung `SHOW INDEX FROM `tbl_name``.

- `--description`, `-d`

  Gibt eine Beschreibung der Tabelle aus.

- `--set-auto-increment[=`value`]`, `-A[`value`]`

  Erzwingt für neue Datensätze den Start der `AUTO_INCREMENT`-Nummerierung beim angegebenen Wert (oder einem höheren Wert, sofern Datensätze mit derart großen `AUTO_INCREMENT`-Werten bereits vorhanden sind). Wenn `value` nicht angegeben wurde, beginnen die `AUTO_INCREMENT`-Zahlen für neue Datensätze beim höchsten derzeit in der Tabelle vorhandenen Wert plus 1.

- `--sort-index`, `-S`

  Sortiert die Blöcke des Indexbaums in absteigender Reihenfolge. Hierdurch werden Suchvorgänge optimiert und Tabellenscans, die Indizes benutzen, beschleunigt.

- `--sort-records=`N`, -R `N``

  Sortiert Datensätze nach einem bestimmten Index. Hierdurch werden Ihre Daten stärker lokalisiert, und bereichsbasierte `SELECT`- und `ORDER BY`-Operationen, die diesen Index benutzen, werden beschleunigt. (Wenn Sie diese Option zur Sortierung einer Tabelle zum ersten Mal verwenden, kann sie sehr langsam arbeiten.) Um die Indexnummern einer Tabelle zu bestimmen, verwenden Sie `SHOW INDEX`. Hierdurch werden die Indizes einer Tabelle in derselben Reihenfolge angezeigt, in der sie auch myisamchk erkennt. Die Indizes sind beginnend mit 1 nummeriert.

  Wenn die Schlüssel nicht gepackt sind (`PACK_KEYS=0)`), dann haben sie dieselbe Länge. Insofern überschreibt myisamchk, wenn es Datensätze sortiert und verschiebt, einfach nur Datensatzoffsets im Index. Sind die Schlüssel hingegen gepackt (`PACK_KEYS=1`), dann muss myisamchk die Schlüsselblöcke zuerst entpacken, dann die Indizes neu erstellen und die Schlüsselblöcke abschließend wieder packen. (In diesem Fall ist die Neuerstellung der Indizes schneller als die Aktualisierung der Offsets für jeden Index.)

### 8.2.5. Speicherbenutzung von `myisamchk`

Die Speicherreservierung ist für die Ausführung von myisamchk sehr wichtig. myisamchk verwendet niemals mehr Speicher als über seine speicherbezogenen Variablen angegeben. Wenn Sie myisamchk für sehr große Tabellen verwenden, sollten Sie zunächst entscheiden, wie viel Speicher Sie verwenden wollen. Standardmäßig werden zur Durchführung von Reparaturen nur etwa 3 Mbyte benutzt. Durch Verwendung höherer Werte können Sie die Verarbeitungsgeschwindigkeit von myisamchk beschleunigen. Wenn Sie beispielsweise mehr als 32 Mbyte RAM haben, könnten Sie Optionen wie die folgenden (zusätzlich zu ggf. anderen angegebenen Optionen) verwenden:

    shell> myisamchk --sort_buffer_size=16M --key_buffer_size=16M \
               --read_buffer_size=1M --write_buffer_size=1M ...

Die Nutzung von `--sort_buffer_size=16M` sollte in den meisten Fällen ausreichend sein.

Beachten Sie, dass myisamchk Temporärdateien in `TMPDIR` benutzt. Wenn `TMPDIR` auf ein Speicherdateisystem verweist, kann es leicht zu Problemen aufgrund mangelnden Hauptspeichers kommen. In diesem Fall führen Sie myisamchk mit der Option `--tmpdir=`path`` aus, um ein Verzeichnis auf einem Dateisystem anzugeben, auf dem mehr Speicher zur Verfügung steht.

Bei der Reparatur benötigt myisamchk auch eine Menge Festplattenkapazität.

- Die doppelte Größe der Datendatei (einmal für die Originaldatei, einmal für die Kopie). Dieser Festplattenspeicher wird nicht benötigt, wenn Sie eine Reparatur mit der Option `--quick` durchführen, denn in diesem Fall wird nur die Indexdatei neu erstellt. Der Festplattenspeicher muss auf demselben Dateisystem wie die ursprüngliche Datendatei vorhanden sein! (Das liegt daran, dass die Kopie im gleichen Verzeichnis erstellt wird wie die Originaldatei.)

- Platz für die neue Indexdatei, die die alte Datei ersetzt. Die alte Indexdatei wird zu Beginn der Reparaturoperation gekürzt, d. h., Sie können diesen Speicherbedarf in der Regel ignorieren. Der Festplattenspeicher muss auf demselben Dateisystem wie die ursprüngliche Indexdatei vorhanden sein!

- Wenn Sie `--recover` oder `--sort-recover` (nicht aber `--safe-recover`) verwenden, benötigen Sie Platz für einen Sortierpuffer. Die folgende Formel ermöglicht die Berechnung der erforderlichen Kapazität:

      (largest_key + row_pointer_length) × number_of_rows × 2

  Sie können die Länge der Schlüssel und `row_pointer_length` mit myisamchk -dv `tbl_name` überprüfen. Diese Festplattenkapazität wird im Temporärverzeichnis reserviert, das mit `TMPDIR` oder `--tmpdir=`path`` angegeben wird.

Sollte während der Reparatur ein Problem in Bezug auf den Festplattenspeicher auftreten, dann können Sie `--safe-recover` statt `--recover` verwenden.

## 8.3. myisamlog — Anzeige von MyISAM-Logdateiinhalten

myisamlog verarbeitet den Inhalt einer `MyISAM`-Logdatei.

Rufen Sie myisamlog wie folgt auf:

    shell> myisamlog [options] [log_file [tbl_name] ...]

Die Standardoperation ist die Aktualisierung (`-u`). Erfolgt eine Wiederherstellung (Option `-r`), dann werden alle Schreiboperationen und ggf. Änderungen und Löschungen durchgeführt. Fehler werden nur gezählt. Der Standardname der Logdatei lautet `myisam.log`, sofern kein Argument `log_file` übergeben wurde. Werden auf der Befehlszeile Tabellen angegeben, dann werden auch nur diese Tabellen aktualisiert.

myisamlog versteht die folgenden Optionen:

- `-?`, `-I`

  Zeigt eine Hilfemeldung an und wird dann beendet.

- `-c `N``

  Führt nur `N` Befehle aus.

- `-f `N``

  Gibt die maximale Anzahl offener Dateien an.

- `-i`

  Zeigt vor dem Beenden zusätzliche Informationen an.

- `-o `offset``

  Gibt den Startoffset an.

- `-p `N``

  Entfernt `N` Komponenten aus dem Pfad.

- `-r`

  Führt eine Wiederherstellungsoperation durch.

- `-R `record_pos_file record_pos``

  Gibt die Datensatzpositionsdatei und die Datensatzposition an.

- `-u`

  Führt eine Aktualisierungsoperation durch.

- `-v`

  Ausführlicher Modus. Es werden zusätzliche Angaben zu den Aktivitäten des Programms ausgegeben. Diese Option kann mehrfach angegeben werden, um den Umfang der Ausgabe kontinuierlich zu erhöhen.

- `-w `write_file``

  Gibt die zu schreibende Datei an.

- `-V`

  Zeigt Versionsinformationen an.

## 8.4. myisampack — Erzeugung komprimierter, schreibgeschützter MyISAM Tabellen

Das Hilfsprogramm myisampack komprimiert `MyISAM`-Tabellen. Es komprimiert dabei jede Spalte in der Tabelle separat. Normalerweise erzielt myisampack für die Datendatei Komprimierungsraten von 40 bis 70 Prozent.

Wird die Tabelle später verwendet, dann liest der Server die zur Dekomprimierung der Spalten erforderlichen Angaben in den Speicher ein. Hierdurch wird die Leistungsfähigkeit beim Zugriff auf einzelne Datensätze erheblich verbessert, da Sie nur genau einen Datensatz dekomprimieren müssen.

Sofern möglich, verwendet MySQL `mmap()` für die Speicherzuordnung bei komprimierten Tabellen. Funktioniert `mmap()` nicht, dann nutzt MySQL ersatzweise normale Schreib- und Leseoperationen für Dateien.

Beachten Sie bitte Folgendes:

- Wenn der mysqld-Server mit deaktivierter externer Sperrung aufgerufen wurde, sollte myisampack nicht aufgerufen werden, sofern die Möglichkeit besteht, dass die Tabelle während des Komprimierungsvorgangs durch den Server aktualisiert werden könnte. Am besten wird der Server vor der Komprimierung der Tabellen beendet.

- Wenn eine Tabelle gepackt wurde, ist sie schreibgeschützt. Dies ist normalerweise auch beabsichtigt (z. B. beim Zugriff auf komprimierte Tabellen auf einer CD). Die Möglichkeit, in eine gepackte Tabelle zu schreiben, ist von uns zur mittel- bis langfristigen Implementierung vorgesehen.

- myisampack kann `BLOB`- oder `TEXT`-Spalten packen. (Das ältere Programm pack_isam für `ISAM`-Tabellen bot diese Möglichkeit nicht.)

Rufen Sie myisampack wie folgt auf:

    shell> myisampack [options] file_name ...

Jedes Dateinamensargument sollte der Name einer Indexdatei (`.MYI`-Datei) sein. Wenn Sie sich nicht im Datenbankverzeichnis befinden, sollten Sie auch den Pfadnamen zu der Datei angeben. Die Erweiterung `.MYI` dürfen Sie nach Belieben weglassen.

Nachdem Sie eine Tabelle mit myisampack komprimiert haben, sollten Sie myisamchk -rq zur Neuerstellung der Indizes verwenden. Siehe Abschnitt 8.2, „myisamchk — Hilfsprogramm für die Tabellenwartung von MyISAM“.

myisampack unterstützt die folgenden Optionen:

- `--help`, `-?`

  Zeigt eine Hilfemeldung an und wird dann beendet.

- `--backup`, `-b`

  Erstellt ein Backup der Datendateien aller Tabellen. Die Sicherungsdateien erhalten den Namen ``tbl_name`.OLD`.

- `--debug[=`debug_options`]`, `-# [`debug_options`]`

  Schreibt ein Debuglog. Der String `debug_options` heißt häufig `'d:t:o,`file_name`'`.

- `--force`, `-f`

  Erzeugt auch dann eine gepackte Tabelle, wenn diese größer als die Ursprungstabelle wird oder noch eine Zwischendatei von myisampack vorhanden ist. (myisampack erzeugt im Verlauf der Komprimierung eine Zwischendatei namens ``tbl_name`.TMD` im Datenbankverzeichnis. Wenn Sie myisampack terminieren, dann wird die `.TMD`-Datei unter Umständen nicht gelöscht.) Normalerweise wird myisampack mit einem Fehler beendet, wenn es eine vorhandene Datei ``tbl_name`.TMD` findet. Mit `--force` packt myisampack die Tabelle jedoch in jedem Fall.

- `--join=`big_tbl_name``, `-j `big_tbl_name``

  Fasst alle auf der Befehlszeile aufgeführten Tabellen zu einer großen Tabelle `big_tbl_name` zusammen. Alle Tabellen, die zusammengefasst werden sollen, müssen eine identische Struktur aufweisen (d. h. gleiche Spaltennamen und -typen, gleiche Indizes usw.).

- `--packlength=`len``, `-p `len``

  Gibt die Speichergröße für die Datensatzlänge (in Byte) an. Der Wert darf zwischen 1 und 3 liegen. myisampack speichert alle Datensätze mit 1, 2 oder 3 Byte langen Längenzeigern. In den meisten normalen Fällen kann myisampack den korrekten Längenwert bestimmen, bevor es mit dem Packen der Datei beginnt. Es kann allerdings während des Packvorgangs feststellen, dass es eine geringere Länge hätte verwenden können. In diesem Fall gibt myisampack einen Hinweis aus, dass Sie, wenn Sie dieselbe Datei beim nächsten Mal packen, eine geringere Datensatzlänge verwenden können.

- `--silent`, `-s`

  Stummer Modus. Eine Ausgabe erfolgt nur, wenn ein Fehler auftritt.

- `--test`, `-t`

  Die Tabelle wird nicht gepackt, sondern das Packen wird lediglich geprüft.

- `--tmpdir=`path``, `-T `path``

  Verwendet das angegebene Verzeichnis als Position, an der myisamchk Temporärdateien erstellt.

- `--verbose`, `-v`

  Ausführlicher Modus. Gibt Informationen zum Fortschritt des Komprimierungsvorgangs und -ergebnisses aus.

- `--version`, `-V`

  Zeigt die Versionsinformation an und wird dann beendet.

- `--wait`, `-w`

  Sorgt dafür, dass der Packvorgang nach einer Wartezeit neu versucht wird, wenn die Tabelle gerade verwendet wird. Wenn der mysqld-Server mit deaktivierter externer Sperrung aufgerufen wurde, sollte myisampack nicht aufgerufen werden, sofern die Möglichkeit besteht, dass die Tabelle während des Komprimierungsvorgangs durch den Server aktualisiert werden könnte.

Die nachfolgend gezeigte Befehlsfolge veranschaulicht eine typische Tabellenkomprimierungssitzung:

    shell> ls -l station.*
    -rw-rw-r--   1 monty    my         994128 Apr 17 19:00 station.MYD
    -rw-rw-r--   1 monty    my          53248 Apr 17 19:00 station.MYI
    -rw-rw-r--   1 monty    my           5767 Apr 17 19:00 station.frm

    shell> myisamchk -dvv station

    MyISAM file:     station
    Isam-version:  2
    Creation time: 1996-03-13 10:08:58
    Recover time:  1997-02-02  3:06:43
    Data records:              1192  Deleted blocks:              0
    Datafile parts:            1192  Deleted data:                0
    Datafile pointer (bytes):     2  Keyfile pointer (bytes):     2
    Max datafile length:   54657023  Max keyfile length:   33554431
    Recordlength:               834
    Record format: Fixed length

    table description:
    Key Start Len Index   Type                 Root  Blocksize    Rec/key
    1   2     4   unique  unsigned long        1024       1024          1
    2   32    30  multip. text                10240       1024          1

    Field Start Length Type
    1     1     1
    2     2     4
    3     6     4
    4     10    1
    5     11    20
    6     31    1
    7     32    30
    8     62    35
    9     97    35
    10    132   35
    11    167   4
    12    171   16
    13    187   35
    14    222   4
    15    226   16
    16    242   20
    17    262   20
    18    282   20
    19    302   30
    20    332   4
    21    336   4
    22    340   1
    23    341   8
    24    349   8
    25    357   8
    26    365   2
    27    367   2
    28    369   4
    29    373   4
    30    377   1
    31    378   2
    32    380   8
    33    388   4
    34    392   4
    35    396   4
    36    400   4
    37    404   1
    38    405   4
    39    409   4
    40    413   4
    41    417   4
    42    421   4
    43    425   4
    44    429   20
    45    449   30
    46    479   1
    47    480   1
    48    481   79
    49    560   79
    50    639   79
    51    718   79
    52    797   8
    53    805   1
    54    806   1
    55    807   20
    56    827   4
    57    831   4

    shell> myisampack station.MYI
    Compressing station.MYI: (1192 records)
    - Calculating statistics

    normal:     20  empty-space:   16  empty-zero:     12  empty-fill:  11
    pre-space:   0  end-space:     12  table-lookups:   5  zero:         7
    Original trees:  57  After join: 17
    - Compressing file
    87.14%
    Remember to run myisamchk -rq on compressed tables

    shell> ls -l station.*
    -rw-rw-r--   1 monty    my         127874 Apr 17 19:00 station.MYD
    -rw-rw-r--   1 monty    my          55296 Apr 17 19:04 station.MYI
    -rw-rw-r--   1 monty    my           5767 Apr 17 19:00 station.frm

    shell> myisamchk -dvv station

    MyISAM file:     station
    Isam-version:  2
    Creation time: 1996-03-13 10:08:58
    Recover time:  1997-04-17 19:04:26
    Data records:               1192  Deleted blocks:              0
    Datafile parts:             1192  Deleted data:                0
    Datafile pointer (bytes):      3  Keyfile pointer (bytes):     1
    Max datafile length:    16777215  Max keyfile length:     131071
    Recordlength:                834
    Record format: Compressed

    table description:
    Key Start Len Index   Type                 Root  Blocksize    Rec/key
    1   2     4   unique  unsigned long       10240       1024          1
    2   32    30  multip. text                54272       1024          1

    Field Start Length Type                         Huff tree  Bits
    1     1     1      constant                             1     0
    2     2     4      zerofill(1)                          2     9
    3     6     4      no zeros, zerofill(1)                2     9
    4     10    1                                           3     9
    5     11    20     table-lookup                         4     0
    6     31    1                                           3     9
    7     32    30     no endspace, not_always              5     9
    8     62    35     no endspace, not_always, no empty    6     9
    9     97    35     no empty                             7     9
    10    132   35     no endspace, not_always, no empty    6     9
    11    167   4      zerofill(1)                          2     9
    12    171   16     no endspace, not_always, no empty    5     9
    13    187   35     no endspace, not_always, no empty    6     9
    14    222   4      zerofill(1)                          2     9
    15    226   16     no endspace, not_always, no empty    5     9
    16    242   20     no endspace, not_always              8     9
    17    262   20     no endspace, no empty                8     9
    18    282   20     no endspace, no empty                5     9
    19    302   30     no endspace, no empty                6     9
    20    332   4      always zero                          2     9
    21    336   4      always zero                          2     9
    22    340   1                                           3     9
    23    341   8      table-lookup                         9     0
    24    349   8      table-lookup                        10     0
    25    357   8      always zero                          2     9
    26    365   2                                           2     9
    27    367   2      no zeros, zerofill(1)                2     9
    28    369   4      no zeros, zerofill(1)                2     9
    29    373   4      table-lookup                        11     0
    30    377   1                                           3     9
    31    378   2      no zeros, zerofill(1)                2     9
    32    380   8      no zeros                             2     9
    33    388   4      always zero                          2     9
    34    392   4      table-lookup                        12     0
    35    396   4      no zeros, zerofill(1)               13     9
    36    400   4      no zeros, zerofill(1)                2     9
    37    404   1                                           2     9
    38    405   4      no zeros                             2     9
    39    409   4      always zero                          2     9
    40    413   4      no zeros                             2     9
    41    417   4      always zero                          2     9
    42    421   4      no zeros                             2     9
    43    425   4      always zero                          2     9
    44    429   20     no empty                             3     9
    45    449   30     no empty                             3     9
    46    479   1                                          14     4
    47    480   1                                          14     4
    48    481   79     no endspace, no empty               15     9
    49    560   79     no empty                             2     9
    50    639   79     no empty                             2     9
    51    718   79     no endspace                         16     9
    52    797   8      no empty                             2     9
    53    805   1                                          17     1
    54    806   1                                           3     9
    55    807   20     no empty                             3     9
    56    827   4      no zeros, zerofill(2)                2     9
    57    831   4      no zeros, zerofill(1)                2     9

myisampack zeigt die folgenden Informationen an:

- `normal`

  Anzahl der Spalten, für die keine zusätzliche Komprimierung verwendet wird.

- `empty-space`

  Anzahl der Spalten, die ausschließlich aus Leerzeichen bestehende Werte enthalten. Diese benötigen genau ein Bit.

- `empty-zero`

  Anzahl der Spalten, die ausschließlich aus binären Nullen bestehende Werte enthalten. Diese benötigen genau 1 Bit.

- `empty-fill`

  Anzahl der Integer-Spalten, die nicht den gesamten Bytebereich des entsprechenden Typs besetzen. Diese werden auf einen kleineren Typ umgestellt. So kann beispielsweise eine `BIGINT`-Spalte (8 Byte) als `TINYINT`-Spalte (1 Byte) gespeichert werden, wenn alle in ihr enthaltenen Werte zwischen `-128` und `127` liegen.

- `pre-space`

  Anzahl der Dezimalspalten, die mit Leerzeichen am Anfang gespeichert werden. In diesem Fall enthält jeder Wert die Anzahl dieser Leerzeichen.

- `end-space`

  Anzahl der Spalten, die viele Leerzeichen am Ende aufweisen. In diesem Fall enthält jeder Wert die Anzahl dieser Leerzeichen.

- `table-lookup`

  Die Spalte enthielt nur eine kleine Anzahl verschiedener Werte und wurde deswegen vor der Komprimierung in eine `ENUM`-Spalte konvertiert.

- `zero`

  Anzahl der Spalten, in der alle Werte null sind.

- `Original trees`

  Anfängliche Anzahl der Huffman-Bäume.

- `After join`

  Anzahl der separaten Huffman-Bäume, die nach dem Verknüpfen von Bäumen zum Zwecke der Speicherersparnis übrig bleiben.

Nachdem eine Tabelle komprimiert wurde, zeigt myisamchk -dvv zusätzliche Informationen zu allen Tabellenspalten an:

- `Type`

  Der Datentyp. Der Wert kann die folgenden Deskriptoren enthalten:

  - `constant`

    Alle Datensätze haben denselben Wert.

  - `no endspace`

    Leerzeichen am Ende nicht speichern.

  - `no endspace, not_always`

    Leerzeichen am Ende nicht speichern, für alle Werte keine Komprimierung für Leerzeichen am Ende durchführen.

  - `no endspace, no empty`

    Leerzeichen am Ende nicht speichern. Leere Werte nicht speichern.

  - `table-lookup`

    Die Spalte wurde in eine `ENUM`-Spalte konvertiert.

  - `zerofill(`N`)`

    Die `N` höchstwertigen Bytes im Wert sind immer 0 und werden nicht gespeichert.

  - `no zeros`

    Nullen nicht speichern.

  - `always zero`

    Nullwerte werden nur mit einem Bit gespeichert.

- `Huff tree`

  Anzahl der mit der Spalte verknüpften Huffman-Bäume.

- `Bits`

  Anzahl der im Huffman-Baum verwendeten Bits.

Nachdem Sie myisampack ausgeführt haben, müssen Sie myisamchk starten, um die Indizes neu zu erstellen. Zur gleichen Zeit können Sie auch die Indexblöcke sortieren und Statistiken erstellen, die der MySQL-Optimierer benötigt, um effizienter arbeiten zu können:

    shell> myisamchk -rq --sort-index --analyze tbl_name.MYI

Nachdem Sie die gepackte Tabelle im MySQL-Datenbankverzeichnis installiert haben, sollten Sie mysqladmin flush-tables ausführen, um die Verwendung der neuen Tabelle durch mysqld zu erzwingen.

Um eine gepackte Tabelle zu entpacken, verwenden Sie die Option `--unpack` für myisamchk.

## 8.5. mysql — Das MySQL-Befehlszeilenwerkzeug mysql

mysql ist eine einfache SQL-Shell (mit GNU-`readline`-Fähigkeiten). Es unterstützt interaktiven wie auch nichtinteraktiven Einsatz. Bei interaktiver Nutzung werden die Abfrageergebnisse im ASCII-Tabellenformat angezeigt. Wird es hingegen nichtinteraktiv verwendet (z. B. als Filter), dann wird das Ergebnis durch Tabulatoren getrennt aufgelistet. Das Ausgabeformat kann mit den folgenden Befehlsoptionen beeinflusst werden.

Wenn Sie bei großen Ergebnismengen Probleme aufgrund mangelnden Speichers haben, verwenden Sie die Option `--quick`. Hierdurch wird mysql gezwungen, die Ergebnisse datensatzweise vom Server abzurufen, statt vor der Anzeige die gesamte Ergebnismenge zu holen und sie temporär im Speicher abzulegen. Dies wird durch Rückgabe der Ergebnismenge mithilfe der C-API-Funktion `mysql_use_result()` in der Client/Server-Bibliothek statt mit `mysql_store_result()` ermöglicht.

Die Verwendung von mysql ist ganz leicht. Rufen Sie es einfach wie folgt über die Eingabeaufforderung Ihres Befehls-Interpreters auf:

    shell> mysql db_name

Oder:

    shell> mysql --user=user_name --password=your_password db_name

Geben Sie dann eine SQL-Anweisung ein, die auf ‘`;`’, `\g` oder `\G` endet, und betätigen Sie die Eingabetaste.

Sie können SQL-Anweisungen wie folgt in einer Skriptdatei (Stapelverarbeitungsdatei) ausführen:

    shell> mysql db_name < script.sql > output.tab

### 8.5.1. mysql Optionen

mysql unterstützt die folgenden Optionen:

- `--help`, `-?`

  Zeigt eine Hilfemeldung an und wird dann beendet.

- `--batch`, `-B`

  Gibt die Ergebnisse mit einem Tabulator als Spaltentrennzeichen aus. Jeder Datensatz beginnt in einer neuen Zeile. Bei dieser Option verwendet mysql die Verlaufsdatei nicht.

- `--character-sets-dir=`path``

  Das Verzeichnis, in dem Zeichensätze installiert sind. Siehe auch Abschnitt 5.11.1, „Der für Daten und zum Sortieren benutzte Zeichensatz“.

- `--compress`, `-C`

  Komprimiert alle Daten, die zwischen Client und Server ausgetauscht werden, sofern beide die Komprimierung unterstützen.

- `--database=`db_name``, `-D `db_name``

  Die zu verwendende Datenbank. Diese Option ist in erster Linie für Optionsdateien gedacht.

- `--debug[=`debug_options`]`, `-# [`debug_options`]`

  Schreibt ein Debuglog. Der String `debug_options` heißt häufig `'d:t:o,`file_name`'`. Standardwert ist `'d:t:o,/tmp/mysql.trace'`.

- `--debug-info`, `-T`

  Gibt einige Debuginformationen aus, wenn das Programm beendet wird.

- `--default-character-set=`charset_name``

  Verwendet `charset_name` als Standardzeichensatz. Siehe auch Abschnitt 5.11.1, „Der für Daten und zum Sortieren benutzte Zeichensatz“.

- `--execute=`statement``, `-e `statement``

  Führt die Anweisung aus und wird dann beendet. Das Standardausgabeformat entspricht dem mit `--batch` erzeugten. Einige Beispiele finden Sie in Abschnitt 4.3.1, „Befehlszeilenoptionen für mysqld“.

- `--force`, `-f`

  Das Programm wird auch dann fortgesetzt, wenn ein SQL-Fehler auftritt.

- `--host=`host_name``, `-h `host_name``

  Stellt eine Verbindung zum MySQL Server auf dem angegebenen Host her.

- `--html`, `-H`

  Erzeugt eine HTML-formatierte Ausgabe.

- `--ignore-space`, `-i`

  Ignoriert Leerzeichen nach Funktionsnamen. Die Auswirkung dieser Option wird in der Erläuterung zu `IGNORE_SPACE` in Abschnitt 5.2.5, „Der SQL-Modus des Servers“, beschrieben.

- `--local-infile[={0|1}]`

  Aktiviert oder deaktiviert die `LOCAL`-Funktionalität für `LOAD DATA INFILE`. Ohne angegebenen Wert aktiviert die Option `LOCAL`. Die Option kann als `--local-infile=0` oder als `--local-infile=1` angegeben werden, wenn `LOCAL` ausdrücklich deaktiviert bzw. aktiviert werden soll. Die Aktivierung von `LOCAL` wirkt sich nicht aus, wenn die Unterstützung durch den Server fehlt.

- `--named-commands`, `-G`

  Aktiviert benannte mysql-Befehle. Neben Befehlen im Kurzformat sind auch solche mit langen Namen zulässig. Beispielsweise werden sowohl `quit` als auch `\q` akzeptiert. Siehe auch Abschnitt 8.5.2, „mysql-Befehle“.

- `--no-auto-rehash`, `-A`

  Das automatische Rehashing wird unterbunden. Diese Option sorgt zwar für einen schnelleren Start von mysql, aber Sie müssen den Befehl `rehash` absetzen, wenn Sie die Vervollständigung von Tabellen- und Spaltennamen verwenden wollen.

- `--no-beep`, `-b`

  Unterbindet die Ausgabe eines Warntons bei Auftreten eines Fehlers.

- `--no-named-commands`, `-g`

  Deaktiviert benannte Befehle. Verwenden Sie nur die Form `\*` oder setzen Sie benannte Befehle nur am Anfang einer Zeile ein, die mit einem Semikolon (‘`;`’) endet. mysql startet standardmäßig mit aktivierter Option. Allerdings funktionieren Befehle im langen Format auch bei dieser Option noch in der ersten Zeile. Siehe auch Abschnitt 8.5.2, „mysql-Befehle“.

- `--no-pager`

  Die Abfrageergebnisse sollen nicht mit dem Pager (d. h. nicht seitenweise) ausgegeben werden. Abschnitt 8.5.2, „mysql-Befehle“, enthält eine eingehendere Beschreibung zum Pager.

- `--no-tee`

  Unterbindet das Kopieren der Ausgabe in einer Datei. Abschnitt 8.5.2, „mysql-Befehle“, enthält eine eingehendere Beschreibung von Tee-Dateien.

- `--one-database`, `-o`

  Ignoriert alle Anweisungen mit Ausnahme derjenigen, die an die auf der Befehlszeile genannte Standarddatenbank gerichtet sind. Dies ist nützlich, um Aktualisierungen anderer Datenbanken im Binärlog zu übergehen.

- `--pager[=`command`]`

  Verwendet den angegebenen Befehl zur Anzeige der Abfrageausgabe Seite für Seite. Wird der Befehl weggelassen, dann wird der Standardpager verwendet, der in Ihrer Umgebungsvariable `PAGER` gespeichert ist. Gültige Pager sind less, more, cat [> filename] usw. Diese Option wird nur unter Unix verwendet. Im Stapelbetrieb funktioniert sie nicht. Abschnitt 8.5.2, „mysql-Befehle“, enthält eine eingehendere Beschreibung zum Pager.

- `--password[=`password`]`, `-p[`password`]`

  Verwendet das angegebene Passwort zur Verbindung mit dem Server. Wenn Sie die Kurzform der Option (`-p`) verwenden, dürfen Sie kein Leerzeichen zwischen Option und Passwort setzen. Lassen Sie den Wert `password` auf die Option `--password` bzw. `-p` folgend weg, dann werden Sie zur Eingabe des Passworts aufgefordert.

  Die Angabe eines Passworts direkt auf der Befehlszeile ist als nicht sicher einzuordnen. Siehe auch Abschnitt 5.9.6, „Wie Sie Ihre Kennwörter sicher halten“.

- `--port=`port_num``, `-P `port_num``

  Die TCP/IP-Portnummer, die für die Verbindung verwendet werden soll.

- `--prompt=`format_str``

  Setzt die Eingabeaufforderung auf das angegebene Format. Standardwert ist `mysql>`. Die Sondersequenzen, die die Eingabeaufforderung enthalten kann, sind unter Abschnitt 8.5.2, „mysql-Befehle“, beschrieben.

- `--protocol={TCP|SOCKET|PIPE|MEMORY}`

  Das zu verwendende Verbindungsprotokoll.

- `--quick`, `-q`

  Unterbindet die Zwischenspeicherung der einzelnen Abfrageergebnisse (d. h., jeder Datensatz wird direkt beim Empfang angezeigt). Hierdurch kann der Server verlangsamt werden, wenn die Ausgabe aussetzt. Bei dieser Option verwendet mysql die Verlaufsdatei nicht.

- `--raw`, `-r`

  Schreibt Spaltenwerte ohne Konvertierung mit Escape-Zeichen. Wird häufig mit der Option `--batch` verwendet.

- `--reconnect`

  Wenn die Verbindung zum Server abbricht, wird automatisch eine Wiederverbindung versucht. Bei jedem Verbindungsabbruch wird genau ein Wiederverbindungsversuch unternommen. Um diese Versuche zu unterbinden, verwenden Sie `--skip-reconnect`.

- `--safe-updates`, `--i-am-a-dummy`, `-U`

  Gestattet nur diejenigen `UPDATE`- und `DELETE`-Anweisungen, die über Schlüsselwerte angeben, welche Datensätze zu ändern sind. Wenn Sie diese Option in einer Optionsdatei angegeben haben, können Sie sie mithilfe von `--safe-updates` auf der Befehlszeile außer Kraft setzen. Weitere Informationen zu dieser Option finden Sie in Abschnitt 8.5.4, „mysql: Tipps“.

- `--secure-auth`

  Sendet kein Passwort im alten (d. h. vor MySQL 4.1.1 gültigen) Format an den Server. Hierdurch werden Verbindungen auf solche Server beschränkt, die das neue Passwortformat verwenden.

- `--show-warnings`

  Sorgt dafür, dass – sofern erforderlich – nach jeder Anweisung Warnungen angezeigt werden. Diese Option gilt für den interaktiven und den Stapelbetrieb.

- `--sigint-ignore`

  Ignoriert `SIGINT`-Signale (diese werden normalerweise durch Eingabe von `Strg+C` abgesetzt).

- `--silent`, `-s`

  Stummer Modus. Erzeugt weniger Ausgabedaten. Diese Option kann mehrfach angegeben werden, um den Umfang der Ausgabe kontinuierlich zu verringern.

- `--skip-column-names`, `-N`

  Schreibt keine Spaltennamen in die Ergebnisse.

- `--skip-line-numbers`, `-L`

  Schreibt keine Zeilennummern für Fehler. Dies ist praktisch, wenn Sie Ergebnisdateien vergleichen wollen, die Fehlermeldungen enthalten.

- `--socket=`path``, `-S `path``

  Bei Verbindungen mit `localhost` ist dies die zu verwendende Unix-Socketdatei bzw. (unter Windows) der Name der zu verwendenden Named Pipe.

- `--table`, `-t`

  Zeigt die Ausgabe im Tabellenformat an. Dies ist das Standardverhalten bei interaktivem Betrieb und kann zudem für die Ausgabe im Stapelbetrieb verwendet werden.

- `--tee=`file_name``

  Hängt eine Kopie der Ausgabe an die angegebene Datei an. Diese Option funktioniert im Stapelbetrieb nicht. Eine eingehendere Beschreibung von Tee-Dateien finden Sie in Abschnitt 8.5.2, „mysql-Befehle“.

- `--unbuffered`, `-n`

  Synchronisiert den Puffer nach jeder Abfrage.

- `--user=`user_name``, `-u `user_name``

  Verwendet den angegebenen MySQL-Benutzernamen zur Verbindung mit dem Server.

- `--verbose`, `-v`

  Ausführlicher Modus. Es werden zusätzliche Angaben zu den Aktivitäten des Programms erzeugt. Diese Option kann mehrfach angegeben werden, um den Umfang der Ausgabe kontinuierlich zu erhöhen. (Beispielsweise erzeugt `-v -v -v` auch im Stapelbetrieb eine Ausgabe im Tabellenformat.)

- `--version`, `-V`

  Zeigt die Versionsinformation an und wird dann beendet.

- `--vertical`, `-E`

  Gibt die Abfrageausgabe vertikal angeordnet aus (d. h. eine Zeile pro Spaltenwert). Ohne diese Option können Sie die vertikale Ausgabe für einzelne Anweisungen festlegen, indem Sie sie mit `\G` abschließen.

- `--wait`, `-w`

  Wenn die Verbindung nicht hergestellt werden kann, erfolgt anstelle eines Abbruchs nach einer Wartezeit ein neuer Verbindungsversuch.

- `--xml`, `-X`

  Erzeugt eine XML-formatierte Ausgabe.

Sie können mit der Syntax `--`var_name`=`value`` auch die folgenden Variablen einstellen:

- `connect_timeout`

  Anzahl der Sekunden bis zur Zeitüberschreitung der Verbindung. (Der Vorgabewert ist `0`.)

- `max_allowed_packet`

  Maximaler Umfang der vom Server gesendeten oder empfangenen Pakete. (Der Vorgabewert ist 16 Mbyte.)

- `max_join_size`

  Das automatische Limit für Datensätze in einem Join bei Verwendung von `--safe-updates`. (Der Vorgabewert beträgt 1.000.000.)

- `net_buffer_length`

  Puffergröße für die TCP/IP- und Socketkommunikation. (Der Vorgabewert ist 16 Kbyte.)

- `select_limit`

  Automatisches Limit für `SELECT`-Anweisungen bei Verwendung von `--safe-updates`. (Der Vorgabewert beträgt 1.000.)

Es ist ferner möglich, Variablen über die Syntax `--set-variable=`var_name`=`value`` oder `-O `var_name`=`value`` einzustellen. Diese Syntax ist jedoch veraltet.

Unter Unix schreibt der mysql-Client einen Eintrag mit ausgeführten Anweisungen in eine Verlaufsdatei. Standardmäßig heißt diese Verlaufsdatei `.mysql_history` und wird im Stammverzeichnis erstellt. Durch Einstellen der Umgebungsvariablen `MYSQL_HISTFILE` können Sie eine andere Datei angeben.

Wenn Sie keine Verlaufsdatei führen wollen, entfernen Sie zunächst `.mysql_history` (sofern vorhanden) und verwenden daraufhin eine der folgenden Methoden:

- Setzen Sie die Variable `MYSQL_HISTFILE` auf `/dev/null`. Damit diese Einstellung bei jeder Anmeldung angewendet wird, müssen Sie sie in eine der Startdateien Ihrer Shell schreiben.

- Erstellen Sie `.mysql_history` als symbolische Verknüpfung auf `/dev/null`:

      shell> ln -s /dev/null $HOME/.mysql_history

  Dies müssen Sie nur einmal tun.

### 8.5.2. mysql-Befehle

mysql sendet jede von Ihnen abgesetzte SQL-Anweisung zur Ausführung an den Server. Es gibt aber auch eine Reihe von Befehlen, die mysql selbst interpretiert. Eine Liste dieser Befehle erhalten Sie, indem Sie `help` oder `\h` an der Eingabeaufforderung `mysql>` eingeben:

    mysql> help

    List of all MySQL commands:
    Note that all text commands must be first on line and end with ';'
    ?         (\?) Synonym for `help'.
    clear     (\c) Clear command.
    connect   (\r) Reconnect to the server. Optional arguments are db and host.
    delimiter (\d) Set statement delimiter. NOTE: Takes the rest of the line as
                   new delimiter.
    edit      (\e) Edit command with $EDITOR.
    ego       (\G) Send command to mysql server, display result vertically.
    exit      (\q) Exit mysql. Same as quit.
    go        (\g) Send command to mysql server.
    help      (\h) Display this help.
    nopager   (\n) Disable pager, print to stdout.
    notee     (\t) Don't write into outfile.
    pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.
    print     (\p) Print current command.
    prompt    (\R) Change your mysql prompt.
    quit      (\q) Quit mysql.
    rehash    (\#) Rebuild completion hash.
    source    (\.) Execute an SQL script file. Takes a file name as an argument.
    status    (\s) Get status information from the server.
    system    (\!) Execute a system shell command.
    tee       (\T) Set outfile [to_outfile]. Append everything into given
                   outfile.
    use       (\u) Use another database. Takes database name as argument.
    warnings  (\W) Show warnings after every statement.
    nowarning (\w) Don't show warnings after every statement.

Für jeden Befehl gibt es eine Lang- und eine Kurzform. Anders als bei der Langform wird die Groß-/Kleinschreibung bei der Kurzform unterschieden. Der Langform eines Befehls kann optional ein Semikolon als Trennzeichen folgen; dieses sollte bei der Kurzform weggelassen werden.

Für den Befehl `delimiter` sollten Sie die Verwendung des Backslashs (‘`\`’) vermeiden, da dieser bei MySQL als Escape-Zeichen dient.

Die Befehle edit, nopager, pager und system funktionieren nur unter Unix.

Der Befehl `status` bietet Informationen zur Verbindung und zum verwendeten Server. Wenn der Client mit `--safe-updates` gestartet wurde, gibt `status` auch die Werte für die mysql-Variablen aus, die sich auf Ihre Abfragen auswirken.

Um Abfragen und ihre Ausgaben zu loggen, verwenden Sie den Befehl tee. Alle auf dem Bildschirm angezeigten Daten werden an eine angegebene Datei angehängt. Dies kann auch zu Debugzwecken sehr praktisch sein. Sie können diese Funktion auf der Befehlszeile mit der Option `--tee` oder interaktiv mit dem Befehl tee aktivieren. Die Datei tee kann interaktiv mit dem Befehl notee deaktiviert werden. Die erneute Ausführung von tee reaktiviert das Loggen wieder. Wird kein Parameter angegeben, dann wird die vorherige Datei verwendet. Beachten Sie, dass tee Abfrageergebnisse nach jeder Anweisung synchronisiert – unmittelbar bevor mysql die nächste Eingabeaufforderung anzeigt.

Mithilfe der Option `--pager` können Sie Abfrageergebnisse im interaktiven Modus mit Unix-Programmen wie less, more o. Ä. durchsuchen. Wenn Sie keinen Wert für die Option angeben, überprüft mysql den Wert der Umgebungsvariablen `PAGER` und setzt den Pager auf diesen Wert. Interaktiv lässt sich das Paging mithilfe des Befehls pager aktivieren und mit nopager deaktivieren. Der Befehl nimmt ein optionales Argument entgegen; ist es vorhanden, dann wird das entsprechende Pager-Programm ausgewählt. Ohne Argumentangabe wird der Pager, der über die Befehlszeile angegeben wurde, oder `stdout` ausgewählt (sofern überhaupt kein Pager festgelegt wurde).

Die seitenweise Ausgabe funktioniert nur unter Unix, da sie die Funktion `popen()` verwendet, die unter Windows nicht existiert. Unter Windows kann stattdessen die Option tee zur Speicherung der Abfrageausgabe verwendet werden, auch wenn dies in bestimmten Situationen zum Durchsuchen der Ausgabe nicht so praktisch ist wie pager.

Es folgen ein paar Tipps zum Befehl pager:

- Sie können damit in eine Datei schreiben, und die Ergebnisse landen dann auch nur in dieser Datei:

      mysql> pager cat > /tmp/log.txt

  Sie können auch Optionen für das Programm übergeben, das Sie als Pager verwenden wollen:

      mysql> pager less -n -i -S

- Beachten Sie die Option `-S` im obigen Beispiel. Sie kann zum Durchblättern sehr breiter Abfrageergebnisse recht praktisch sein. Manchmal sind sehr breite Ergebnismengen auf dem Bildschirm schlecht zu lesen. Die Option `-S` für den Befehl less kann die Lesbarkeit der Ergebnisse erheblich steigern, denn sie erlaubt das horizontale Scrolling mit den Pfeiltasten auf der Computertastatur. Sie können die Option `-S` auch interaktiv innerhalb von less verwenden, um das horizontale Scrolling nach Belieben ein- und auszuschalten. Weitere Informationen finden Sie auf der Manpage zu less:

      shell> man less

- Sie können zur Verarbeitung der Ausgabe sehr komplexe Pager-Befehle angeben:

      mysql> pager cat | tee /dr1/tmp/res.txt \
                | tee /dr2/tmp/res2.txt | less -n -i -S

  In diesem Beispiel würde der Befehl die Abfrageergebnisse an zwei Dateien in zwei verschiedenen Verzeichnissen auf zwei separaten Dateisystemen senden, die als `/dr1` und `/dr2` eingebunden sind. Via less werden die Ergebnisse aber auch auf dem Bildschirm angezeigt.

Sie können die Funktionen von tee und pager auch kombinieren. Wenn Sie eine tee-Datei aktivieren und pager auf less setzen, können Sie die Ergebnisse mit dem Programm less durchsuchen und gleichzeitig alles an eine Datei anhängen. Der Unterschied zwischen tee unter Unix, wenn es mit dem pager-Befehl verwendet wird, und dem in mysql integrierten tee-Befehl besteht darin, dass das integrierte tee auch dann funktioniert, wenn der Unix-Befehl tee nicht vorhanden ist. Außerdem loggt das integrierte tee alles, was auf dem Bildschirm ausgegeben wird; im Gegensatz dazu wird von dem unter Unix mit pager verwendeten tee nicht so viel protokolliert. Zudem lässt sich das tee-Dateiloggen interaktiv aus mysql heraus ein- und ausschalten. Dies ist nützlich, wenn Sie nur einige, nicht aber alle Abfragen in einer Datei loggen wollen.

Die Standardeingabeaufforderung `mysql>` kann umkonfiguriert werden. Der String zur Definition der Eingabeaufforderung kann die folgenden Spezialsequenzen enthalten:

Option | Beschreibung
`\v` | Serverversion
`\d` | Standarddatenbank
`\h` | Serverhost
`\p` | aktuelle TCP/IP-Port bzw. aktuelle Socketdatei
`\u` | Ihr Benutzername
`\U` | Ihr vollständiger ``user_name`@`host_name``-Kontenname
`\\` | literales ‘`\`’-Backslash-Zeichen
`\n` | Zeilenwechselzeichen
`\t` | Tabulatorzeichen
`\` | Leerzeichen (folgt dem Backslash)
`\_` | Leerzeichen
`\R` | aktuelle Uhrzeit im 24-Stunden-Format (0 - 23)
`\r` | aktuelle Uhrzeit im 12-Stunden-Format (1 - 12)
`\m` | Minuten der aktuellen Uhrzeit
`\y` | aktuelles Jahr (zweistellig)
`\Y` | aktuelles Jahr (vierstellig)
`\D` | aktuelles vollständiges Datum
`\s` | Sekunden der aktuellen Uhrzeit
`\w` | aktueller Wochentag, angegeben mit drei Buchstaben („Mon“, „Tue“ usw.)
`\P` | AM/PM
`\o` | aktueller Monat im numerischen Format
`\O` | aktueller Monat, angegeben mit drei Buchstaben („Jan“, „Feb“ usw.)
`\c` | Zähler, der bei jeder von Ihnen abgesetzten Anweisung hochgezählt wird
`\S` | Semikolon
`\'` | einfaches Anführungszeichen
`\"` | doppeltes Anführungszeichen

‘`\`’ gefolgt von einem beliebigen anderen Buchstaben wird zu genau diesem Buchstaben.

Wenn Sie den Befehl `prompt` ohne Argument eingeben, setzt mysql die Eingabeaufforderung auf die Standardform (`mysql>`) zurück.

Sie können die Eingabeaufforderung auf verschiedene Weise einstellen:

- Sie verwenden eine Umgebungsvariable. Sie können der Umgebungsvariablen `MYSQL_PS1` als Wert einen Eingabeaufforderungs-String zuweisen. Zum Beispiel:

      shell> export MYSQL_PS1="(\u@\h) [\d]> "

- Sie verwenden eine Befehlszeilenoption. Sie können für mysql die Option `--prompt` auf der Befehlszeile angeben. Zum Beispiel:

      shell> mysql --prompt="(\u@\h) [\d]> "
      (user@host) [database]>

- Sie verwenden eine Optionsdatei. Sie können die Option `prompt` im Abschnitt `[mysql]` einer beliebigen MySQL-Optionsdatei (z. B. `/etc/my.cnf` oder `.my.cnf`) in Ihrem Stammverzeichnis angeben. Zum Beispiel:

      [mysql]
      prompt=(\\u@\\h) [\\d]>\\_

  Beachten Sie in diesem Beispiel die doppelten Backslashs. Wenn Sie die Eingabeaufforderung mit der Option `prompt` in einer Optionsdatei einstellen, sollten Sie die Backslashes verdoppeln, wenn Sie bestimmte Optionen für die Eingabeaufforderung angeben. Es gibt eine Reihe von Überschneidungen zwischen den zulässigen Optionen für die Eingabeaufforderung und den speziellen Escape-Sequenzen, die in Optionsdateien erkannt werden. (Diese Sequenzen sind in Abschnitt 4.3.2, „my.cnf-Optionsdateien“, aufgelistet.) Diese Überschneidungen können bei Verwendung einzelner Backslashs Probleme verursachen. So wird etwa `\s` als Leerzeichen statt als aktueller Sekundenwert interpretiert. Das folgende Beispiel zeigt, wie Sie eine Eingabeaufforderung in einer Optionsdatei so definieren, dass die aktuelle Uhrzeit im Format `HH:MM:SS>` enthalten ist:

      [mysql]
      prompt="\\r:\\m:\\s> "

- Sie stellen die Eingabeaufforderung interaktiv ein. Sie können Ihre Eingabeaufforderung auch interaktiv mithilfe des Befehls `prompt` (oder `\R`) einstellen. Zum Beispiel:

      mysql> prompt (\u@\h) [\d]>\_
      PROMPT set to '(\u@\h) [\d]>\_'
      (user@host) [database]>
      (user@host) [database]> prompt
      Returning to default PROMPT of mysql>
      mysql>

### 8.5.3. Wie SQL-Befehle aus einer Textdatei geladen werden

Der Client mysql wird normalerweise interaktiv verwendet. Das sieht etwa so aus:

    shell> mysql db_name

Es ist allerdings auch möglich, SQL-Anweisungen in einer Datei abzulegen und mysql dann anzuweisen, seine Eingabe aus dieser Datei auszulesen. Zu diesem Zweck erstellen Sie eine Textdatei `text_file`, die die Anweisungen enthält, die Sie ausführen wollen. Danach rufen Sie mysql wie folgt auf:

    shell> mysql db_name < text_file

Wenn Sie als Erstes eine `USE `db_name``-Anweisung in die Datei setzen, müssen Sie den Datenbanknamen nicht mehr auf der Befehlszeile angeben:

    shell> mysql < text_file

Wird mysql bereits ausgeführt, dann können Sie eine SQL-Skriptdatei mithilfe des Befehls `source` oder `\.` ausführen:

    mysql> source file_name
    mysql> \. file_name

In bestimmten Fällen kann es sinnvoll sein, ein Skript Fortschrittsinformationen für den Benutzer anzeigen zu lassen. Hierzu können Sie Anweisungen wie die folgende einfügen:

    SELECT '<info_to_display>' AS ' ';

Die gezeigte Anweisung gibt `<info_to_display>` aus.

Weitere Informationen zum Stapelbetrieb finden Sie in Abschnitt 3.5, „`mysql` im Stapelbetrieb“.

### 8.5.4. mysql: Tipps

Dieser Abschnitt beschreibt einige Methoden, mit deren Hilfe Sie mysql effizienter benutzen können.

#### 8.5.4.1. Abfrageergebnisse vertikal anzeigen lassen

Die Lesbarkeit bestimmter Abfrageergebnisse wird erhöht, wenn diese nicht in einem horizontalen, sondern einem vertikalen Tabellenformat angezeigt werden. Die Abfrage wird vertikal angezeigt, indem sie mit `\G` statt mit einem Semikolon abgeschlossen wird. So lassen sich etwa längere Textwerte mit Zeilenumbrüchen häufig besser lesen, wenn sie vertikal ausgegeben werden:

    mysql> SELECT * FROM mails WHERE LENGTH(txt) < 300 LIMIT 300,1\G
    *************************** 1. row ***************************
      msg_nro: 3068
         date: 2000-03-01 23:29:50
    time_zone: +0200
    mail_from: Monty
        reply: monty@no.spam.com
      mail_to: "Thimble Smith" <tim@no.spam.com>
          sbj: UTF-8
          txt: >>>>> "Thimble" == Thimble Smith writes:

    Thimble> Hi.  I think this is a good idea.  Is anyone familiar
    Thimble> with UTF-8 or Unicode? Otherwise, I'll put this on my
    Thimble> TODO list and see what happens.

    Yes, please do that.

    Regards,
    Monty
         file: inbox-jani-1
         hash: 190402944
    1 row in set (0.09 sec)

#### 8.5.4.2. Verwendung der Option `--safe-updates`

Für MySQL-Neulinge kann die Startoption `--safe-updates` (bzw. `--i-am-a-dummy`, was den gleichen Effekt hat) ausgesprochen nützlich sein. Sie hilft in Fällen, in denen Sie eine `DELETE FROM `tbl_name``-Anweisung abgesetzt, aber die `WHERE`-Klausel vergessen haben. Normalerweise werden durch eine solche Anweisung nämlich alle Datensätze in der Tabelle gelöscht. Mit `--safe-updates` können Sie Datensätze nur dann löschen, wenn die Schlüsselwerte angegeben sind, mit denen sie identifiziert werden. Auf diese Weise werden Unfälle verhindert.

Wenn Sie die Option `--safe-updates` benutzen, setzt mysql beim Herstellen der Verbindung zum MySQL Server die folgende Anweisung ab:

    SET SQL_SAFE_UPDATES=1,SQL_SELECT_LIMIT=1000, SQL_MAX_JOIN_SIZE=1000000;

Siehe auch Abschnitt 13.5.3, „`SET`“.

Die Anweisung `SET` hat die folgenden Auswirkungen:

- Sie dürfen eine `UPDATE`- oder `DELETE`-Anweisung nur dann ausführen, wenn Sie einen Schlüssel-Constraint in der `WHERE`-Klausel spezifiziert oder eine `LIMIT`-Klausel angegeben haben (oder beides). Zum Beispiel:

      UPDATE tbl_name SET not_key_column=val WHERE key_column=val;

      UPDATE tbl_name SET not_key_column=val LIMIT 1;

- Der Server beschränkt alle umfangreichen `SELECT`-Ergebnisse auf 1.000 Datensätze, sofern die Anweisung keine `LIMIT`-Klausel enthält.

- Der Server bricht tabellenübergreifende `SELECT`-Anweisungen ab, bei denen voraussichtlich mehr als 1.000.000 Datensatzkombinationen untersucht werden müssten.

Um andere Grenzen als 1.000 und 1.000.000 anzugeben, können Sie die Vorgaben mithilfe der Optionen `--select_limit` und `--max_join_size` außer Kraft setzen:

    shell> mysql --safe-updates --select_limit=500 --max_join_size=10000

#### 8.5.4.3. Abschalten der automatischen Wiederverbindung in mysql

Wenn die Verbindung zwischen dem mysql-Client und dem Server während des Versands einer Abfrage abbricht, dann versucht der Client, die Verbindung sofort und automatisch wiederherzustellen, und sendet die Abfrage dann erneut. Ihre vorherige Verbindung ist aber auch dann, wenn mysql die Neuverbindung gelingt, definitiv beendet, d. h., alle vorherigen Sitzungsobjekte und Einstellungen sind verloren: Temporärtabellen, Autocommit-Modus und benutzerdefinierte und Sitzungsvariablen. Außerdem wird für alle aktuellen Transaktionen ein Rollback durchgeführt. Dieses Verhalten kann für Sie gefährlich sein. Beachten Sie das folgende Beispiel, in dem der Server heruntergefahren und neu gestartet wurde, ohne dass Sie davon erfahren haben:

    mysql> SET @a=1;
    Query OK, 0 rows affected (0.05 sec)

    mysql> INSERT INTO t VALUES(@a);
    ERROR 2006: MySQL server has gone away
    No connection. Trying to reconnect...
    Connection id:    1
    Current database: test

    Query OK, 1 row affected (1.30 sec)

    mysql> SELECT * FROM t;
    +------+
    | a    |
    +------+
    | NULL |
    +------+
    1 row in set (0.05 sec)

Die Benutzervariable `@a` ist mit der Verbindung verloren gegangen und nach der Neuverbindung undefiniert. Wenn wichtig ist, dass mysql in dem Fall, dass die Verbindung abreißt, mit einem Fehler beendet wird, dann können Sie den mysql-Client mit der Option `--skip-reconnect` starten.

## 8.6. mysqlaccess — Client für die Überprüfung von Zugriffsberechtigungen

mysqlaccess ist ein Diagnosetool, das Yves Carlier für die MySQL-Distribution erstellt hat. Es überprüft die Zugriffsberechtigungen für eine Kombination aus Hostnamen, Benutzernamen und Datenbank. Beachten Sie, dass mysqlaccess den Zugriff nur mithilfe der Tabellen `user`, `db` und `host` überprüft. Nicht verifiziert werden Tabellen-, Spalten- oder Routineberechtigungen, die in den Tabellen `tables_priv`, `columns_priv` bzw. `procs_priv` festgelegt sind.

Rufen Sie mysqlaccess wie folgt auf:

    shell> mysqlaccess [host_name [user_name [db_name]]] [options]

mysqlaccess versteht die folgenden Optionen:

- `--help`, `-?`

  Zeigt eine Hilfemeldung an und wird dann beendet.

- `--brief`, `-b`

  Erzeugt Berichte in einem einzeiligen tabellarischen Format.

- `--commit`

  Kopiert die neuen Zugriffsberechtigungen aus den Temporärtabellen in die ursprünglichen Grant-Tabellen. Damit die neuen Berechtigungen angewendet werden, müssen die Grant-Tabellen auf Festplatte synchronisiert werden. (Führen Sie hierzu etwa den Befehl mysqladmin reload aus.)

- `--copy`

  Lädt die temporären Grant-Tabellen aus den Originaltabellen.

- `--db=`db_name``, `-d `db_name``

  Gibt den Datenbanknamen an.

- `--debug=`N``

  Gibt die Debugstufe an. `N` ist ein Integer zwischen 0 und 3.

- `--host=`host_name``, `-h `host_name``

  Der in den Zugriffsberechtigungen zu verwendende Hostname.

- `--howto`

  Zeigt einige Beispiele für die Verwendung von mysqlaccess an.

- `--old_server`

  Legt fest, dass der Server ein alter MySQL Server (vor MySQL 3.21) ist, der vollständige `WHERE`-Klauseln noch nicht verarbeiten kann.

- `--password[=`password`]`, `-p[`password`]`

  Verwendet das angegebene Passwort zur Verbindung mit dem Server. Lassen Sie den Wert `password` auf die Option `--password` bzw. `-p` folgend weg, dann werden Sie zur Eingabe des Passworts aufgefordert.

  Die Angabe eines Passworts direkt auf der Befehlszeile ist als nicht sicher einzuordnen. Siehe auch Abschnitt 5.9.6, „Wie Sie Ihre Kennwörter sicher halten“.

- `--plan`

  Zeigt Vorschläge und Ideen für zukünftige Releases an.

- `--preview`

  Zeigt die Unterschiede in den Berechtigungen nach der Durchführung von Änderungen in den Grant-Tabellen an.

- `--relnotes`

  Zeigt die Versionshinweise an.

- `--rhost=`host_name``, `-H `host_name``

  Stellt eine Verbindung zum MySQL Server auf dem angegebenen Host her.

- `--rollback`

  Macht die letzten Änderungen an den temporären Grant-Tabellen rückgängig.

- `--spassword[=`password`]`, `-P[`password`]`

  Verwendet das angegebene Passwort zur Verbindung als Superuser mit dem Server. Lassen Sie den Wert `password` auf die Option `--password` bzw. `-p` folgend weg, dann werden Sie zur Eingabe des Passworts aufgefordert.

  Die Angabe eines Passworts direkt auf der Befehlszeile ist als nicht sicher einzuordnen. Siehe auch Abschnitt 5.9.6, „Wie Sie Ihre Kennwörter sicher halten“.

- `--superuser=`user_name``, `-U `user_name``

  Gibt den Benutzernamen zur Verbindung als Superuser an.

- `--table`, `-t`

  Erzeugt Berichte im Tabellenformat.

- `--user=`user_name``, `-u `user_name``

  Der in den Zugriffsberechtigungen zu verwendende Benutzername.

- `--version`, `-v`

  Zeigt die Versionsinformation an und wird dann beendet.

Wenn Ihre MySQL-Distribution an einer anderen als der Standardposition installiert ist, müssen Sie die Position ändern, an der mysqlaccess das Vorhandensein des mysql-Clients erwartet. Sie müssen das Skript `mysqlaccess` im Bereich der Zeile 18 editieren. Suchen Sie nach einer Zeile ähnlich der folgenden:

    $MYSQL     = '/usr/local/bin/mysql';    # path to mysql executable

Ändern Sie den Pfad so ab, dass er die Position wiedergibt, an der mysql tatsächlich auf Ihrem System gespeichert ist. Andernfalls erhalten Sie den Fehler `Broken pipe`, wenn Sie mysqlaccess ausführen.

## 8.7. mysqladmin — Client für die Verwaltung eines MySQL Servers

mysqladmin ist ein Client zur Durchführung administrativer Aufgaben. Sie können damit Konfiguration und aktuellen Status des Servers überprüfen, Datenbanken erstellen und löschen und vieles mehr.

Rufen Sie mysqladmin wie folgt auf:

    shell> mysqladmin [options] command [command-arg] [command [command-arg]] ...

mysqladmin unterstützt die in der folgenden Liste beschriebenen Befehle. Einige Befehle nehmen auf den Befehlsnamen folgend ein Argument entgegen.

- `create `db_name``

  Erstellt eine neue Datenbank namens `db_name`.

- `debug`

  Weist den Server an, Debuginformationen in das Fehlerlog zu schreiben.

- `drop `db_name``

  Löscht die Datenbank namens `db_name` und alle in ihr enthaltenen Tabellen.

- `extended-status`

  Zeigt die Serverstatusvariablen und ihre jeweiligen Werte an.

- `flush-hosts`

  Synchronisiert alle Daten in den Host-Cache.

- `flush-logs`

  Schreibt alle Logs auf Festplatte.

- `flush-privileges`

  Lädt die Grant-Tabellen neu (wie `reload`).

- `flush-status`

  Löscht die Statusvariablen.

- `flush-tables`

  Synchronisiert alle Tabellen auf Festplatte.

- `flush-threads`

  Synchronisiert den Thread-Cache.

- `kill `id`,`id`,…`

  Terminiert Server-Threads. Werden mehrere Thread-Kennungswerte übergeben, dann dürfen in der Liste keine Leerzeichen enthalten sein.

- `old-password `new-password``

  Entspricht dem Befehl `password`, speichert das Passwort aber im alten (vor MySQL 4.1 verwendeten) Hashing-Format. (Siehe auch Abschnitt 5.8.9, „Kennwort-Hashing ab MySQL 4.1“.)

- `password `new-password``

  Legt ein neues Passwort fest. Hierdurch wird das Passwort des Kontos, das Sie bei mysqladmin zur Verbindung mit dem Server verwenden, auf `new-password` gesetzt. Wenn Sie also beim nächsten Mal mysqladmin (oder ein anderes Clientprogramm) über dieses Konto aufrufen, müssen Sie das neue Passwort angeben.

  Wenn der Wert `new-password` Leerzeichen oder andere Zeichen enthält, die von Ihrem Befehls-Interpreter als Sonderzeichen interpretiert werden, dann müssen Sie es in Anführungszeichen setzen. Dabei sind unter Windows in jedem Fall doppelte statt einfache Anführungszeichen zu benutzen, da Letztere bei der Verarbeitung nicht entfernt, sondern als Teil des Passworts betrachtet werden. Zum Beispiel:

      shell> mysqladmin password "my new password"

- `ping`

  Überprüft, ob der Server ausgeführt wird. Der Rückgabestatus von mysqladmin ist 0, wenn der Server läuft, andernfalls 1. 0 ist auch im Falle eines Fehlers wie `Access denied` das Ergebnis, denn hierbei hat der Server die Verbindung zwar abgewiesen, wird aber trotzdem ausgeführt.

- `processlist`

  Zeigt eine Liste aktiver Server-Threads an. Dies ähnelt der Ausgabe der Anweisung `SHOW PROCESSLIST`. Wird die Option `--verbose` angegeben, dann entspricht die Ausgabe derjenigen von `SHOW FULL PROCESSLIST`. (Siehe auch Abschnitt 13.5.4.19, „`SHOW PROCESSLIST`“.)

- `reload`

  Lädt die Grant-Tabellen neu.

- `refresh`

  Synchronisiert alle Tabellen und schließt und öffnet die Logdateien.

- `shutdown`

  Beendet den Server.

- `start-slave`

  Startet die Replikation auf einem Slave-Server.

- `status`

  Zeigt eine kurze Meldung zum Serverstatus an.

- `stop-slave`

  Beendet die Replikation auf einem Slave-Server.

- `variables`

  Zeigt die Serversystemvariablen und ihre jeweiligen Werte an.

- `version`

  Zeigt Versionsinformationen vom Server an.

Alle Befehle lassen sich auf ein beliebiges eindeutiges Präfix kürzen. Zum Beispiel:

    shell> mysqladmin proc stat
    +----+-------+-----------+----+---------+------+-------+------------------+
    | Id | User  | Host      | db | Command | Time | State | Info             |
    +----+-------+-----------+----+---------+------+-------+------------------+
    | 51 | monty | localhost |    | Query   | 0    |       | show processlist |
    +----+-------+-----------+----+---------+------+-------+------------------+
    Uptime: 1473624  Threads: 1  Questions: 39487
    Slow queries: 0  Opens: 541  Flush tables: 1
    Open tables: 19  Queries per second avg: 0.0268

Die Ausgabe des Befehls mysqladmin status zeigt die folgenden Werte an:

- `Uptime`

  Dauer seit dem Serverstart (in Sekunden).

- `Threads`

  Anzahl der aktiven Threads (Clients).

- `Questions`

  Anzahl der Abfragen, die seit dem Serverstart von Clients eingegangen sind.

- `Slow queries`

  Anzahl der Abfragen, die länger als die durch `long_query_time` angegebene Anzahl von Sekunden dauerten. Siehe auch Abschnitt 5.12.4, „Die Logdatei für langsame Anfragen“.

- `Opens`

  Anzahl der Tabellen, die vom Server geöffnet wurden.

- `Flush tables`

  Anzahl der vom Server ausgeführten `flush-*`-, `refresh`- und `reload`-Befehle.

- `Open tables`

  Anzahl der derzeit offenen Tabellen.

- `Memory in use`

  Umfang des Speichers, der direkt von mysqld reserviert wurde. Der Wert wird nur angezeigt, wenn MySQL mit der Option `--with-debug=full` kompiliert wurde.

- `Maximum memory used`

  Maximaler Umfang des Speichers, der direkt von mysqld reserviert wurde. Der Wert wird nur angezeigt, wenn MySQL mit der Option `--with-debug=full` kompiliert wurde.

Wenn Sie mysqladmin shutdown beim Herstellen einer Verbindung zu einem lokalen Server mithilfe einer Unix-Socketdatei ausführen, wartet mysqladmin, bis die Prozesskennungsdatei des Servers entfernt wurde, um sicherzustellen, dass der Server korrekt beendet wurde.

mysqladmin unterstützt die folgenden Optionen:

- `--help`, `-?`

  Zeigt eine Hilfemeldung an und wird dann beendet.

- `--character-sets-dir=`path``

  Das Verzeichnis, in dem Zeichensätze installiert sind. Siehe auch Abschnitt 5.11.1, „Der für Daten und zum Sortieren benutzte Zeichensatz“.

- `--compress`, `-C`

  Komprimiert alle Daten, die zwischen Client und Server ausgetauscht werden, sofern beide die Komprimierung unterstützen.

- `--count=`N``, `-c `N``

  Anzahl der Iterationen, die für die wiederholte Befehlsausführung erforderlich sind. Funktioniert nur mit der Option `--sleep`.

- `--debug[=`debug_options`]`, `-# [`debug_options`]`

  Schreibt ein Debuglog. Der String `debug_options` heißt häufig `'d:t:o,`file_name`'`. Standardwert ist `'d:t:o,/tmp/mysqladmin.trace'`.

- `--default-character-set=`charset_name``

  Verwendet `charset_name` als Standardzeichensatz. Siehe auch Abschnitt 5.11.1, „Der für Daten und zum Sortieren benutzte Zeichensatz“.

- `--force`, `-f`

  Fordert für den Befehl `drop `db_name`` keine Bestätigung an. Bei mehreren Befehlen erfolgt auch bei Auftreten eines Fehlers kein Abbruch.

- `--host=`host_name``, `-h `host_name``

  Stellt eine Verbindung zum MySQL Server auf dem angegebenen Host her.

- `--password[=`password`]`, `-p[`password`]`

  Verwendet das angegebene Passwort zur Verbindung mit dem Server. Wenn Sie die Kurzform der Option (`-p`) verwenden, dürfen Sie kein Leerzeichen zwischen Option und Passwort setzen. Lassen Sie den Wert `password` auf die Option `--password` bzw. `-p` folgend weg, dann werden Sie zur Eingabe des Passworts aufgefordert.

  Die Angabe eines Passworts direkt auf der Befehlszeile ist als nicht sicher einzuordnen. Siehe auch Abschnitt 5.9.6, „Wie Sie Ihre Kennwörter sicher halten“.

- `--port=`port_num``, `-P `port_num``

  Die TCP/IP-Portnummer, die für die Verbindung verwendet werden soll.

- `--protocol={TCP|SOCKET|PIPE|MEMORY}`

  Das zu verwendende Verbindungsprotokoll.

- `--relative`, `-r`

  Zeigt bei gemeinsamer Verwendung mit der Option `--sleep` den Unterschied zwischen aktuellem und vorherigem Wert. Derzeit funktioniert diese Option nur mit dem Befehl `extended-status`.

- `--silent`, `-s`

  Wenn keine Verbindung zum Server hergestellt werden kann, erfolgt eine stillschweigende Beendigung.

- `--sleep=`delay``, `-i `delay``

  Führt Befehle wiederholt aus, wobei dazwischen die mit `delay` angegebene Anzahl von Sekunden verstreicht. Die Option `--count` bestimmt die Anzahl der Iterationen.

- `--socket=`path``, `-S `path``

  Bei Verbindungen mit `localhost` ist dies die zu verwendende Unix-Socketdatei bzw. (unter Windows) der Name der zu verwendenden Named Pipe.

- `--user=`user_name``, `-u `user_name``

  Verwendet den angegebenen MySQL-Benutzernamen zur Verbindung mit dem Server.

- `--verbose`, `-v`

  Ausführlicher Modus. Es werden zusätzliche Angaben zur Tätigkeit des Programms ausgegeben.

- `--version`, `-V`

  Zeigt die Versionsinformation an und wird dann beendet.

- `--vertical`, `-E`

  Erzeugt eine vertikale Ausgabe. Dies ähnelt `--relative`, die Ausgabe erfolgt jedoch vertikal.

- `--wait[=`count`]`, `-w[`count`]`

  Wenn die Verbindung nicht hergestellt werden kann, erfolgt anstelle eines Abbruchs nach einer Wartezeit ein neuer Verbindungsversuch. Wenn ein `count`-Wert spezifiziert wird, gibt dieser die Anzahl der Wiederholungsversuche an. Standardmäßig erfolgt genau eine Wiederholung.

Sie können mit der Syntax `--`var_name`=`value`` auch die folgenden Variablen einstellen:

- `connect_timeout`

  Maximale Anzahl der Sekunden bis zur Zeitüberschreitung der Verbindung. Der Vorgabewert ist 43.200 (12 Stunden).

- `shutdown_timeout`

  Gibt an (in Sekunden), wie lange auf das Herunterfahren des Servers gewartet wird. Der Vorgabewert ist 3.600 (1 Stunde).

Es ist ferner möglich, Variablen über die Syntax `--set-variable=`var_name`=`value`` oder `-O `var_name`=`value`` einzustellen. Diese Syntax ist jedoch veraltet.

## 8.8. mysqlbinlog — Hilfsprogramm für die Verarbeitung binärer Logdateien

Die Binärlogdateien, die der Server erzeugt, sind im Binärformat geschrieben. Um diese Dateien in Textform zu untersuchen, verwenden Sie das Hilfsprogramm mysqlbinlog.

Rufen Sie mysqlbinlog wie folgt auf:

    shell> mysqlbinlog [options] log_file ...

Um beispielsweise den Inhalt einer Binärlogdatei namens `binlog.000003` anzuzeigen, verwenden Sie folgenden Befehl:

    shell> mysqlbinlog binlog.0000003

Die Ausgabe enthält alle Ereignisse, die in `binlog.000003` enthalten sind. Zu den einzelnen Ereignisdaten gehören u. a. die ausgeführte Anweisung, die Ausführungsdauer der Anweisung, die Thread-Kennung des absetzenden Clients und der Zeitstempel der Ausführung.

Die Ausgabe von mysqlbinlog kann – beispielsweise durch Verwendung als Eingabe für mysql – neu ausgeführt werden, um die Anweisungen im Log erneut anzuwenden. Dies ist etwa zur Wiederherstellung nach einem Serverabsturz praktisch. Mehr Anwendungsbeispiele finden Sie im weiteren Verlauf dieses Abschnitts.

Normalerweise verwenden Sie mysqlbinlog zum direkten Auslesen von Binärlogdateien und zu deren Anwendung auf den lokalen MySQL Server. Es ist ferner möglich, Binärlogs von einem entfernten Server auszulesen, indem Sie die Option `--read-from-remote-server` verwenden. Wenn Sie entfernte Binärlogs auslesen, kann mit Verbindungsparameteroptionen angegeben werden, wie die Verbindung zum Server herzustellen ist. Diese Optionen sind `--host`, `--password`, `--port`, `--protocol`, `--socket` und `--user`; sie werden allerdings ignoriert, wenn Sie nicht auch die Option `--read-from-remote-server` angeben.

Sie können mit mysqlbinlog auch Relay-Logdateien auslesen, die von einem Slave-Server in einer Replikationskonfiguration geschrieben wurden. Relay-Logs haben das gleiche Format wie Binärlogdateien.

Weitere Informationen zu Binär- und Relay-Logs finden Sie in Abschnitt 5.12.3, „Die binäre Update-Logdatei“, und Abschnitt 6.4.4, „Relay- und Statusdateien bei der Replikation“.

mysqlbinlog unterstützt die folgenden Optionen:

- `--help`, `-?`

  Zeigt eine Hilfemeldung an und wird dann beendet.

- `--base64-output`

  Gibt alle Binärlogeinträge unter Verwendung der base64-Kodierung aus. Dies dient nur Debugzwecken. Logs, die mithilfe dieser Option erzeugt wurden, sollten nicht auf Produktionssysteme angewendet werden. Diese Option wurde in MySQL 5.1.5 hinzugefügt.

- `--database=`db_name``, `-d `db_name``

  Listet Einträge nur für genau diese Datenbank auf (nur lokales Log).

- `--force-read`, `-f`

  Mit dieser Option gibt mysqlbinlog, wenn es ein Binärlogereignis liest, das es nicht erkennt, eine Warnung aus, ignoriert das Ereignis und fährt fort. Ohne diese Option beendet sich mysqlbinlog beim Lesen eines solchen Ereignisses.

- `--hexdump`, `-H`

  Zeigt einen hexadezimalen Speicherauszug des Logs in Kommentaren an. Diese Ausgabe kann für das Debuggen der Replikation hilfreich sein. Das Format des hexadezimalen Speicherauszugs wird im weiteren Verlauf dieses Abschnitts beschrieben. Diese Option wurde in MySQL 5.1.2 hinzugefügt.

- `--host=`host_name``, `-h `host_name``

  Holt das Binärlog vom MySQL Server des angegebenen Hosts.

- `--local-load=`path``, `-l `path``

  Bereitet lokale Temporärdateien für `LOAD DATA INFILE` im angegebenen Verzeichnis vor.

- `--offset=`N``, `-o `N``

  Überspringt die ersten `N` Einträge im Log.

- `--password[=`password`]`, `-p[`password`]`

  Verwendet das angegebene Passwort zur Verbindung mit dem Server. Wenn Sie die Kurzform der Option (`-p`) verwenden, dürfen Sie kein Leerzeichen zwischen Option und Passwort setzen. Lassen Sie den Wert `password` auf die Option `--password` bzw. `-p` folgend weg, dann werden Sie zur Eingabe des Passworts aufgefordert.

  Die Angabe eines Passworts direkt auf der Befehlszeile ist als nicht sicher einzuordnen. Siehe auch Abschnitt 5.9.6, „Wie Sie Ihre Kennwörter sicher halten“.

- `--port=`port_num``, `-P `port_num``

  Die TCP/IP-Portnummer, die zur Verbindung mit einem entfernten Server verwendet werden soll.

- `--position=`N``, `-j `N``

  Veraltet. Verwenden Sie stattdessen `--start-position`.

- `--protocol={TCP|SOCKET|PIPE|MEMORY}`

  Das zu verwendende Verbindungsprotokoll.

- `--read-from-remote-server`, `-R`

  Liest das Binärlog von einem MySQL Server, statt eine lokale Logdatei auszulesen. Sofern diese Option nicht angegeben ist, werden auch alle weiteren Verbindungsparameteroptionen ignoriert. Diese Optionen sind `--host`, `--password`, `--port`, `--protocol`, `--socket` und `--user`.

- `--result-file=`name``, `-r `name``

  Die Ausgabe erfolgt direkt in die angegebene Datei.

- `--server-id=`id``

  Extrahiert nur diejenigen Ereignisse, die vom Server mit der angegebenen Serverkennung stammen. Diese Option wurde in MySQL 5.1.4 hinzugefügt.

- `--short-form`, `-s`

  Zeigt nur die im Log enthaltenen Anweisungen (d. h. keine zusätzlichen Informationen) an.

- `--socket=`path``, `-S `path``

  Bei Verbindungen mit `localhost` ist dies die zu verwendende Unix-Socketdatei bzw. (unter Windows) der Name der zu verwendenden Named Pipe.

- `--start-datetime=`datetime``

  Startet das Auslesen des Binärlogs beim ersten Ereignis, dessen Zeitstempel dem durch `datetime` angegebenen oder einem späteren Zeitpunkt entspricht. Der `datetime`-Wert ist relativ zur lokalen Zeitzone des Computers, auf dem Sie mysqlbinlog ausführen. Der Wert sollte in einem Format angegeben sein, das für die `DATETIME`- oder `TIMESTAMP`-Datentypen unterstützt wird. Zum Beispiel:

      shell> mysqlbinlog --start-datetime="2005-12-25 11:25:56" binlog.000003

  Diese Option ist für eine Point-in-Time-Wiederherstellung nützlich. Siehe auch Abschnitt 5.10.2, „Beispielhaftes Vorgehen zur Datensicherung und Wiederherstellung“.

- `--stop-datetime=`datetime``

  Beendet das Auslesen des Binärlogs beim ersten Ereignis, dessen Zeitstempel dem durch `datetime` angegebenen oder einem späteren Zeitpunkt entspricht. Diese Option ist für eine Point-in-Time-Wiederherstellung nützlich. Informationen zum `datetime`-Wert finden Sie weiter oben in der Beschreibung zur Option `--start-datetime`.

- `--start-position=`N``

  Startet das Auslesen des Binärlogs beim ersten Ereignis, dessen Position dem Argument `N` entspricht.

- `--stop-position=`N``

  Beendet das Auslesen des Binärlogs beim ersten Ereignis, dessen Position `N` oder höher ist.

- `--to-last-log`, `-t`

  Beendet die Verarbeitung nicht am Ende des bei einem MySQL Server angeforderten Binärlogs, sondern fährt mit der Ausgabe bis zum Ende des letzten Binärlogs fort. Wenn Sie die Ausgabe zum selben MySQL Server leiten, kann dies eine Endlosschleife verursachen. Diese Option erfordert `--read-from-remote-server`.

- `--disable-log-bin`, `-D`

  Deaktiviert das binäre Loggen. Dies ist nützlich zur Vermeidung einer Endlosschleife, wenn Sie die Option `--to-last-log` verwenden und die Ausgabe an denselben MySQL Server senden. Ferner ist die Option praktisch bei der Datenwiederherstellung nach einem Absturz: Sie vermeiden hiermit eine Duplizierung der protokollierten Anweisungen.

  Für diese Option benötigen Sie die Berechtigung `SUPER`. Sie sorgt dafür, dass mysqlbinlog in seine Ausgabe eine `SET SQL_LOG_BIN=0`-Anweisung einfügt, um das binäre Loggen der restlichen Ausgabe zu deaktivieren. Die `SET`-Anweisung wird nur dann ausgeführt, wenn Sie die Berechtigung `SUPER` haben.

- `--user=`user_name``, `-u `user_name``

  Verwendet den angegebenen MySQL-Benutzernamen zur Verbindung mit dem entfernten Server.

- `--version`, `-V`

  Zeigt die Versionsinformation an und wird dann beendet.

Sie können mit der Syntax `--`var_name`=`value`` auch die folgenden Variablen einstellen:

- `open_files_limit`

  Gibt die Anzahl der Deskriptoren für offene Dateien an, die reserviert werden müssen.

Es ist ferner möglich, Variablen über die Syntax `--set-variable=`var_name`=`value`` oder `-O `var_name`=`value`` einzustellen. Diese Syntax ist jedoch veraltet.

Sie können die Ausgabe von mysqlbinlog in den Client mysql umleiten, um die im Binärlog enthaltenen Anweisungen auszuführen. Diese Vorgehensweise dient der Wiederherstellung nach einem Absturz bei Vorhandensein eines alten Backups (siehe Abschnitt 5.10.1, „Datenbank-Datensicherungen“). Zum Beispiel:

    shell> mysqlbinlog binlog.000001 | mysql

Oder:

    shell> mysqlbinlog binlog.[0-9]* | mysql

Sie können die Ausgabe von mysqlbinlog stattdessen auch in eine Textdatei umleiten, wenn Sie das Anweisungslog zunächst modifizieren müssen (indem Sie beispielsweise Anweisungen entfernen, deren Ausführung Sie aus irgendeinem Grund nicht wünschen). Nach der Editierung der Datei führen Sie die enthaltenen Anweisungen aus, indem Sie sie als Eingabe für das Programm mysql verwenden.

mysqlbinlog verfügt über eine Option `--start-position`, die nur diejenigen Anweisungen ausgibt, deren Position mindestens der angegebenen Position entspricht (die angegebene Position muss mit dem Start genau eines Ereignisses zusammenfallen). Ferner sind Optionen zum Beenden und Starten bei Erkennung eines Ereignisses mit einem angegebenen Zeitpunkt (Datum und Uhrzeit) vorhanden. Dies ermöglicht Ihnen die Durchführung einer Point-in-Time-Wiederherstellung mithilfe der Option `--stop-datetime`: Sie können so etwa eine Wiederherstellung nach dem Prinzip „Datenbanken auf den Stand von heute, 10:30 Uhr, setzen“ durchführen.

Wenn Sie mehr als nur ein Binärlog auf dem MySQL Server ausführen wollen, besteht die sichere Methode darin, alle Logs über dieselbe Serververbindung zu verarbeiten. Das folgende Beispiel veranschaulicht, welche Vorgehensweise unsicher sein könnte:

    shell> mysqlbinlog binlog.000001 | mysql # DANGER!!
    shell> mysqlbinlog binlog.000002 | mysql # DANGER!!

Eine derartige Verarbeitung von Binärlogs über verschiedene Serververbindungen verursacht Probleme, wenn die erste Logdatei eine `CREATE TEMPORARY TABLE`-Anweisung und das zweite Log eine Anweisung enthält, die die Temporärtabelle verwendet. Wenn der erste mysql-Prozess beendet wird, löscht der Server die Temporärtabelle. Versucht der zweite mysql-Prozess nun auf die Tabelle zuzugreifen, dann meldet der Server eine „unbekannte Tabelle“.

Um solche Probleme zu vermeiden, verwenden Sie stets die gleiche Verbindung zur Ausführung der Inhalte aller Binärlogs, die Sie verarbeiten wollen. Nachfolgend ist eine Möglichkeit beschrieben, dies zu erreichen:

    shell> mysqlbinlog binlog.000001 binlog.000002 | mysql

Ein weiterer Ansatz besteht darin, alle Logs in eine einzelne Datei zu schreiben und diese Datei dann zu verarbeiten:

    shell> mysqlbinlog binlog.000001 >  /tmp/statements.sql
    shell> mysqlbinlog binlog.000002 >> /tmp/statements.sql
    shell> mysql -e "source /tmp/statements.sql"

mysqlbinlog kann eine Ausgabe erzeugen, die eine `LOAD DATA INFILE`-Operation ohne die ursprüngliche Datendatei reproduziert. mysqlbinlog kopiert die Daten in eine Temporärdatei und schreibt eine `LOAD DATA LOCAL INFILE`-Anweisung, die diese Datei referenziert. Die Standardposition des Verzeichnisses, in das diese Dateien geschrieben werden, ist systemspezifisch. Um ein Verzeichnis explizit anzugeben, verwenden Sie die Option `--local-load`.

Da mysqlbinlog `LOAD DATA INFILE`- in `LOAD DATA LOCAL INFILE`-Anweisungen konvertiert (d. h. `LOCAL` ergänzt), müssen sowohl der Client als auch der Server, den Sie zur Verarbeitung der Anweisungen verwenden, so konfiguriert sein, dass `LOCAL` unterstützt wird. Siehe auch Abschnitt 5.7.4, „Sicherheitsprobleme mit `LOAD DATA LOCAL`“.

Warnung: Die für die `LOAD DATA LOCAL`-Anweisungen erstellten Temporärdateien werden nicht automatisch gelöscht, weil sie benötigt werden, bis Sie diese Anweisungen tatsächlich ausführen. Sie sollten die Temporärdateien also selbst entfernen, wenn Sie das Anweisungslog nicht mehr benötigen. Die Dateien befinden sich im Temporärdateiverzeichnis und haben Namen wie `original_file_name-#-#`.

Die Option `--hexdump` erzeugt einen hexadezimalen Speicherauszug („Hex-Dump“) des Loginhalts in Kommentaren:

    shell> mysqlbinlog --hexdump master-bin.000001

Beim obigen Befehl sieht die Ausgabe etwa so aus:

    /*!40019 SET @@session.max_insert_delayed_threads=0*/;
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
    # at 4
    #051024 17:24:13 server id 1  end_log_pos 98
    # Position  Timestamp   Type   Master ID        Size      Master Pos    Flags
    # 00000004 9d fc 5c 43   0f   01 00 00 00   5e 00 00 00   62 00 00 00   00 00
    # 00000017 04 00 35 2e 30 2e 31 35  2d 64 65 62 75 67 2d 6c |..5.0.15.debug.l|
    # 00000027 6f 67 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |og..............|
    # 00000037 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 |................|
    # 00000047 00 00 00 00 9d fc 5c 43  13 38 0d 00 08 00 12 00 |.......C.8......|
    # 00000057 04 04 04 04 12 00 00 4b  00 04 1a                |.......K...|
    #       Start: binlog v 4, server v 5.0.15-debug-log created 051024 17:24:13
    #       at startup
    ROLLBACK;

Die Hex-Dump-Ausgabe enthält derzeit die nachfolgend aufgeführten Elemente. Das Format kann sich allerdings bei zukünftigen Versionen ändern.

- `Position`: Byteposition in der Logdatei.

- `Timestamp`: Zeitstempel des Ereignisses. Im gezeigten Beispiel ist `'9d fc 5c 43'` die Darstellung von `'051024 17:24:13'` in hexadezimaler Form.

- `Type`: Typ des Logereignisses. Im gezeigten Beispiel bedeutet `'0f'`, dass das Beispielereignis `FORMAT_DESCRIPTION_EVENT` ist. Die nachfolgende Tabelle listet mögliche Typen auf.

  Geben Sie nun Folgendes ein: | Name | Bedeutung
  `00` | `UNKNOWN_EVENT` | Dieses Ereignis sollte keinesfalls im Log vorhanden sein.
  `01` | `START_EVENT_V3` | Zeigt den Anfang einer Logdatei an, die von MySQL 4 oder früher geschrieben wurde.
  `02` | `QUERY_EVENT` | Der häufigste Ereignistyp. Er bezeichnet Anweisungen, die auf dem Master-Server ausgeführt wurden.
  `03` | `STOP_EVENT` | Gibt an, dass der Master beendet wurde.
  `04` | `ROTATE_EVENT` | Wird geschrieben, wenn der Master eine neue Logdatei eröffnet.
  `05` | `INTVAR_EVENT` | Wird hauptsächlich für `AUTO_INCREMENT`-Werte und in Situationen verwendet, in denen die `LAST_INSERT_ID()`-Funktion in der Anweisung verwendet wird.
  `06` | `LOAD_EVENT` | Wird für `LOAD DATA INFILE` in MySQL 3.23 verwendet.
  `07` | `SLAVE_EVENT` | Für zukünftige Verwendung reserviert.
  `08` | `CREATE_FILE_EVENT` | Wird für `LOAD DATA INFILE`-Anweisungen verwendet. Hiermit wird der Start der Ausführung einer solchen Anweisung angezeigt. Auf dem Slave-Server wird eine Temporärdatei erstellt. Wird nur in MySQL 4 verwendet.
  `09` | `APPEND_BLOCK_EVENT` | Enthält Daten, die in einer `LOAD DATA INFILE`-Anweisung verwendet werden. Die Daten werden in einer Temporärdatei auf dem Slave gespeichert.
  `0a` | `EXEC_LOAD_EVENT` | Wird für `LOAD DATA INFILE`-Anweisungen verwendet. Der Inhalt der Temporärdatei wird in der Tabelle auf dem Slave gespeichert. Wird nur in MySQL 4 verwendet.
  `0b` | `DELETE_FILE_EVENT` | Rollback einer `LOAD DATA INFILE`-Anweisung. Die Temporärdatei auf dem Slave sollte gelöscht werden.
  `0c` | `NEW_LOAD_EVENT` | Wird für `LOAD DATA INFILE` in MySQL 4 und früher verwendet.
  `0d` | `RAND_EVENT` | Wird für den Versand von Informationen zu Zufallswerten benutzt, wenn die Funktion `RAND()` in der Anweisung verwendet wird.
  `0e` | `USER_VAR_EVENT` | Dient der Replikation von Benutzervariablen.
  `0f` | `FORMAT_DESCRIPTION_EVENT` | Zeigt den Anfang einer Logdatei an, die von MySQL 5 oder später geschrieben wurde.
  `10` | `XID_EVENT` | Ereignis, welches das Schreiben einer XA-Transaktion anzeigt.
  `11` | `BEGIN_LOAD_QUERY_EVENT` | Wird für `LOAD DATA INFILE`-Anweisungen in MySQL 5 und höher verwendet.
  `12` | `EXECUTE_LOAD_QUERY_EVENT` | Wird für `LOAD DATA INFILE`-Anweisungen in MySQL 5 und höher verwendet.
  `13` | `TABLE_MAP_EVENT` | Für zukünftige Verwendung reserviert.
  `14` | `WRITE_ROWS_EVENT` | Für zukünftige Verwendung reserviert.
  `15` | `UPDATE_ROWS_EVENT` | Für zukünftige Verwendung reserviert.
  `16` | `DELETE_ROWS_EVENT` | Für zukünftige Verwendung reserviert.

- `Master ID`: Serverkennung des Masters, der das Ereignis erstellt hat.

- `Size`: Größe des Ereignisses in Byte.

- `Master Pos`: Position des Ereignisses in der ursprünglichen Logdatei auf dem Master.

- `Flags`: 16 Flags. Zurzeit werden die nachfolgend aufgeführten Flags verwendet. Die übrigen sind für zukünftige Verwendung reserviert.

  Flag | Name | Bedeutung
  `01` | `LOG_EVENT_BINLOG_IN_USE_F` | Logdatei korrekt geschlossen. (Wird nur in `FORMAT_DESCRIPTION_EVENT` verwendet.) Wenn bei einem Ereignis `FORMAT_DESCRIPTION_EVENT` das Flag gesetzt ist (d. h. wenn der Flagwert beispielsweise `'01 00'` lautet), dann wurde die Logdatei nicht korrekt geschlossen. In aller Regel liegt dies an einem Absturz des Masters (etwa aufgrund eines Stromausfalls).
  `02` |  | Für zukünftige Verwendung reserviert.
  `04` | `LOG_EVENT_THREAD_SPECIFIC_F` | Ist gesetzt, wenn das Ereignis von der Verbindung abhängig ist, über die es erfolgte (z. B. `'04 00'`). Ein solcher Fall liegt etwa vor, wenn das Ereignis Temporärtabellen verwendet.
  `08` | `LOG_EVENT_SUPPRESS_USE_F` | Wird unter bestimmten Umständen gesetzt, wenn das Ereignis nicht von der Standarddatenbank abhängt.

  Die übrigen Flags sind für eine zukünftige Verwendung reserviert.

## 8.9. mysqlcheck — Hilfsprogramm für die Wartung und Reparatur von Tabellen

Der Client mysqlcheck prüft, repariert, optimiert und analysiert Tabellen.

mysqlcheck ähnelt hinsichtlich seines Funktionsumfangs myisamchk, funktioniert aber anders. Der wesentliche Unterschied besteht darin, dass mysqlcheck verwendet werden muss, wenn der Server mysqld ausgeführt wird, wohingegen myisamchk verwendet werden sollte, wenn er nicht läuft. Der Vorteil der Verwendung von mysqlcheck besteht darin, dass Sie den Server nicht beenden müssen, um Ihre Tabellen zu überprüfen oder zu reparieren.

mysqlcheck verwendet die SQL-Anweisungen `CHECK TABLE`, `REPAIR TABLE`, `ANALYZE TABLE` und `OPTIMIZE TABLE` auf eine für den Benutzer praktische Weise. Das Programm bestimmt, welche Anweisungen für die gewünschte Operation durchzuführen sind, und sendet diese Anweisungen dann zur Ausführung an den Server. Weitere Informationen dazu, bei welchen Speicher-Engines die jeweiligen Anweisungen funktionieren, finden Sie in Kapitel 13, SQL-Anweisungssyntax.

Die `MyISAM`-Speicher-Engine unterstützt alle vier Anweisungen, d. h., mysqlcheck kann zur Durchführung aller vier Operationen an `MyISAM`-Tabellen verwendet werden. Andere Speicher-Engines unterstützen nicht unbedingt alle Operationen. Gegebenenfalls wird eine Fehlermeldung angezeigt. Wenn beispielsweise `test.t` eine `MEMORY`-Tabelle ist, dann führt der Versuch, sie zu überprüfen, zu folgendem Ergebnis:

    shell> mysqlcheck test t
    test.t
    note     : The storage engine for the table doesn't support check

Es gibt drei Möglichkeiten, mysqlcheck aufzurufen:

    shell> mysqlcheck [options] db_name [tables]
    shell> mysqlcheck [options] --databases db_name1 [db_name2 db_name3...]
    shell> mysqlcheck [options] --all-databases

Wenn Sie auf `db_name` folgend keine Tabellen aufführen oder die Optionen `--databases` oder `--all-databases` verwenden, dann werden ganze Datenbanken überprüft.

mysqlcheck bietet eine im Vergleich zu anderen Clientprogrammen spezielle Funktion. Das Standardverhalten des Überprüfens von Tabellen (`--check`) kann geändert werden, indem die Binärdatei umbenannt wird. Wenn Sie ein Tool benötigen, das Tabellen standardmäßig repariert, sollten Sie einfach eine Kopie von mysqlcheck namens mysqlrepair oder eine symbolische Verknüpfung zu mysqlcheck namens mysqlrepair erstellen. Wenn Sie dann mysqlrepair aufrufen, werden die Tabellen standardmäßig repariert.

Die folgenden Namen können verwendet werden, um das Standardverhalten von mysqlcheck zu ändern:

mysqlrepair | Die Standardoption ist `--repair`.
mysqlanalyze | Die Standardoption ist `--analyze`.
mysqloptimize | Die Standardoption ist `--optimize`.

mysqlcheck unterstützt die folgenden Optionen:

- `--help`, `-?`

  Zeigt eine Hilfemeldung an und wird dann beendet.

- `--all-databases`, `-A`

  Überprüft alle Tabellen in allen Datenbanken. Dies entspricht der Option `--databases` bei gleichzeitiger Nennung aller Datenbanken auf der Befehlszeile.

- `--all-in-1`, `-1`

  Statt eine Anweisung für jede Tabelle einzeln abzusetzen, wird eine einzelne Anweisung für jede Datenbank ausgeführt, die alle zu verarbeitenden Tabellen aus dieser Datenbank benennt.

- `--analyze`, `-a`

  Analysiert die Tabellen.

- `--auto-repair`

  Wenn eine überprüfte Tabelle beschädigt ist, wird sie automatisch repariert. Reparaturarbeiten werden erledigt, nachdem alle Tabellen überprüft wurden.

- `--character-sets-dir=`path``

  Das Verzeichnis, in dem Zeichensätze installiert sind. Siehe auch Abschnitt 5.11.1, „Der für Daten und zum Sortieren benutzte Zeichensatz“.

- `--check`, `-c`

  Überprüft die Tabellen auf Fehler. Dies ist die Standardoperation.

- `--check-only-changed`, `-C`

  Überprüft nur solche Tabellen, die seit der letzten Überprüfung geändert oder aber nicht korrekt geschlossen wurden.

- `--compress`

  Komprimiert alle Daten, die zwischen Client und Server ausgetauscht werden, sofern beide die Komprimierung unterstützen.

- `--databases`, `-B`

  Verarbeitet alle Tabellen in den aufgeführten Datenbanken. Normalerweise betrachtet mysqlcheck das erste Namensargument auf der Befehlszeile als Datenbank- und alle nachfolgenden Argumente als Tabellennamen. Bei dieser Option hingegen werden alle Namensargumente als Datenbanknamen behandelt.

- `--debug[=`debug_options`]`, `-# [`debug_options`]`

  Schreibt ein Debuglog. Der String `debug_options` heißt häufig `'d:t:o,`file_name`'`.

- `--default-character-set=`charset_name``

  Verwendet `charset_name` als Standardzeichensatz. Siehe auch Abschnitt 5.11.1, „Der für Daten und zum Sortieren benutzte Zeichensatz“.

- `--extended`, `-e`

  Wenn Sie diese Option zur Überprüfung von Tabellen einsetzen, ist sichergestellt, dass diese hundertprozentig konsistent sind; der Vorgang dauert allerdings sehr lange.

  Wenn Sie die Option bei der Reparatur von Tabellen einsetzen, wird eine erweiterte Reparatur durchgeführt, deren Ausführung nicht nur extrem lange dauert, sondern die auch eine Menge überflüssiger Datensätze erzeugt!

- `--fast`, `-F`

  Überprüft nur Tabellen, die nicht ordnungsgemäß geschlossen wurden.

- `--force`, `-f`

  Das Programm wird auch dann fortgesetzt, wenn ein SQL-Fehler auftritt.

- `--host=`host_name``, `-h `host_name``

  Stellt eine Verbindung zum MySQL Server auf dem angegebenen Host her.

- `--medium-check`, `-m`

  Führt eine Überprüfung durch, die schneller ist als eine `--extended`-Operation. Hierdurch werden nur 99,99 Prozent aller Fehler gefunden (dies sollte allerdings in den meisten Fällen ausreichend sein).

- `--optimize`, `-o`

  Optimiert die Tabellen.

- `--password[=`password`]`, `-p[`password`]`

  Verwendet das angegebene Passwort zur Verbindung mit dem Server. Wenn Sie die Kurzform der Option (`-p`) verwenden, dürfen Sie kein Leerzeichen zwischen Option und Passwort setzen. Lassen Sie den Wert `password` auf die Option `--password` bzw. `-p` folgend weg, dann werden Sie zur Eingabe des Passworts aufgefordert.

  Die Angabe eines Passworts direkt auf der Befehlszeile ist als nicht sicher einzuordnen. Siehe auch Abschnitt 5.9.6, „Wie Sie Ihre Kennwörter sicher halten“.

- `--port=`port_num``, `-P `port_num``

  Die TCP/IP-Portnummer, die für die Verbindung verwendet werden soll.

- `--protocol={TCP|SOCKET|PIPE|MEMORY}`

  Das zu verwendende Verbindungsprotokoll.

- `--quick`, `-q`

  Wenn Sie mit dieser Option Tabellen überprüfen, wird verhindert, dass die Datensätze auf falsche Verknüpfungen geprüft werden. Dies ist die schnellste Prüfmethode.

  Wenn Sie die Option bei der Reparatur von Tabellen einsetzen, wird versucht, nur den Indexbaum zu reparieren. Dies ist die schnellste Reparaturmethode.

- `--repair`, `-r`

  Führt eine Reparatur durch, die fast alle Fehler beheben kann. Ausgenommen sind lediglich eindeutige Schlüssel, die nicht eindeutig sind.

- `--silent`, `-s`

  Stummer Modus. Gibt nur Fehlermeldungen aus.

- `--socket=`path``, `-S `path``

  Bei Verbindungen mit `localhost` ist dies die zu verwendende Unix-Socketdatei bzw. (unter Windows) der Name der zu verwendenden Named Pipe.

- `--tables`

  Setzt die Option `--databases` bzw. `-B` außer Kraft. Alle auf die Option folgenden Namensargumente werden als Tabellennamen betrachtet.

- `--user=`user_name``, `-u `user_name``

  Verwendet den angegebenen MySQL-Benutzernamen zur Verbindung mit dem Server.

- `--verbose`, `-v`

  Ausführlicher Modus. Gibt Informationen zu den verschiedenen Stufen des Programmablaufs aus.

- `--version`, `-V`

  Zeigt die Versionsinformation an und wird dann beendet.

## 8.10. mysqldump — Programm zur Datensicherung

Der Client mysqldump ist ein Sicherungsprogramm, das ursprünglich von Igor Romanenko geschrieben wurde. Er kann zur Erstellung eines Speicherauszugs einer Datenbank oder einer Sammlung von Datenbanken zu Sicherungszwecken oder zur Übertragung von Daten auf einen anderen SQL-Server verwendet werden (dies muss nicht unbedingt ein MySQL Server sein). Der Speicherauszug enthält SQL-Anweisungen zur Erstellung und/oder zum Ausfüllen einer Tabelle.

Wenn Sie eine Sicherung auf dem Server durchführen und es sich bei Ihren Tabellen ausschließlich um `MyISAM`-Tabellen handelt, sollten Sie stattdessen die Verwendung von mysqlhotcopy in Betracht ziehen, weil dies Sicherung und Wiederherstellung erheblich beschleunigt. Siehe auch Abschnitt 8.11, „mysqlhotcopy — Backup-Programm für Datenbanken“.

Es gibt drei Möglichkeiten, mysqldump aufzurufen:

    shell> mysqldump [options] db_name [tables]
    shell> mysqldump [options] --databases db_name1 [db_name2 db_name3...]
    shell> mysqldump [options] --all-databases

Wenn Sie auf `db_name` folgend keine Tabellen aufführen oder die Optionen `--databases` oder `--all-databases` verwenden, dann werden Speicherauszüge ganzer Datenbanken erstellt.

Um eine Liste der Optionen zu erhalten, die Ihre Version von mysqldump unterstützt, führen Sie mysqldump --help aus.

Wenn Sie mysqldump ohne die Optionen `--quick` oder `--opt` ausführen, lädt mysqldump den gesamten Ergebnissatz in den Speicher, bevor der Speicherauszug erstellt wird. Dies kann bei einem Speicherauszug einer großen Datenbank ein Problem darstellen. Standardmäßig ist die Option `--opt` aktiviert, kann aber mit `--skip-opt` deaktiviert werden.

Wenn Sie eine relativ aktuelle Kopie von mysqldump zur Erzeugung eines Speicherauszugs verwenden, der in einen sehr alten MySQL Server geladen werden soll, dann sollten Sie die Optionen `--opt` oder `--extended-insert` nicht benutzen. Verwenden Sie stattdessen `--skip-opt`.

mysqldump unterstützt die folgenden Optionen:

- `--help`, `-?`

  Zeigt eine Hilfemeldung an und wird dann beendet.

- `--add-drop-database`

  Fügt eine `DROP DATABASE`-Anweisung vor jede `CREATE DATABASE`-Anweisung ein.

- `--add-drop-table`

  Fügt eine `DROP TABLE`-Anweisung vor jede `CREATE TABLE`-Anweisung ein.

- `--add-locks`

  Setzt jeden Tabellenspeicherauszug zwischen eine `LOCK TABLES`- und eine `UNLOCK TABLES`-Anweisung. Hierdurch werden die Einfügevorgänge beim Neuladen der Speicherauszugsdatei beschleunigt. Siehe auch Abschnitt 7.2.16, „Geschwindigkeit von `INSERT`-Anweisungen“.

- `--all-databases`, `-A`

  Erstellt einen Speicherauszug aller Tabellen in allen Datenbanken. Dies entspricht der Option `--databases` bei gleichzeitiger Nennung aller Datenbanken auf der Befehlszeile.

- `--all-tablespaces`, `-Y`

  Fügt zum Tabellenspeicherauszug alle SQL-Anweisungen hinzu, die zur Erstellung von Tablespaces für eine `NDB Cluster`-Tabelle erforderlich sind. Diese Informationen können nur auf diese Weise in der Ausgabe von mysqldump angegeben werden. Die Option ist derzeit nur für MySQL-Cluster-Tabellen relevant.

  Diese Option wurde in MySQL 5.1.6 hinzugefügt.

- `--allow-keywords`

  Erlaubt die Erstellung von Spaltennamen, die Schlüsselwörter sind. Dies funktioniert, indem jedem Spaltennamen der Tabellenname vorangestellt wird.

- `--comments[={0|1}]`

  Wenn `0` angegeben wird, unterdrückt die Option zusätzliche Informationen in der Speicherauszugsdatei wie etwa Programmversion, Serverversion und Host. `--skip-comments` hat den gleichen Effekt wie `--comments=0`. Der Standardwert ist `1`, d. h., die genannten Informationen sind enthalten.

- `--compact`

  Erzeugt eine weniger ausführliche Ausgabe. Die Option unterdrückt Kommentare und aktiviert die Optionen `--skip-add-drop-table`, `--no-set-names`, `--skip-disable-keys` und `--skip-add-locks`.

- `--compatible=`name``

  Erzeugt eine Ausgabe, bei der die Kompatibilität mit anderen Datenbanksystemen oder älteren MySQL Servern höher ist. `name` kann folgende Werte annehmen: `ansi`, `mysql323`, `mysql40`, `postgresql`, `oracle`, `mssql`, `db2`, `maxdb`, `no_key_options`, `no_table_options` oder `no_field_options`. Um mehrere Werte zu verwenden, trennen Sie diese durch Kommata. Diese Werte haben dieselbe Bedeutung wie die entsprechenden Optionen zur Einstellung des SQL-Modus am Server. Siehe auch Abschnitt 5.2.5, „Der SQL-Modus des Servers“.

  Die Option garantiert keine Kompatibilität mit anderen Servern. Vielmehr aktiviert sie nur diejenigen SQL-Moduswerte, die zum gegebenen Zeitpunkt verfügbar sind, um die Kompatibilität der Speicherauszugsausgabe zu erhöhen. So führt `--compatible=oracle` weder eine Zuordnung von Datentypen zu Oracle-Typen durch noch wird die Oracle-Kommentarsyntax verwendet.

- `--complete-insert`, `-c`

  Verwendet vollständige `INSERT`-Anweisungen, die auch Spaltennamen enthalten.

- `--compress`, `-C`

  Komprimiert alle Daten, die zwischen Client und Server ausgetauscht werden, sofern beide die Komprimierung unterstützen.

- `--create-options`

  Fügt alle MySQL-spezifischen Tabellenoptionen in die `CREATE TABLE`-Anweisungen ein.

- `--databases`, `-B`

  Erstellt einen Speicherauszug mehrerer Datenbanken. Normalerweise betrachtet mysqldump das erste Namensargument auf der Befehlszeile als Datenbank- und alle nachfolgenden Argumente als Tabellennamen. Bei dieser Option werden jedoch alle Namensargumente als Datenbanknamen betrachtet. `CREATE DATABASE`- und `USE`-Anweisungen werden für jede neue Datenbank in die Ausgabe eingefügt.

- `--debug[=`debug_options`]`, `-# [`debug_options`]`

  Schreibt ein Debuglog. Der String `debug_options` heißt häufig `'d:t:o,`file_name`'`. Standardwert ist `'d:t:o,/tmp/mysqldump.trace'`.

- `--default-character-set=`charset_name``

  Verwendet `charset_name` als Standardzeichensatz. Siehe auch Abschnitt 5.11.1, „Der für Daten und zum Sortieren benutzte Zeichensatz“. Sofern nicht angegeben, verwendet mysqldump `utf8`.

- `--delayed-insert`

  Schreibt `INSERT DELAYED`- statt `INSERT`-Anweisungen.

- `--delete-master-logs`

  Löscht auf einem Master-Replikationsserver nach Erstellung des Speicherauszugs die Binärlogs. Diese Option aktiviert automatisch `--master-data`.

- `--disable-keys`, `-K`

  Setzt bei jeder Tabelle die `INSERT`-Anweisungen zwischen `/*!40000 ALTER TABLE `tbl_name` DISABLE KEYS */;`- und `/*!40000 ALTER TABLE `tbl_name` ENABLE KEYS */;`-Anweisungen. Dies beschleunigt das Laden der Speicherauszugsdatei, weil die Indizes nach Einfügen aller Datensätze erstellt werden. Diese Option ist nur bei `MyISAM`-Tabellen wirksam.

- `--extended-insert`, `-e`

  Verwendet die `INSERT`-Syntax für mehrere Datensätze (diese enthält verschiedene `VALUES`-Listen). Ergebnis sind eine kleinere Speicherauszugsdatei und beschleunigte Einfügeoperationen beim Neuladen der Datei.

- `--fields-terminated-by=…`, `--fields-enclosed-by=…`, `--fields-optionally-enclosed-by=…`, `--fields-escaped-by=…`, `--lines-terminated-by=…`

  Diese Optionen werden mit der Option `-T` verwendet und haben dieselben Bedeutungen wie die jeweiligen Klauseln für `LOAD DATA INFILE`. Siehe auch Abschnitt 13.2.5, „`LOAD DATA INFILE`“.

- `--first-slave`, `-x`

  Veraltet. Heißt jetzt `--lock-all-tables`.

- `--flush-logs`, `-F`

  Synchronisiert die Logdateien des MySQL Servers auf Festplatte, bevor der Speicherauszugsvorgang gestartet wird. Diese Option erfordert die Berechtigung `RELOAD`. Beachten Sie, dass, wenn Sie diese Option in Verbindung mit der Option `--all-databases` (bzw. `-A`) verwenden, die Logs für jede Datenbank, für die ein Speicherauszug erstellt wird, synchronisiert werden. Eine Ausnahme liegt vor, wenn Sie `--lock-all-tables` oder `--master-data` verwenden: In diesem Fall werden die Logs nur einmal geschrieben, und zwar in dem Augenblick, in dem alle Tabellen gesperrt sind. Wenn Sie wollen, dass Speicherauszug und Logsynchronisierung im exakt gleichen Moment erfolgen, sollten Sie `--flush-logs` wahlweise gemeinsam mit `--lock-all-tables` oder `--master-data` verwenden.

- `--force`, `-f`

  Setzt die Ausführung auch dann fort, wenn ein SQL-Fehler während eines Speicherauszugsvorgangs auftritt.

- `--host=`host_name``, `-h `host_name``

  Speichert den Speicherauszug der Daten vom MySQL Server auf den angegebenen Host. Der Standardhost ist `localhost`.

- `--hex-blob`

  Erstellt den Speicherauszug unter Verwendung der Hexadezimalnotation (z. B. wird aus `'abc'` `0x616263`). Betroffen sind die Datentypen `BINARY`, `VARBINARY`, `BLOB` und `BIT`.

- `--lock-all-tables`, `-x`

  Sperrt datenbankübergreifend alle Tabellen. Dieses wird erreicht, indem eine globale Lesesperre für die Gesamtdauer des Speicherauszugs erwirkt wird. Die Option schaltet `--single-transaction` und `--lock-tables` automatisch ab.

- `--lock-tables`, `-l`

  Sperrt alle Tabellen vor Beginn des Speicherauszugs. Die Tabellen werden im Falle von `MyISAM`-Tabellen mit `READ LOCAL` gesperrt, um nebenläufige Einfügeoperationen durchführen zu können. Bei transaktionssicheren Tabellen wie `InnoDB` und `BDB` ist `--single-transaction` eine wesentlich bessere Option, denn sie erfordert überhaupt kein Sperren der Tabellen.

  Beachten Sie, dass, wenn Sie Speicherauszüge mehrerer Datenbanken erstellen, `--lock-tables` die Tabellen für jede Datenbank separat sperrt. Insofern stellt diese Option nicht sicher, dass die Tabellen in der Speicherauszugsdatei datenbankübergreifend logisch konsistent sind. Die Tabellen in verschiedenen Datenbanken, von denen ein Speicherauszug erstellt wird, befinden sich unter Umständen in vollkommen unterschiedlichen Zuständen.

- `--master-data[=`value`]`

  Schreibt Dateinamen und Position des Binärlogs in die Ausgabe. Diese Option erfordert die Berechtigung `RELOAD`, und das Binärlog muss aktiviert sein. Wenn der Optionswert 1 ist, werden Position und Dateiname in die Form einer `CHANGE MASTER`-Anweisung in die Ausgabe des Speicherauszugs geschrieben. Dies ermöglicht den Start eines Slave-Servers an der korrekten Position in den Binärlogs des Masters, wenn Sie diesen SQL-Speicherauszug des Masters zur Konfiguration eines Slaves einsetzen. Wenn der Optionswert 2 ist, dann wird die `CHANGE MASTER`-Anweisung als SQL-Kommentar geschrieben. Dies ist auch die Standardaktion, wenn `value` nicht angegeben wird.

  Die Option `--master-data` aktiviert `--lock-all-tables`, sofern `--single-transaction` nicht ebenfalls angegeben ist (in diesem Fall wird eine globale Lesesperre nur für einen kurzen Zeitraum zum Beginn des Speicherauszugsvorgangs erwirkt). (Siehe auch die Beschreibung zu `--single-transaction`.) In allen Fällen erfolgen Vorgänge an Logs im exakten Moment des Speicherauszugs. Die Option schaltet `--lock-tables` automatisch ab.

- `--no-create-db`, `-n`

  Diese Option unterdrückt die `CREATE DATABASE`-Anweisungen, die andernfalls in der Ausgabe enthalten wären, wenn die Optionen `--databases` oder `--all-databases` angegeben wurden.

- `--no-create-info`, `-t`

  Es werden keine `CREATE TABLE`-Anweisungen geschrieben, die jede gespeicherte Tabelle neu erstellen.

- `--no-data`, `-d`

  Schreibt keine Datensatzinformationen für die Tabelle. Dies ist recht nützlich, wenn Sie einen Speicherauszug nur für die `CREATE TABLE`-Anweisung für die Tabelle erstellen wollen.

- `--opt`

  Dies ist eine Kurzform, die für folgende Option steht: `--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset`. Ergebnis sollte ein schneller Speicherauszugsprozess sein, an dessen Ende eine Speicherauszugsdatei steht, die problemlos in einen MySQL Server eingeladen werden kann.

  Standardmäßig ist diese Option aktiviert, kann aber mit `--skip-opt` deaktiviert werden. Um nur einige der mit `--opt` aktivierten Optionen zu deaktivieren, verwenden Sie die entsprechenden `--skip`-Optionen (z. B. `--skip-add-drop-table` oder `--skip-quick`).

- `--password[=`password`]`, `-p[`password`]`

  Verwendet das angegebene Passwort zur Verbindung mit dem Server. Wenn Sie die Kurzform der Option (`-p`) verwenden, dürfen Sie kein Leerzeichen zwischen Option und Passwort setzen. Lassen Sie den Wert `password` auf die Option `--password` bzw. `-p` folgend weg, dann werden Sie zur Eingabe des Passworts aufgefordert.

  Die Angabe eines Passworts direkt auf der Befehlszeile ist als nicht sicher einzuordnen. Siehe auch Abschnitt 5.9.6, „Wie Sie Ihre Kennwörter sicher halten“.

- `--port=`port_num``, `-P `port_num``

  Die TCP/IP-Portnummer, die für die Verbindung verwendet werden soll.

- `--protocol={TCP|SOCKET|PIPE|MEMORY}`

  Das zu verwendende Verbindungsprotokoll.

- `--quick`, `-q`

  Diese Option ist nützlich, um einen Speicherauszug großer Tabellen zu erstellen. Hier wird mysqldump gezwungen, die Datensätze für eine Tabelle datensatzweise vom Server abzurufen, statt vor dem Schreiben die gesamte Ergebnismenge zu holen und sie temporär im Speicher abzulegen.

- `--quote-names`, `-Q`

  Setzt Datenbank-, Tabellen- und Spaltennamen in ‘```’-Zeichen. Wenn der SQL-Modus `ANSI_QUOTES` aktiviert ist, werden die Namen in die ‘`"`’-Anführungszeichen gesetzt. Die Option ist standardmäßig aktiviert. Sie kann mit `--skip-quote-names` deaktiviert werden, aber diese Option sollte nach anderen Optionen wie etwa `--compatible` angegeben werden, mit denen `--quote-names` aktiviert werden könnte.

- `--replace`

  Schreibt `REPLACE`- statt `INSERT`-Anweisungen. Wurde in MySQL 5.1.3 hinzugefügt.

- `--result-file=`file``, `-r `file``

  Die Ausgabe erfolgt direkt in die angegebene Datei. Diese Option sollte unter Windows benutzt werden, um die Konvertierung von Zeilenumbrüchen (‘`\n`’) in Folgen von Absatzschaltung und Zeilenumbruch (‘`\r\n`’) zu verhindern.

- `--routines`, `-R`

  Erstellt einen Speicherauszug gespeicherter Routinen (Funktionen und Prozeduren) aus Datenbankspeicherauszügen. Die mit `---routines` erzeugte Ausgabe enthält `CREATE PROCEDURE`- und `CREATE FUNCTION`-Anweisungen zur Neuerstellung der Routinen. Allerdings enthalten diese Anweisungen keine Attribute wie die Routinendefinition oder die Zeitstempel für Erstellung und Änderung. Das bedeutet, dass die Routinen, wenn sie neu geladen werden, mit dem Definitionssatz für den neu ladenden Benutzer und den Zeitstempeln für den Zeitpunkt des Neuladens erstellt werden.

  Wenn Sie Routinen benötigen, die mit den Originalattributen für Definition und Zeitstempel neu erstellt wurden, verwenden Sie `--routines` nicht. Stattdessen erstellen Sie unter Verwendung eines MySQL-Kontos, das die erforderlichen Berechtigungen für die Datenbank `mysql` hat, direkt einen Speicherauszug des Inhalts der Tabelle `mysql.proc` und laden diesen Inhalt dann neu.

  Diese Option wurde in MySQL 5.1.2 hinzugefügt. Zuvor war ein Speicherauszug gespeicherter Routinen nicht möglich.

- `--set-charset`

  Fügt `SET NAMES `default_character_set`` zur Ausgabe hinzu. Die Option ist standardmäßig aktiviert. Um die `SET NAMES`-Anweisung zu unterdrücken, verwenden Sie `--skip-set-charset`.

- `--single-transaction`

  Diese Option setzt eine SQL-Anweisung `BEGIN` ab, bevor der Speicherauszug vom Server durchgeführt wird. Sie ist nur bei transaktionssicheren Tabellen wie `InnoDB` und `BDB` nützlich, denn der Speicherauszug spiegelt den konsistenten Zustand der Datenbank zu dem Zeitpunkt wider, an dem `BEGIN` abgesetzt wurde, ohne dass Anwendungen gesperrt werden.

  Wenn Sie diese Option verwenden, sollten Sie beachten, dass ein Speicherauszug nur von `InnoDB`-Tabellen in einem konsistenten Zustand erstellt werden kann. `MyISAM`- oder `HEAP`-Tabellen, für die unter Verwendung dieser Option ein Speicherauszug erstellt wird, können ihren Zustand trotzdem noch ändern.

  Die Optionen `--single-transaction` und `--lock-tables` schließen sich gegenseitig aus, weil `LOCK TABLES` implizit das Schreiben anhängiger Transaktionen auslöst.

  Um Speicherauszüge großer Tabellen zu erstellen, sollten Sie diese Option mit `--quick` kombinieren.

- `--socket=`path``, `-S `path``

  Bei Verbindungen mit `localhost` ist dies die zu verwendende Unix-Socketdatei bzw. (unter Windows) der Name der zu verwendenden Named Pipe.

- `--skip-comments`

  Siehe Beschreibung zu `--comments`.

- `--tab=`path``, `-T `path``

  Erzeugt tabulatorgetrennte Datendateien. Für jede Tabelle, für die ein Speicherauszug erstellt wurde, erzeugt mysqldump eine ``tbl_name`sql`-Datei, welche die `CREATE TABLE`-Anweisung, mit der die Tabelle erstellt wird, enthält, und eine ``tbl_name`.txt` mit den Daten dieser Tabelle. Der Optionswert ist das Verzeichnis, in das die Dateien geschrieben werden.

  Standardmäßig werden die `.txt`-Datendateien mit Tabulatorzeichen zwischen den Spaltenwerten und einem Zeilenumbruch am Ende jeder Zeile formatiert. Das Format kann aber auch explizit mit den Optionen `--fields-`xxx`` und `--lines--`xxx`` angegeben werden.

  Hinweis: Diese Option sollte nur dann verwendet werden, wenn mysqldump auf demselben Computer läuft wie der Server mysqld. Sie benötigen die Berechtigung `FILE`, und der Server muss eine Berechtigung zum Schreiben von Dateien in das von Ihnen angegebene Verzeichnis haben.

- `--tables`

  Setzt die Option `--databases` bzw. `-B` außer Kraft. Alle auf die Option folgenden Namensargumente werden als Tabellennamen betrachtet.

- `--triggers`

  Erstellt einen Speicherauszug für Trigger für jede Tabelle, für die ein Speicherauszug erstellt wurde. Die Option ist standardmäßig aktiviert. Sie können sie mithilfe von `--skip-triggers` deaktivieren.

- `--tz-utc`

  Fügt `SET TIME_ZONE='+00:00'` zur Speicherauszugsdatei hinzu, sodass `TIMESTAMP`-Spalten in den Speicherauszug integriert und dann auch auf Server in anderen Zeitzonen geladen werden können. Ohne diese Option werden `TIMESTAMP`-Spalten in den Zeitzonen gespeichert und geladen, die für den Quell- bzw. Zielserver lokal sind; dies kann Werteänderungen zur Folge haben. Außerdem schützt `--tz-utc` gegen sommerzeitbedingte Änderungen. `--tz-utc` ist standardmäßig aktiviert. Um es zu deaktivieren, verwenden Sie `--skip-tz-utc`. Diese Option wurde in MySQL 5.1.2 hinzugefügt.

- `--user=`user_name``, `-u `user_name``

  Verwendet den angegebenen MySQL-Benutzernamen zur Verbindung mit dem Server.

- `--verbose`, `-v`

  Ausführlicher Modus. Es werden zusätzliche Angaben zu den Aktivitäten des Programms ausgegeben.

- `--version`, `-V`

  Zeigt die Versionsinformation an und wird dann beendet.

- `--where='`where_condition`'`, `-w '`where_condition`'`

  Fügt nur diejenigen Datensätze in den Speicherauszug ein, die aufgrund der `WHERE`-Bedingung ausgewählt werden. Beachten Sie, dass die Bedingung zwingend in Anführungszeichen gesetzt werden muss, wenn sie Leerzeichen oder andere Zeichen enthält, die Ihr Befehls-Interpreter als Sonderzeichen interpretiert.

  Ein paar Beispiele:

      --where="user='jimf'"
      -w"userid>1"
      -w"userid<1"

- `--xml`, `-X`

  Schreibt die Ausgabe des Speicherauszugs als sauber formatiertes XML.

Sie können mit der Syntax `--`var_name`=`value`` auch die folgenden Variablen einstellen:

- `max_allowed_packet`

  Maximale Größe des Puffers für die Client/Server-Kommunikation. Der Maximalwert beträgt 1 Gbyte.

- `net_buffer_length`

  Ausgangsgröße des Puffers für die Client/Server-Kommunikation. Wenn Sie Einfügeanweisungen für mehrere Datensätze (wie etwa mit den Optionen `--extended-insert` oder `--opt`) erstellen, legt mysqldump Datensätze an, deren maximale Länge durch `net_buffer_length` festgelegt ist. Wenn Sie den Wert dieser Variablen erhöhen, sollten Sie auch sicherstellen, dass die Variable `net_buffer_length` am MySQL Server mindestens genauso groß ist.

Es ist ferner möglich, Variablen über die Syntax `--set-variable=`var_name`=`value`` oder `-O `var_name`=`value`` einzustellen. Diese Syntax ist jedoch veraltet.

Die häufigste Anwendung von mysqldump ist wahrscheinlich die Erstellung eines Backups einer vollständigen Datenbank:

    shell> mysqldump --opt db_name > backup-file.sql

Die Speicherauszugsdatei können Sie wie folgt wieder in den Server einlesen.

    shell> mysql db_name < backup-file.sql

Oder aber so:

    shell> mysql -e "source /path-to-backup/backup-file.sql" db_name

mysqldump ist ferner sehr nützlich zum Ausfüllen von Datenbanken durch Kopieren von Daten von einem MySQL Server auf einen anderen:

    shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name

Sie können mit einem einzigen Befehl einen Speicherauszug mehrerer Datenbanken erstellen:

    shell> mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql

Um einen Speicherauszug aller Datenbanken zu erstellen, verwenden Sie die Option `--all-databases`:

    shell> mysqldump --all-databases > all_databases.sql

Bei `InnoDB`-Tabellen bietet `mysqldump` die Möglichkeit, eine Online-Sicherung zu erstellen:

    shell> mysqldump --all-databases --single-transaction > all_databases.sql

Diese Datensicherung muss vor Beginn des Speicherauszugsvorgangs lediglich (mit `FLUSH TABLES WITH READ LOCK`) eine globale Lesesperre für alle Tabellen erwirken. Sobald diese Sperre aktiv ist, werden die Koordinaten des Binärlogs ausgelesen, und die Sperre wird aufgehoben. Wenn beim Absetzen der `FLUSH`-Anweisung gerade eine umfangreiche Änderungsanweisung ausgeführt wird, dann – und nur dann! – kann der MySQL Server stehen bleiben, bis diese lange Anweisung ausgeführt ist; danach ist der Server sperrfrei. Wenn die vom MySQL Server empfangenen Änderungsanweisungen (in Bezug auf ihre Ausführungsdauer) kurz sind, sollte die anfängliche Sperrperiode auch bei vielen Änderungen nicht spürbar sein.

Bei der Point-in-Time-Wiederherstellung (die auch als „Roll-Forward“ bezeichnet wird, wenn Sie ein altes Backup wiederherstellen und die seitdem durchgeführten Änderungen neu aufspielen müssen) ist es häufig nützlich, das Binärlog zu rotieren (siehe Abschnitt 5.12.3, „Die binäre Update-Logdatei“) oder zumindest die Binärlogkoordinaten zu kennen, denen der Speicherauszug entspricht:

    shell> mysqldump --all-databases --master-data=2 > all_databases.sql

Oder:

    shell> mysqldump --all-databases --flush-logs --master-data=2
                  > all_databases.sql

Die gleichzeitige Verwendung von `--master-data` und `--single-transaction` stellt eine praktische Möglichkeit dar, ein für die Point-in-Time-Wiederherstellung geeignetes Onlinebackup zu erstellen, wenn Tabellen in der `InnoDB`-Engine gespeichert sind.

Weitere Informationen zur Erstellung von Backups finden Sie in Abschnitt 5.10.1, „Datenbank-Datensicherungen“, und Abschnitt 5.10.2, „Beispielhaftes Vorgehen zur Datensicherung und Wiederherstellung“.

## 8.11. mysqlhotcopy — Backup-Programm für Datenbanken

mysqlhotcopy ist ein Perl-Skript, das ursprünglich von Tim Bunce entwickelt und beigetragen wurde. Es erstellt mithilfe von `LOCK TABLES`, `FLUSH TABLES` und `cp` oder `scp` ein schnelles Backup der Datenbank. Dieses Skript stellt die schnellste Möglichkeit dar, eine Sicherungskopie der Datenbank oder einzelner Tabellen zu erstellen, kann aber nur auf dem Computer ausgeführt werden, auf dem auch die Datenbankverzeichnisse gespeichert sind. mysqlhotcopy erlaubt lediglich die Sicherung von `MyISAM`-Tabellen. Es läuft unter Unix und NetWare.

    shell> mysqlhotcopy db_name [/path/to/new_directory]

    shell> mysqlhotcopy db_name_1 ... db_name_n /path/to/new_directory

Gesichert werden Tabellen in der angegebenen Datenbank, die einem regulären Ausdruck entsprechen:

    shell> mysqlhotcopy db_name./regex/

Der reguläre Ausdruck für den Tabellennamen kann verneint werden, indem man ihm eine Tilde (‘`~`’) voranstellt:

    shell> mysqlhotcopy db_name./~regex/

mysqlhotcopy unterstützt die folgenden Optionen:

- `--help`, `-?`

  Zeigt eine Hilfemeldung an und wird dann beendet.

- `--addtodest`

  Benennt das Zielverzeichnis (sofern vorhanden) nicht um, sondern fügt nur Dateien hinzu.

- `--allowold`

  Bricht nicht ab, wenn das Ziel vorhanden ist, sondern benennt es durch Anhängen des Suffix `_old` um.

- `--checkpoint=`db_name`.`tbl_name``

  Fügt Prüfpunkteinträge in die angegebene Datenbank `db_name` und Tabelle `tbl_name` ein.

- `--chroot=`path``

  Basisverzeichnis des chroot-Käfigs, auf dem mysqld läuft. Der Wert `path` sollte mit dem der Option `--chroot` übereinstimmen, die für mysqld angegeben wurde.

- `--debug`

  Aktiviert die Debugausgabe.

- `--dryrun`, `-n`

  Meldet Aktionen, ohne sie auszuführen.

- `--flushlog`

  Synchronisiert Logs, nachdem alle Tabellen gesperrt wurden.

- `--host=`host_name``, `-h `host_name``

  Hostname des lokalen Hosts, der zur Herstellung einer TCP/IP-Verbindung zum lokalen Server verwendet wird. Standardmäßig erfolgt die Verbindung zu `localhost` über eine Unix-Socketdatei.

- `--keepold`

  Gibt an, dass das vorherige (umbenannte) Ziel nach Abschluss nicht gelöscht wird.

- `--method=`command``

  Methode zum Kopieren von Dateien (`cp` oder `scp`).

- `--noindices`

  Gibt an, dass vollständige Indexdateien nicht Bestandteil der Sicherung sind. Hierdurch wird die Sicherung beschleunigt, und die Backup-Datei wird kleiner. Die Indizes der neu geladenen Tabellen lassen sich später mit myisamchk -rq rekonstruieren.

- `--password=`password``, `-p`password``

  Verwendet das angegebene Passwort zur Verbindung mit dem Server. Beachten Sie, dass der Passwortwert – anders als bei anderen MySQL-Programmen – bei dieser Option nicht optional ist. Wenn Sie das Passwort nicht auf der Befehlszeile angeben wollen, können Sie auch eine Optionsdatei verwenden.

  Die Angabe eines Passworts direkt auf der Befehlszeile ist als nicht sicher einzuordnen. Siehe auch Abschnitt 5.9.6, „Wie Sie Ihre Kennwörter sicher halten“.

- `--port=`port_num``, `-P `port_num``

  Die TCP/IP-Portnummer, die zur Verbindung mit dem lokalen Server verwendet werden soll.

- `--quiet`, `-q`

  Stummer Modus (außer bei Fehlern).

- `--record_log_pos=`db_name`.`tbl_name``

  Zeichnet den Status von Master und Slave in der angegebenen Datenbank `db_name` und Tabelle `tbl_name` auf.

- `--regexp=`expr``

  Kopiert alle Datenbanken, deren Namen dem angegebenen regulären Ausdruck entsprechen.

- `--resetmaster`

  Setzt das Binärlog nach Sperren aller Tabellen zurück.

- `--resetslave`

  Setzt die Datei `master.info` nach Sperren aller Tabellen zurück.

- `--socket=`path``, `-S `path``

  Unix-Socketdatei, die für die Verbindung verwendet werden soll.

- `--suffix=`str``

  Suffix für Namen kopierter Datenbanken.

- `--tmpdir=`path``

  Das Temporärverzeichnis. Vorgabe ist `/tmp`.

- `--user=`user_name``, `-u `user_name``

  Verwendet den angegebenen MySQL-Benutzernamen zur Verbindung mit dem Server.

mysqlhotcopy liest die Abschnitte `[client]` und `[mysqlhotcopy]` aus Optionsdateien aus.

Um mysqlhotcopy auszuführen, müssen Sie Zugriff auf die Dateien der zu sichernden Tabellen haben und benötigen zudem die Berechtigung `SELECT` für diese Tabellen sowie die Berechtigung `RELOAD` (damit Sie `FLUSH TABLES` ausführen können).

`perldoc` bietet eine umfassende Dokumentation zu mysqlhotcopy einschließlich Informationen zur Struktur der Tabellen, die für die Optionen `--checkpoint` und `--record_log_pos` erforderlich sind:

    shell> perldoc mysqlhotcopy

## 8.12. mysqlimport — Programm zum Datenimport

Der Client mysqlimport stellt eine Befehlszeilenoberfläche für die SQL-Anweisung `LOAD DATA INFILE` bereit. Die meisten Optionen für mysqlimport entsprechen direkt Klauseln der `LOAD DATA INFILE`-Syntax. Siehe auch Abschnitt 13.2.5, „`LOAD DATA INFILE`“.

Rufen Sie mysqlimport wie folgt auf:

    shell> mysqlimport [options] db_name textfile1 [textfile2 ...]

Bei jeder Textdatei, die auf der Befehlszeile angegeben wird, entfernt mysqlimport die Dateinamenserweiterung und bestimmt anhand des Ergebnisses den Namen der Tabelle, in die der Inhalt der Datei importiert werden soll. So würden beispielsweise die Dateien mit den Namen `patient.txt`, `patient.text` und `patient` alle in eine Tabelle namens `patient` importiert.

mysqlimport unterstützt die folgenden Optionen:

- `--help`, `-?`

  Zeigt eine Hilfemeldung an und wird dann beendet.

- `--columns=`column_list``, `-c `column_list``

  Diese Option nimmt eine kommagetrennte Liste der Spaltennamen als Wert entgegen. Die Reihenfolge der Spaltennamen gibt an, wie die Spalten in der Datendatei den Tabellenspalten zuzuordnen sind.

- `--compress`, `-C`

  Komprimiert alle Daten, die zwischen Client und Server ausgetauscht werden, sofern beide die Komprimierung unterstützen.

- `--debug[=`debug_options`]`, `-# [`debug_options`]`

  Schreibt ein Debuglog. Der String `debug_options` heißt häufig `'d:t:o,`file_name`'`.

- `--delete`, `-D`

  Leert die Tabelle vor dem Import der Textdatei.

- `--fields-terminated-by=…`, `--fields-enclosed-by=…`, `--fields-optionally-enclosed-by=…`, `--fields-escaped-by=…`, `--lines-terminated-by=…`

  Diese Optionen haben dieselbe Bedeutung wie die entsprechenden Klauseln für `LOAD DATA INFILE`. Siehe auch Abschnitt 13.2.5, „`LOAD DATA INFILE`“.

- `--force`, `-f`

  Ignoriert Fehler. Wenn beispielsweise eine Tabelle für eine Textdatei nicht vorhanden ist, wird ggf. mit der Verarbeitung weiterer vorhandener Dateien fortgefahren. Ohne `--force` wird mysqlimport beendet, wenn eine Tabelle nicht vorhanden ist.

- `--host=`host_name``, `-h `host_name``

  Importiert Daten in den MySQL Server auf dem angegebenen Host. Der Standardhost ist `localhost`.

- `--ignore`, `-i`

  Siehe Beschreibung zu `--replace`.

- `--ignore-lines=`N``

  Ignoriert die ersten `N` Zeilen der Datendatei.

- `--local`, `-L`

  Liest die Eingabedateien lokal vom Clienthost.

- `--lock-tables`, `-l`

  Sperrt alle Tabellen für Schreiboperationen, bevor mit der Verarbeitung der Textdateien begonnen wird. Hierdurch ist sichergestellt, dass alle Tabellen auf dem Server synchronisiert sind.

- `--password[=`password`]`, `-p[`password`]`

  Verwendet das angegebene Passwort zur Verbindung mit dem Server. Wenn Sie die Kurzform der Option (`-p`) verwenden, dürfen Sie kein Leerzeichen zwischen Option und Passwort setzen. Lassen Sie den Wert `password` auf die Option `--password` bzw. `-p` folgend weg, dann werden Sie zur Eingabe des Passworts aufgefordert.

  Die Angabe eines Passworts direkt auf der Befehlszeile ist als nicht sicher einzuordnen. Siehe auch Abschnitt 5.9.6, „Wie Sie Ihre Kennwörter sicher halten“.

- `--port=`port_num``, `-P `port_num``

  Die TCP/IP-Portnummer, die für die Verbindung verwendet werden soll.

- `--protocol={TCP|SOCKET|PIPE|MEMORY}`

  Das zu verwendende Verbindungsprotokoll.

- `--replace`, `-r`

  Die Optionen `--replace` und `--ignore` steuern den Umgang mit eingegebenen Datensätzen, die Duplikate vorhandener Datensätze mit eindeutigen Schlüsselwerten darstellen. Wenn Sie `--replace` angeben, ersetzen die neuen die vorhandenen Datensätze, die denselben eindeutigen Schlüsselwert aufweisen. Bei Angabe von `--ignore` hingegen werden neue Datensätze, deren eindeutiger Schlüsselwert bereits einem vorhandenen Datensatz zugewiesen ist, ignoriert. Geben Sie keine Option an, dann tritt ein Fehler auf, wenn ein doppelter Schlüsselwert gefunden wird; in diesem Fall wird der Rest der Textdatei ignoriert.

- `--silent`, `-s`

  Stummer Modus. Eine Ausgabe erfolgt nur, wenn ein Fehler auftritt.

- `--socket=`path``, `-S `path``

  Bei Verbindungen mit `localhost` ist dies die zu verwendende Unix-Socketdatei bzw. (unter Windows) der Name der zu verwendenden Named Pipe.

- `--user=`user_name``, `-u `user_name``

  Verwendet den angegebenen MySQL-Benutzernamen zur Verbindung mit dem Server.

- `--verbose`, `-v`

  Ausführlicher Modus. Es werden zusätzliche Angaben zu den Aktivitäten des Programms ausgegeben.

- `--version`, `-V`

  Zeigt die Versionsinformation an und wird dann beendet.

Die nachfolgende Beispielsitzung veranschaulicht die Verwendung von mysqlimport:

    shell> mysql -e 'CREATE TABLE imptest(id INT, n VARCHAR(30))' test
    shell> ed
    a
    100     Max Sydow
    101     Count Dracula
    .
    w imptest.txt
    32
    q
    shell> od -c imptest.txt
    0000000   1   0   0  \t   M   a   x       S   y   d   o   w  \n   1   0
    0000020   1  \t   C   o   u   n   t       D   r   a   c   u   l   a  \n
    0000040
    shell> mysqlimport --local test imptest.txt
    test.imptest: Records: 2  Deleted: 0  Skipped: 0  Warnings: 0
    shell> mysql -e 'SELECT * FROM imptest' test
    +------+---------------+
    | id   | n             |
    +------+---------------+
    |  100 | Max Sydow     |
    |  101 | Count Dracula |
    +------+---------------+

## 8.13. mysqlshow — Anzeige von Informationen über Datenbanken, Tabellen und Spalten

Mit dem Client mysqlshow können Sie Informationen zu den vorhandenen Datenbanken, deren Tabellen oder den Spalten oder Indizes einer Tabelle schnell anzeigen.

mysqlshow stellt eine Befehlszeilenoberfläche für mehrere SQL-`SHOW`-Anweisungen bereit. Siehe auch Abschnitt 13.5.4, „`SHOW`“. Dieselben Informationen können Sie auch durch direkte Verwendung dieser Anweisungen abrufen. Sie können sie beispielsweise über das Clientprogramm mysql absetzen.

Rufen Sie mysqlshow wie folgt auf:

    shell> mysqlshow [options] [db_name [tbl_name [col_name]]]

- Wenn keine Datenbank angegeben wird, erscheint eine Liste aller Datenbanknamen.

- Wird keine Tabelle angegeben, dann werden alle passenden Tabellen in der Datenbank angezeigt.

- Wird keine Spalte angegeben, dann werden alle passenden Spalten und Spaltentypen in der Tabelle angezeigt.

Die Ausgabe zeigt nur die Namen derjenigen Datenbanken, Tabellen oder Spalten an, für die Sie ausreichende Berechtigungen haben.

Enthält das letzte Argument Shell- oder SQL-spezifische Jokerzeichen (‘`*`’, ‘`?`’, ‘`%`’ oder ‘`_`’), dann werden nur diejenigen Namen gezeigt, die den jeweiligen Jokerzeichen entsprechen. Enthält ein Datenbankname Unterstriche, dann sollten diese mit einem Backslash (bei manchen Unix-Shells zwingend auch mit zwei Backslashs) markiert werden, um eine Liste der passenden Tabellen oder Spalten zu erhalten. Die Zeichen ‘`*`’ und ‘`?`’ werden in die SQL-Jokerzeichen ‘`%`’ und ‘`_`’ konvertiert. Dies kann zu Verwirrung führen, wenn Sie versuchen, die Spalten einer Tabelle mit einem ‘`_`’ im Namen anzuzeigen, denn in diesem Fall zeigt Ihnen mysqlshow nur die Tabellennamen an, die dem Muster entsprechen. Dieses Problem lässt sich allerdings ganz einfach beheben, indem Sie am Ende der Befehlszeile ein zusätzliches ‘`%`’ als separates Argument anhängen.

mysqlshow unterstützt die folgenden Optionen:

- `--help`, `-?`

  Zeigt eine Hilfemeldung an und wird dann beendet.

- `--character-sets-dir=`path``

  Das Verzeichnis, in dem Zeichensätze installiert sind. Siehe auch Abschnitt 5.11.1, „Der für Daten und zum Sortieren benutzte Zeichensatz“.

- `--compress`, `-C`

  Komprimiert alle Daten, die zwischen Client und Server ausgetauscht werden, sofern beide die Komprimierung unterstützen.

- `--debug[=`debug_options`]`, `-# [`debug_options`]`

  Schreibt ein Debuglog. Der String `debug_options` heißt häufig `'d:t:o,`file_name`'`.

- `--default-character-set=`charset_name``

  Verwendet `charset_name` als Standardzeichensatz. Siehe auch Abschnitt 5.11.1, „Der für Daten und zum Sortieren benutzte Zeichensatz“.

- `--host=`host_name``, `-h `host_name``

  Stellt eine Verbindung zum MySQL Server auf dem angegebenen Host her.

- `--keys`, `-k`

  Zeigt die Tabellenindizes an.

- `--password[=`password`]`, `-p[`password`]`

  Verwendet das angegebene Passwort zur Verbindung mit dem Server. Wenn Sie die Kurzform der Option (`-p`) verwenden, dürfen Sie kein Leerzeichen zwischen Option und Passwort setzen. Lassen Sie den Wert `password` auf die Option `--password` bzw. `-p` folgend weg, dann werden Sie zur Eingabe des Passworts aufgefordert.

  Die Angabe eines Passworts direkt auf der Befehlszeile ist als nicht sicher einzuordnen. Siehe auch Abschnitt 5.9.6, „Wie Sie Ihre Kennwörter sicher halten“.

- `--port=`port_num``, `-P `port_num``

  Die TCP/IP-Portnummer, die für die Verbindung verwendet werden soll.

- `--protocol={TCP|SOCKET|PIPE|MEMORY}`

  Das zu verwendende Verbindungsprotokoll.

- `--show-table-type`

  Zeigt eine Spalte an, die den Tabellentyp angibt (wie bei `SHOW FULL TABLES`). Der Typ ist `BASE TABLE` oder `VIEW`.

- `--socket=`path``, `-S `path``

  Bei Verbindungen mit `localhost` ist dies die zu verwendende Unix-Socketdatei bzw. (unter Windows) der Name der zu verwendenden Named Pipe.

- `--status`, `-i`

  Zeigt zusätzliche Informationen zu jeder Tabelle an.

- `--user=`user_name``, `-u `user_name``

  Verwendet den angegebenen MySQL-Benutzernamen zur Verbindung mit dem Server.

- `--verbose`, `-v`

  Ausführlicher Modus. Es werden zusätzliche Angaben zu den Aktivitäten des Programms ausgegeben. Diese Option kann mehrfach verwendet werden, um den Umfang der angezeigten Informationen zu erhöhen.

- `--version`, `-V`

  Zeigt die Versionsinformation an und wird dann beendet.

## 8.14. mysqlslap — Client zur Lastemulation

mysqlslap ist ein Diagnoseprogramm, dessen Zweck die Emulation einer Clientlast für einen MySQL Server ist und das zeitbezogene Angaben der einzelnen Operationsstufen meldet. Das Programm simuliert den Zugriff mehrerer Clients auf den Server. mysqlslap wurde in MySQL 5.1.4 hinzugefügt.

Rufen Sie mysqlslap wie folgt auf:

    shell> mysqlslap [options]

mysqlslap unterstützt die folgenden Optionen:

- `--help`, `-?`

  Zeigt eine Hilfemeldung an und wird dann beendet.

- `--auto-generate-sql`, `-a`

  Erzeugt automatisch SQL-Anweisungen, wenn diese nicht in Dateien oder als Befehlsoptionen übergeben wurden.

- `--compress`, `-C`

  Komprimiert alle Daten, die zwischen Client und Server ausgetauscht werden, sofern beide die Komprimierung unterstützen.

- `--concurrency`, `-c`

  Anzahl der zu simulierenden Clients beim Absetzen der `SELECT`-Anweisung.

- `--create=`value``

  Datei oder String, der bzw. die zur Erstellung der Tabelle verwendet wird.

- `--create-schema=`value``

  Schema, in dem die Tests ausgeführt werden. Diese Option wurde in MySQL 5.1.5 hinzugefügt.

- `--csv[=`file`]`

  Erzeugt eine Ausgabe von Werten in kommagetrennter Form. Die Ausgabe erfolgt in die angegebene Datei oder, wenn keine Datei angegeben ist, in die Standardausgabe. Diese Option wurde in MySQL 5.1.5 hinzugefügt.

- `--debug[=`debug_options`]`, `-# [`debug_options`]`

  Schreibt ein Debuglog. Der String `debug_options` heißt häufig `'d:t:o,`file_name`'`.

- `--delimiter=`str``, `-F `str``

  Trennzeichen, das in SQL-Anweisungen verwendet wird, die in Dateien oder über Befehlsoptionen angegeben werden.

- `--engine=`engine_name``, `-e `engine_name``

  Speicher-Engine, die zur Erstellung der Tabelle verwendet wird.

- `--host=`host_name``, `-h `host_name``

  Stellt eine Verbindung zum MySQL Server auf dem angegebenen Host her.

- `--iterations=`N``, `-i `N``

  Häufigkeit, mit der die Tests durchgeführt werden.

- `--lock-directory=`path``

  Verzeichnis, das zur Speicherung von Sperren verwendet wird. Diese Option wurde in MySQL 5.1.5 hinzugefügt.

- `--number-char-cols=`N``, `-x `N``

  Anzahl der `VARCHAR`-Spalten, die verwendet werden, wenn `--auto-generate-sql` angegeben ist.

- `--number-int-cols=`N``, `-y `N``

  Anzahl der `INT`-Spalten, die verwendet werden, wenn `--auto-generate-sql` angegeben ist.

- `--number-of-queries=`N``

  Anzahl der Abfragen, auf die jeder Client ungefähr beschränkt wird. Diese Option wurde in MySQL 5.1.5 hinzugefügt.

- `--only-print`

  Stellt keine Verbindung mit Datenbanken her. mysqlslap gibt dann nur aus, was es gemacht hätte. Diese Option wurde in MySQL 5.1.5 hinzugefügt.

- `--password[=`password`]`, `-p[`password`]`

  Verwendet das angegebene Passwort zur Verbindung mit dem Server. Wenn Sie die Kurzform der Option (`-p`) verwenden, dürfen Sie kein Leerzeichen zwischen Option und Passwort setzen. Lassen Sie den Wert `password` auf die Option `--password` bzw. `-p` folgend weg, dann werden Sie zur Eingabe des Passworts aufgefordert.

  Die Angabe eines Passworts direkt auf der Befehlszeile ist als nicht sicher einzuordnen. Siehe auch Abschnitt 5.9.6, „Wie Sie Ihre Kennwörter sicher halten“.

- `--port=`port_num``, `-P `port_num``

  Die TCP/IP-Portnummer, die für die Verbindung verwendet werden soll.

- `--protocol={TCP|SOCKET|PIPE|MEMORY}`

  Das zu verwendende Verbindungsprotokoll.

- `--preserve-schema`

  Behält das Schema der mysqlslap-Ausführung bei. Diese Option wurde in MySQL 5.1.5 hinzugefügt.

- `--query=`value``, `-q `value``

  Datei oder String, der bzw. die die `SELECT`-Anweisung enthält, die zum Abrufen von Daten verwendet wird.

- `--silent`, `-s`

  Stummer Modus. Es erfolgt keine Ausgabe.

- `--skip-query`, `-Q`

  Führt keine `SELECT`-Anweisungen aus.

- `--slave`

  Folgt den Master-Sperren für andere mysqlslap-Clients. Verwenden Sie diese Option, wenn Sie die Synchronisation zu einem Master-Server mit `--lock-directory` und NFS beabsichtigen. Diese Option wurde in MySQL 5.1.5 hinzugefügt.

- `--socket=`path``, `-S `path``

  Bei Verbindungen mit `localhost` ist dies die zu verwendende Unix-Socketdatei bzw. (unter Windows) der Name der zu verwendenden Named Pipe.

- `--use-threads`

  Unter Unix werden standardmäßig `fork()`-Aufrufe verwendet. Bei dieser Option werden stattdessen pthread-Aufrufe benutzt. Unter Windows werden `pthread`-Aufrufe ohnehin standardmäßig verwendet, d. h., die Option hat keine Auswirkungen. Diese Option wurde in MySQL 5.1.6 hinzugefügt.

- `--user=`user_name``, `-u `user_name``

  Verwendet den angegebenen MySQL-Benutzernamen zur Verbindung mit dem Server.

- `--verbose`, `-v`

  Ausführlicher Modus. Es werden zusätzliche Angaben zu den Aktivitäten des Programms ausgegeben.

- `--version`, `-V`

  Zeigt die Versionsinformation an und wird dann beendet.

## 8.15. mysql_zap — Prozesse beenden, die einem Muster entsprechen

mysql_zap terminiert Prozesse, die mit einem Muster übereinstimmen. Das Programm verwendet den Befehl ps und Unix-Signale, läuft also unter Unix und Unix-ähnlichen Systemen.

Rufen Sie mysql_zap wie folgt auf:

    shell> mysql_zap [-signal] [-?Ift] pattern

Eine Übereinstimmung mit einem Prozess liegt vor, wenn die Ausgabezeile von ps das Muster enthält. Standardmäßig fordert mysql_zap für die Terminierung eines Prozesses immer eine Bestätigung an. Geben Sie `y` ein, um den Prozess zu terminieren, oder `q`, um mysql_zap zu beenden. Bei jeder anderen Antwort versucht mysql_zap nicht, den Prozess zu terminieren.

Sofern die Option `-`signal`` angegeben ist, wird auf diese Weise der Name oder die Nummer des Signals festgelegt, das an die betreffenden Prozesse zu senden ist. Andernfalls versucht mysql_zap, einen Prozess zunächst mit `TERM` (Signal 15) und nachfolgend mit `KILL` (Signal 9) zu beenden.

mysql_zap versteht die folgenden weiteren Optionen:

- `--help`, `-?`, `-I`

  Zeigt eine Hilfemeldung an und wird dann beendet.

- `-f`

  Erzwingungsmodus. mysql_zap versucht, jeden Prozess zu terminieren, ohne eine Bestätigung anzufordern.

- `-t`

  Testmodus. Zeigt Informationen zu allen Prozessen an, terminiert sie aber nicht.

## 8.16. perror — Erklärung der Fehlercodes

Auf den meisten Systemen zeigt MySQL neben einer internen Textmeldung den Systemfehlercode auf eine der folgenden Arten an:

    message ... (errno: #)
    message ... (Errcode: #)

Um zu ermitteln, was der Fehlercode bedeutet, lesen Sie die Dokumentation zu Ihrem System oder verwenden das Hilfsprogramm perror.

perror gibt eine Beschreibung für einen Systemfehlercode oder den Code eines Speicher-Engine- (Tabellen-Handler-)Fehlers aus.

Rufen Sie perror wie folgt auf:

    shell> perror [options] errorcode ...

Beispiel:

    shell> perror 13 64
    Error code  13:  Permission denied
    Error code  64:  Machine is not on the network

Um die Fehlermeldung für einen MySQL-Cluster-Fehlercode zu erhalten, rufen Sie perror mit der Option `--ndb` auf:

    shell> perror --ndb errorcode

Beachten Sie, dass die Bedeutung von Systemfehlermeldungen je nach verwendetem Betriebssystem unterschiedlich sein kann. Anders gesagt: Ein Fehlercode kann auf verschiedenen Betriebssystemen auf unterschiedliche Fehler verweisen.

perror unterstützt die folgenden Optionen:

- `--help`, `--info`, `-I`, `-?`

  Zeigt eine Hilfemeldung an und wird dann beendet.

- `--ndb`

  Gibt die Fehlermeldung für einen MySQL-Cluster-Fehlercode aus.

- `--silent`, `-s`

  Stummer Modus. Gibt nur die Fehlermeldung aus.

- `--verbose`, `-v`

  Ausführlicher Modus. Gibt den Fehlercode und die Fehlermeldung aus. Dies ist das Standardverhalten.

- `--version`, `-V`

  Zeigt die Versionsinformation an und wird dann beendet.

## 8.17. replace — Hilfsprogramm für String-Ersetzungen

Das Hilfsprogramm replace ersetzt Strings in Dateien oder in der Standardeingabe.

Es gibt die folgenden Möglichkeiten, replace aufzurufen:

    shell> replace from to [from to] ... -- file [file] ...
    shell> replace from to [from to] ... < input

`from` ist der String, nach dem gesucht wird, und `to` der String, der den Such-String ersetzen soll. Es können ein oder mehrere String-Paare angegeben werden.

Mit der Option `--` geben Sie an, wo die Liste mit den String-Ersetzungen endet und die Dateinamensliste beginnt. In diesem Fall werden alle Dateien, die auf der Befehlszeile angegeben sind, modifiziert, d. h., Sie sollten vor der Bearbeitung eine Kopie der Originaldateien erstellen. `replace` zeigt in einer Meldung an, welche der eingegebenen Dateien tatsächlich geändert werden.

Wenn die Option `--` nicht angegeben ist, liest replace die Standardeingabe und schreibt in die Standardausgabe.

replace verwendet einen endlichen Automaten, um längere Strings zuerst auf Übereinstimmung zu prüfen. Hiermit können Strings gegeneinander ausgetauscht werden. So werden etwa mit dem folgenden Befehl `a` und `b` in den angegebenen Dateien `file1` und `file2` gegeneinander ausgetauscht:

    shell> replace a b b a -- file1 file2 ...

Das Programm replace wird von msql2mysql verwendet. Siehe auch Abschnitt 24.9.1, „msql2mysql — Umwandeln von mSQL-Programmen für die Benutzung mit MySQL“.

replace unterstützt die folgenden Optionen:

- `-?`, `-I`

  Zeigt eine Hilfemeldung an und wird dann beendet.

- `-# `debug_options``

  Schreibt ein Debuglog. Der String ``debug_options`` heißt häufig `'d:t:o,`file_name`'`.

- `-s`

  Stummer Modus. Es werden weniger Angaben zu den Aktivitäten des Programms ausgegeben.

- `-v`

  Ausführlicher Modus. Es werden zusätzliche Angaben zu den Aktivitäten des Programms ausgegeben.

- `-V`

  Zeigt die Versionsinformation an und wird dann beendet.

Dies ist eine Übersetzung des MySQL-Referenzhandbuchs, das sich auf dev.mysql.com befindet. Das ursprüngliche Referenzhandbuch ist auf Englisch, und diese Übersetzung ist nicht notwendigerweise so aktuell wie die englische Ausgabe. Das vorliegende deutschsprachige Handbuch behandelt MySQL bis zur Version 5.1.

Zurück |  | Weiter
Kapitel 7. Optimierung | Zum Anfang | Kapitel 9. Sprachstruktur