Registros binarios de MySQL: omita una tabla

9

¿Hay alguna manera de omitir una tabla específica en los registros binarios?

Tengo registros binarios configurados como mi estrategia de copia de seguridad incremental entre las copias de seguridad nocturnas. Pero tenemos una gran tabla de referencia que vamos a actualizar todas las noches de un proceso por lotes (tabla de 70 GB). Esta tabla es de solo lectura y se actualiza todas las noches usando mysqlimport.

Durante el proceso de actualización de esta tabla solo de referencia, los registros binarios están causando un retraso bastante grave (especialmente cuando hago una actualización completa de 70 GB). Tiene que hacer 70GB dos veces básicamente. qué asco.

La tabla de referencia está actualmente usando MyISAM (bloqueé InnoDB tratando de cargarlo, así que probé MyISAM).

David Parks
fuente
¿Es este servidor de base de datos un servidor de base de datos independiente? ¿Es este servidor DB un maestro o un esclavo?
RolandoMySQLDBA

Respuestas:

9

No hay una opción mysql para ignorar una tabla en el registro binario.

Si pudiera mover la tabla a una base de datos separada, podría usar la opción binlog-ignore-db , pero esto tiene sus inconvenientes . Debe comprender cómo MySQL evalúa las reglas de replicación .

Si puede escribir una secuencia de comandos de contenedor para cargar los datos en lugar de mysqlimport (la página de manual dice que es una interfaz de línea de comando para CARGAR DATOS DE FICHEROS), y el usuario con el que está importando los datos puede tener el privilegio SUPER, puede usar la variable de sesión sql_log_bin me gusta:

    SET @@session.sql_log_bin=0;
    LOAD DATA INFILE 'file_name' 
      -- other LOAD DATA INFILE options ;
    SET @@session.sql_log_bin=1;

Esto deshabilitará el registro binario para la sesión actual, cargará los datos y habilitará nuevamente el registro binario.

Redguy
fuente
Deshabilite el registro binario durante el proceso de carga, genial, exactamente lo que estaba buscando, ¡esta es una solución muy viable!
David Parks
3

puedes usar --replicate-ignore-table=db_name.tbl_name

Consulte http://dev.mysql.com/doc/refman/5.1/en/replication-options-slave.html#option_mysqld_replicate-ignore-table para obtener más detalles.

usuario41362
fuente
66
El problema con esto es que replicate-ignore-table es una configuración de esclavo , por lo que el maestro creará un montón de entradas de binlog, se transferirán al esclavo (comiendo ancho de banda / espacio en el proceso), y solo entonces se ignorarán. Sería mucho más eficiente no generar esas entradas en primer lugar.
SVD