2010-06-02 9 views
32

Quiero ejecutar una importación de un archivo grande en MySQL. Sin embargo, no quiero que se escriba en el registro binario, porque la importación llevará mucho tiempo y hará que los esclavos se retrasen. Prefiero ejecutarlo por separado en los esclavos, después del hecho, porque será mucho más fácil para el sistema. La tabla en cuestión es nueva y, por lo tanto, no tengo que preocuparme de que se desincronice, ya que el maestro y todos los esclavos tendrán los mismos datos al final, porque todos importarán el mismo archivo. finalmente. Tampoco quiero cambiar ninguna de las opciones de replicate-ignore- * o binlog_ignore- *, ya que requieren el reinicio de los servidores en cuestión. ¿Hay alguna forma de ejecutar una sola consulta sin escribirla en el registro binario?¿Cómo ejecuto una consulta en MYSQL sin escribirla en el registro binario?

Ya sé la respuesta, pero no pude encontrarla muy fácilmente en la red, así que dejo que alguien publique la respuesta para obtener algunos puntos de representante. Si no hay respuestas en blanco, publicaré la respuesta que encontré.

Respuesta

49

Puede usar la variable de sesión sql-log-bin para desactivar el registro de la sesión actual. Simplemente ingrese:

SET sql_log_bin = 0; 

y todas las consultas en su sesión actual no se enviarán al registro binario. Si desea activar el registro binario de nuevo, ejecute:.

SET sql_log_bin = 1; 

Esto es sólo para la sesión actualmente en ejecución se encuentra en todas las otras preguntas de todas las demás conexiones todavía continua que estar conectado. Además, debe tener privilegios SUPER para que esto funcione.

+1

¿Esto funcionaría si estuviera haciendo esto en la línea de comandos? 'mysqldump mydb | mysql -h remote.host.com remote_db' – vinhboy

+0

Sí, el punto principal debería ser en una sesión de mysql. Si vuelve a conectar es una sesión diferente. –

+0

Tiene que anteponer el comando a la salida de mysqldump. Me gusta 'echo" SET sql_log_bin = 0; "& mysqldump mydb | mysql -h remote.host.com remote_db' No estoy seguro de que sea la sintaxis correcta para anteponer la picadura, pero puede comenzar desde aquí. –

17

Si usted quiere hacer esto desde la línea de comandos, intente esto, que trabajó para mí:

$ mysqldump old_DB | mysql --init-command="SET SQL_LOG_BIN = 0;" new_DB 

posible que se añadió el parámetro "init-comando" en una nueva versión de MySQL.

Cuestiones relacionadas