Pregunta

tengo siete archivos 1G MySQL binlog que tengo que usar para recuperar algo de información "perdida". Sólo necesito para obtener ciertos comandos INSERT desde el registro (ej. Cuando la declaración comienza con "INSERT INTO tabla SET campo1 ="). Si tan sólo ejecutar un mysqlbinlog (aunque por base de datos y con el uso de --short-forma), aparece un archivo de texto que es de varios cientos de megabytes, lo que hace que sea casi imposible de analizar a continuación, con cualquier otro programa.

¿Hay una manera de simplemente recuperar ciertas sentencias SQL desde el registro? No necesito ninguna de la información auxiliar (marcas de tiempo, #s autoincrement, etc.). Sólo necesito una lista de sentencias SQL que responden a una determinada cadena. Idealmente, me gustaría tener un archivo de texto que sólo se enumeran los comandos SQL, tales como:

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

que podría conseguir que mediante la ejecución de mysqlbinlog a un archivo de texto y luego analizar los resultados basados ??en una cadena, pero el archivo de texto es demasiado grande. Es sólo el tiempo de espera cualquier secuencia de comandos corro e incluso hace que sea imposible abrir en un editor de texto.

Gracias por su ayuda de antemano.

¿Fue útil?

Solución

Nunca recibió una respuesta, pero yo le dirá lo que hice para salir adelante. 1. Ran mysqlbinlog a un archivo de texto 2. Creado Un script PHP que utiliza fgets para leer cada línea del registro 3. Mientras bucle a través de cada línea, el guión lo analiza utilizando la función stristr 4. Si la línea coincide con la cadena Busco, registra la línea en un archivo

Se toma un tiempo de ejecución mysqlbinlog y el script PHP, pero ya no el tiempo de espera. He utilizado originalmente fread en PHP, pero que lee el archivo en la memoria y causó la secuencia de comandos se bloquee en grande (1G) los archivos de registro. Ahora, se tarda varios minutos en ejecutarse (Asimismo, establecer la variable max_execution_time a ser más grandes), pero funciona como un encanto. fgets obtiene una línea a la vez, por lo que no ocupa casi la misma cantidad de memoria.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top