Frage

Ich habe sieben 1G MySQL binlog Dateien, dass ich verwenden, um einige „verloren“ Informationen abzurufen. Ich brauche nur bestimmte INSERT-Anweisungen aus dem Protokoll zu erhalten (ex., Wo die Anweisung beginnt mit „INSERT INTO Tabelle SET field1 =“). Wenn ich nur ein mysqlbinlog laufen (auch wenn pro Datenbank und mit der Verwendung von --short-Form), habe ich eine Textdatei erhalten, die mehrere hundert Megabyte ist, was es fast unmöglich macht, um dann mit einem anderen Programm zu analysieren.

Gibt es eine Möglichkeit, nur bestimmte SQL-Anweisungen aus dem Protokoll abrufen? Ich brauche keine der Zusatzinformationen (Zeitstempel, autoincrement # s, etc.). Ich brauche nur eine Liste von SQL-Anweisungen, die eine bestimmte Zeichenfolge übereinstimmen. Im Idealfall würde Ich mag eine Textdatei haben, dass nur Listen dieser SQL-Anweisungen, wie zum Beispiel:

INSERT INTO table SET field1='a';
INSERT INTO table SET field1='tommy';
INSERT INTO table SET field1='2';

Das konnte ich erhalten, indem mysqlbinlog in eine Textdatei ausgeführt und die Ergebnisse dann Parsen auf eine Zeichenfolge basiert, aber die Textdatei ist viel zu groß. Es ist einfach mal aus jedem Skript, das ich laufen und sogar macht es unmöglich, in einem Texteditor zu öffnen.

Vielen Dank für Ihre Hilfe im Voraus.

War es hilfreich?

Lösung

ich nie eine Antwort erhalten, aber ich werde Ihnen sagen, was ich von zu bekommen war. 1. Ran mysqlbinlog in eine Textdatei 2. ein PHP-Skript erstellt, das Verwendung fgets jede Zeile des Protokolls zu lesen 3. Während durch jede Zeile Looping, analysiert das Skript es die stristr Funktion 4. Wenn die Linie, die die Zeichenfolge übereinstimmt ich suche, ist es die Zeile in einer Datei protokolliert

Es dauert eine Weile zu laufen mysqlbinlog und den PHP-Skript, aber es nicht mehr mal aus. Ich ursprünglich fread in PHP verwendet, aber das liest die gesamte Datei in den Speicher und verursacht das Skript auf großen (1G) zum Absturz Protokolldateien. Nun dauert es mehrere Minuten zu laufen (ich auch die max_execution_time Variable größer sein), aber es funktioniert wie ein Charme. fgets bekommt eine Zeile zu einer Zeit, so dass es nicht annähernd so viel Speicher in Anspruch nimmt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top