Die Speicher-Engine BLACKHOLE
ist wie ein
„Schwarzes Loch“, das Daten zwar entgegennimmt, aber
nicht speichert. Anfragen geben immer eine leere Ergebnismenge
zurück:
mysql>CREATE TABLE test(i INT, c CHAR(10)) ENGINE = BLACKHOLE;
Query OK, 0 rows affected (0.03 sec) mysql>INSERT INTO test VALUES(1,'record one'),(2,'record two');
Query OK, 2 rows affected (0.00 sec) Records: 2 Duplicates: 0 Warnings: 0 mysql>SELECT * FROM test;
Empty set (0.00 sec)
Die Speicher-Engine BLACKHOLE
ist in MySQL-Max-
Binärdistributionen enthalten. Wenn Sie MySQL von einer
Quelldistribution bauen, können Sie sie aktivieren, indem Sie
configure mit der Option
--with-blackhole-storage-engine
aufrufen.
Die Quelle für die BLACKHOLE
-Engine finden Sie
im Verzeichnis sql
einer MySQL-
Quelldistribution.
Wenn Sie eine BLACKHOLE
-Tabelle anlegen,
erstellt der Server eine Tabellen-Formatdatei im
Datenbankverzeichnis. Die Datei beginnt mit dem Tabellennamen und
hat die Erweiterung .frm
. Andere Dateien
werden mit der Tabelle nicht verknüpft.
Die BLACKHOLE
-Speicher-Engine unterstützt alle
Arten von Indizes. Das bedeutet, dass Sie Indexdeklarationen in
die Tabellendefinition aufnehmen können.
Ob BLACKHOLE
zur Verfügung steht, prüfen Sie
mit folgender Anweisung:
mysql> SHOW VARIABLES LIKE 'have_blackhole_engine';
Bei Einfügungen in eine BLACKHOLE
-Tabelle
werden keine Daten gespeichert, doch wenn das Binärlog aktiviert
ist, werden die SQL-Anweisungen protokolliert (und auf die
Slaveserver repliziert). Das kann als Wiederholungs- oder
Filtermechanismus ganz nützlich sein. Nehmen wir zum Beispiel an,
Ihre Anwendung benötigt Filterregeln auf der Slave-Seite, aber
eine Übertragung sämtlicher Logdaten auf den Slave würde zu
viel Traffic verursachen. In solchen Fällen kann auf dem
Master-Host ein „Dummy“-Slave-Prozess mit
BLACKHOLE
als Speicher-Engine eingerichtet
werden:
Der Master schreibt in sein Binärlog und der als Slave
fungierende „Dummy“-mysqld-Prozess
wendet die gewünschte Kombination von
replicate-do-*
- und
replicate-ignore-*
-Regeln an und schreibt ein
eigenes gefiltertes Binärlog. (Siehe
Abschnitt 6.9, „Replikationsoptionen in my.cnf“.) Dieses gefilterte Log wird
dann dem Slave zur Verfügung gestellt.
Da der Dummy-Prozess selbst gar keine Daten speichert, entsteht durch den zusätzlichen mysqld-Prozess auf dem Replikations-Master-Host kaum Verarbeitungs-Overhead. Dieser Mechanismus kann mit weiteren Replikations-Slaves wiederholt werden.
Andere mögliche Einsatzgebiete für BLACKHOLE
sind:
Syntaxprüfung für Dump-Dateien.
Sie können den Overhead für Binärlogs messen, indem Sie die
Performance eines BLACKHOLE
s mit und ohne
Binärlog vergleichen.
Da BLACKHOLE
im Grunde eine
„leere“ Speicher-Engine ist, könnte sie
eingesetzt werden, um Leistungsengpässe ausfindig zu machen,
die nicht mit der Speicher-Engine selbst zusammenhängen.
Seit MySQL 5.1.4 kann die BLACKHOLE
-Engine mit
Transaktionen umgehen, und zwar in dem Sinne, dass sie bestätigte
Transaktionen in das Binärlog schreibt und zurückgerollte nicht.
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.