Question

J'ai sept 1G MySQL binlog les fichiers que je dois utiliser pour récupérer de la "perte" de l'information.J'ai seulement besoin d'obtenir certains états d'INSERTION à partir du journal (ex.lorsque la déclaration commence par "INSERT INTO table SET champ1=").Si je viens de lancer un mysqlbinlog (même si par la base de données et avec l'aide de --à court de forme), j'obtiens un fichier texte qui est à plusieurs centaines de méga-octets, ce qui le rend presque impossible à analyser ensuite avec n'importe quel autre programme.

Est-il un moyen de le récupérer certaines instructions sql à partir du journal?Je n'ai pas besoin de toutes les informations annexes (horodateurs, autoincrement #s, etc.).J'ai juste besoin d'une liste d'instructions sql qui correspondent à une certaine chaîne de caractères.Idéalement, je voudrais avoir un fichier texte qui vient des listes de ces instructions sql, tels que:

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

J'ai pu obtenir que par l'exécution de mysqlbinlog dans un fichier texte puis analyser les résultats basés sur une chaîne, mais le fichier texte est trop grand.Il vient de fois tout script I run et il est même possible de l'ouvrir dans un éditeur de texte.

Merci pour votre aide à l'avance.

Était-ce utile?

La solution

Je n'ai jamais reçu une réponse, mais je vais vous dire ce que j'ai fait pour s'en sortir.1.Couru mysqlbinlog à un fichier de texte 2.Créé un script PHP qui utilise fgets pour lire chaque ligne du journal 3.Tout en parcourant chaque ligne, le script analyse à l'aide de la fonction stristr 4.Si la ligne correspond à la chaîne, je suis à la recherche d', il se connecte à la ligne dans un fichier

Il faut du temps pour exécuter mysqlbinlog et le script PHP, mais il n'est plus temps.J'ai d'abord utilisé fread en PHP, mais qui lit tout le fichier en mémoire et a causé le script crash sur grand (1G) les fichiers journaux.Maintenant, il faut plusieurs minutes pour s'exécuter (j'ai aussi mis le max_execution_time variable pour être plus), mais il fonctionne comme un charme.fgets obtient une ligne à la fois, afin de ne pas prendre presque autant de mémoire.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top