
De acuerdo con la documentación, pt-table-checksum es una herramienta para realizar verificaciones de consistencia de replicación en línea al realizar consultas de suma de verificación en el maestro, lo que produce diferentes resultados en las réplicas que son inconsistentes con el maestro.
El maestro y cada esclavo insertan sumas de verificación en él percona.checksums
tabla, y estos se comparan más tarde para las diferencias. Es bastante obvio que las sumas de verificación deben determinarse de forma independiente en cada nodo, por lo que estas inserciones deben replicarse como DECLARACIÓN y no como FILA.. De lo contrario, los esclavos ingresarán solo la misma suma de verificación que el maestro y no la calculadora independiente.
La herramienta solo lo necesita.
binlog_formato=DECLARACIÓN para su propia sesión. Se instala en el maestro, pero cometerá un error si aún no está configurado en cada nodo esclavo. El motivo del error es que la declaración cambió de sesión. binlog_format
será No ser replicado. Así que si un esclavo tiene binlog_format=ROW
entonces el propio esclavo ejecutará la suma de verificación correctamente, pero los resultados se escribirán como una fila. Cualquier esclavo de este esclavo en la cadena ingresará solo el mismo resultado. ver el error 899415.
Esto solo es un problema si tenemos una replicación encadenada, y el error puede omitirse --no-check-binlog-format
así que para configuraciones de replicación simple con replicación ROW o MIXED también podemos usar la herramienta. Si no tenemos una topología de estilo esclavo encadenado, entonces no hay necesidad de preocuparse por eso.
Sin embargo, hay una advertencia que debe tener en cuenta si está utilizando filtros de replicación: cuando un esclavo no está replicando una base de datos en particular debido a binlog-ignore-db
, este parámetro se comporta de manera diferente con la replicación basada en ROW (RBR) frente a la basada en STATEMENT.
Perú documentación, con RBR,
omitirá todas las actualizaciones de prueba.*. Con la replicación basada en STATEMENT, activará todas las actualizaciones posteriores
USU prueba_base_de_datos; para ser ignorado (independientemente de dónde se escribieron las actualizaciones).
pt-table-checksum funciona de la siguiente manera:
use `prueba` /*!*/; ESTABLECER MARCA DE TIEMPO = 1541583280 / *! * /; REEMPLAZAR EN `percona`.`checksums` (db, tbl, chunk, chunk_index, lower_boundary, upper_boundary, this_cnt, this_crc) SELECCIONE ‘test’, ‘test’, ‘1’, NULL, NULL, NULL, COUNT
AS cnt, COALESCE (LOWER (CONV (BIT_XOR (CAST (CRC32 (CONCAT_WS (‘#’, `id`, CONCAT (ISNULL (` id`)))) AS AS UNSIGNED)), 10, 16)), 0) AS crc FROM `testing`.`testing` / * tabla de suma de comprobación * / usar`prueba`/ *!* / ; COLOCARMARCA DE TIEMPO=1541583280/ *!* / ; REEMPLAZAR EN`percona`.`sumas de control `(base de datos ,problema ,pieza ,índice_trozo ,límite inferior ,limite superior ,este_cnt ,stu_crc ) SELECCIONE‘prueba‘,’prueba‘,’1‘, NULO, NULO, NULO, CUENTA |
COMO cnt, COALESCE (INFERIOR (CONV (BIT_XOR (CAST (CRC32 (CONCAT_WS (‘)) use testing
# ‘, `id`, CONCAT (ISNULL (` id`)))) COMO SIN FIRMAR)), 10, 16)), 0) AS crc FROM `testing`.`testing` / * tabla de suma de comprobación * / percona.checksums
Debido a
el esclavo omitirá estas declaraciones sin error, y simplemente no escribirá
.
Según la documentación:
La herramienta monitorea continuamente las réplicas. Si una réplica está demasiado lejos en la replicación, pt-table-checksum se detiene para permitir la recuperación. Si cada replicación falla, o la replicación se detiene, pt-table-checksum se detiene y espera.
En este caso, verá que la herramienta espera continuamente, con el siguiente resultado de depuración: # pt_table_checksum: 12398 10967 SELECCIONE MAX (fragmento) DESDE `percona`.`checksums` WHERE db = ‘testing’ AND tbl = ‘testing’ AND master_crc NO ES NULO # pt_table_checksum: 12416 10967 10967 slave19 checksum 1:19 checksum on slave19 19 1971 Slave1 Max Chunk: Undef # pt_table_checksum: 12472 10967 Pt_table_checks1 Maxe 10967 Sleek1. Pt_table_Checks Obtenga la última suma de verificación en slave1 # pt_table_checksum: 12419 10967 slave1 max chunk: undef # pt_table_checksum: 12398 10967 SELECCIONE MAX (fragmento) DESDE `percona`.`checksums` DONDE db = ‘testing’ Y tbl = ‘testing’ Y master_crc NO ES NULO # pt_table_checksum: 12416 10967 Obtenga la última suma de verificación en el esclavo1 # pt_table_checksum: 12419 10967 fragmento máximo esclavo1: undef # pt_table_checksum: 12472 10967 Dormir 0.25 esperando piezas # pt_table_checksum: 12416 10967 Obtenga la última suma de verificación en el esclavo1 # pt_table_checksum: 12419 10967 fragmento máximo esclavo1: undef # pt_table_checksum: 12472 10967 Dormir 0.5 esperando piezas |
# pt_table_checksum: 12416 10967 Obtenga la última suma de verificación en el esclavo1 --no-check-replication-filters
# pt_table_checksum: 12419 10967 fragmento máximo esclavo1: undef
No recomendamos usar la herramienta con filtros de replicación en su lugar, pero sí
se especifica que debe tener en cuenta las diferencias en la forma en que los diferentes formatos binlog manejan estos filtros.
Un reemplazo serio
Con lo siguiente ignorado, simplemente escriba en esa base de datos:binlog-wild-ignore-table = test.%binlog–salvaje–ignorar–mesa=prueba |
.
%
Más recursos
La última versión de Percona Toolkit se puede descargar desde nuestro sitio web. Todo el software de Percona es de código abierto y gratuito.
Foto de Hielo negro por Pexels