Kapitel 8. Client- und Hilfsprogramme

Inhaltsverzeichnis

8.1. Überblick über Client- und Hilfsprogramme
8.2. myisamchk — Hilfsprogramm für die Tabellenwartung von MyISAM
8.2.1. Allgemeine Optionen für myisamchk
8.2.2. Prüfoptionen für myisamchk
8.2.3. Reparaturoptionen für myisamchk
8.2.4. Weitere Optionen für myisamchk
8.2.5. Speicherbenutzung von myisamchk
8.3. myisamlog — Anzeige von MyISAM-Logdateiinhalten
8.4. myisampack — Erzeugung komprimierter, schreibgeschützter MyISAM Tabellen
8.5. mysql — Das MySQL-Befehlszeilenwerkzeug mysql
8.5.1. mysql Optionen
8.5.2. mysql-Befehle
8.5.3. Wie SQL-Befehle aus einer Textdatei geladen werden
8.5.4. mysql: Tipps
8.6. mysqlaccess — Client für die Überprüfung von Zugriffsberechtigungen
8.7. mysqladmin — Client für die Verwaltung eines MySQL Servers
8.8. mysqlbinlog — Hilfsprogramm für die Verarbeitung binärer Logdateien
8.9. mysqlcheck — Hilfsprogramm für die Wartung und Reparatur von Tabellen
8.10. mysqldump — Programm zur Datensicherung
8.11. mysqlhotcopy — Backup-Programm für Datenbanken
8.12. mysqlimport — Programm zum Datenimport
8.13. mysqlshow — Anzeige von Informationen über Datenbanken, Tabellen und Spalten
8.14. mysqlslap — Client zur Lastemulation
8.15. mysql_zap — Prozesse beenden, die einem Muster entsprechen
8.16. perror — Erklärung der Fehlercodes
8.17. replace — Hilfsprogramm für String-Ersetzungen

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:

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_PORTdie vorgabeseitige Unix-Socketdatei. Sie wird für Verbindungen mit localhost verwendet.
MYSQL_TCP_PORTdie Standardportnummer. Wird für TCP/IP-Verbindungen verwendet.
MYSQL_PWDdas Standardpasswort.
MYSQL_DEBUGgibt Trace-Optionen für das Debuggen an.
TMPDIRVerzeichnis, 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:

VariableStandardwert
decode_bits9
ft_max_word_lenversionsspezifisch
ft_min_word_len4
ft_stopword_fileintegrierte Liste
key_buffer_size523264
myisam_block_size1024
read_buffer_size262136
sort_buffer_size2097144
sort_key_blocks16
stats_methodnulls_unequal
write_buffer_size262136

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:

OptionBeschreibung
\vServerversion
\dStandarddatenbank
\hServerhost
\paktuelle TCP/IP-Port bzw. aktuelle Socketdatei
\uIhr Benutzername
\UIhr vollständiger user_name@host_name-Kontenname
\\literales ‘\’-Backslash-Zeichen
\nZeilenwechselzeichen
\tTabulatorzeichen
\ Leerzeichen (folgt dem Backslash)
\_Leerzeichen
\Raktuelle Uhrzeit im 24-Stunden-Format (0 - 23)
\raktuelle Uhrzeit im 12-Stunden-Format (1 - 12)
\mMinuten der aktuellen Uhrzeit
\yaktuelles Jahr (zweistellig)
\Yaktuelles Jahr (vierstellig)
\Daktuelles vollständiges Datum
\sSekunden der aktuellen Uhrzeit
\waktueller Wochentag, angegeben mit drei Buchstaben („Mon“, „Tue“ usw.)
\PAM/PM
\oaktueller Monat im numerischen Format
\Oaktueller Monat, angegeben mit drei Buchstaben („Jan“, „Feb“ usw.)
\cZähler, der bei jeder von Ihnen abgesetzten Anweisung hochgezählt wird
\SSemikolon
\'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:NameBedeutung
    00UNKNOWN_EVENTDieses Ereignis sollte keinesfalls im Log vorhanden sein.
    01START_EVENT_V3Zeigt den Anfang einer Logdatei an, die von MySQL 4 oder früher geschrieben wurde.
    02QUERY_EVENTDer häufigste Ereignistyp. Er bezeichnet Anweisungen, die auf dem Master-Server ausgeführt wurden.
    03STOP_EVENTGibt an, dass der Master beendet wurde.
    04ROTATE_EVENTWird geschrieben, wenn der Master eine neue Logdatei eröffnet.
    05INTVAR_EVENTWird hauptsächlich für AUTO_INCREMENT-Werte und in Situationen verwendet, in denen die LAST_INSERT_ID()-Funktion in der Anweisung verwendet wird.
    06LOAD_EVENTWird für LOAD DATA INFILE in MySQL 3.23 verwendet.
    07SLAVE_EVENTFür zukünftige Verwendung reserviert.
    08CREATE_FILE_EVENTWird 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.
    09APPEND_BLOCK_EVENTEnthält Daten, die in einer LOAD DATA INFILE-Anweisung verwendet werden. Die Daten werden in einer Temporärdatei auf dem Slave gespeichert.
    0aEXEC_LOAD_EVENTWird 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.
    0bDELETE_FILE_EVENTRollback einer LOAD DATA INFILE-Anweisung. Die Temporärdatei auf dem Slave sollte gelöscht werden.
    0cNEW_LOAD_EVENTWird für LOAD DATA INFILE in MySQL 4 und früher verwendet.
    0dRAND_EVENTWird für den Versand von Informationen zu Zufallswerten benutzt, wenn die Funktion RAND() in der Anweisung verwendet wird.
    0eUSER_VAR_EVENTDient der Replikation von Benutzervariablen.
    0fFORMAT_DESCRIPTION_EVENTZeigt den Anfang einer Logdatei an, die von MySQL 5 oder später geschrieben wurde.
    10XID_EVENTEreignis, welches das Schreiben einer XA-Transaktion anzeigt.
    11BEGIN_LOAD_QUERY_EVENTWird für LOAD DATA INFILE-Anweisungen in MySQL 5 und höher verwendet.
    12EXECUTE_LOAD_QUERY_EVENTWird für LOAD DATA INFILE-Anweisungen in MySQL 5 und höher verwendet.
    13TABLE_MAP_EVENTFür zukünftige Verwendung reserviert.
    14WRITE_ROWS_EVENTFür zukünftige Verwendung reserviert.
    15UPDATE_ROWS_EVENTFür zukünftige Verwendung reserviert.
    16DELETE_ROWS_EVENTFü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.

    FlagNameBedeutung
    01LOG_EVENT_BINLOG_IN_USE_FLogdatei 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.
    04LOG_EVENT_THREAD_SPECIFIC_FIst 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.
    08LOG_EVENT_SUPPRESS_USE_FWird 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:

mysqlrepairDie Standardoption ist --repair.
mysqlanalyzeDie Standardoption ist --analyze.
mysqloptimizeDie 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_namesql-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, -ppassword

    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.