Binlog Event Checksum Interoperability

Stai visualizzando una vecchia versione di questo article. Visualizza la versione più recente.

L'introduzione dei checksums degli eventi del log binario modifica il formato degli eventi che sono registrati nel file del log binario e inviati agli slave via rete. Questo solleva la questione su cosa accade quando si replica attraverso versioni diverse del server, dove uno dei server è una nuova versione in cui il checksum degli eventi è stato implementato, mentre l'altro è una versione più vecchia che non sa nulla di questi checksum.

Note: This page describes features in the source repository for MariaDB 5.3

There are currently no official packages or binaries available for download which contain the features. If you want to try out any of the new features described here you will need to get and compile the code yourself.

Quando i checksum sono disabilitati sul master (o il master ha una vecchia versione, senza i checksum), non ci sono problemi. In questo caso il formato del log binario è compatibile all'indietro e la replica funziona bene.

Quando il master è una versione più recente, con i checksum degli eventi abilitati, ma lo slave è una versione più vecchia, la replica non funzione. Il master disconnette lo slave con un errore e registra un warning nel suo log degli errori. In questo modo si evita di inviare gli eventi a uno slave che non è in grado di gestirli, ma bisogna notare che i checksum non funzionano con i vecchi slave. Con il percorso di upgrade raccomandato, dove gli slave vengono aggiornati prima dei master, non ci sono problemi.

La replica da un nuovo master MySQL con i checksum abilitati a un MariaDB con i checksum abilitati funziona, e lo slave MariaDB verifica i checksum sugli eventi replicati.

Vi è però un problema quando uno slave MySQL recente replica su un master MariaDB ancora più recente con i checksum abilitati. Lo slave controlla la versione del master per sapere se gli eventi comprendono i checksum o meno, e MySQL non sa ancora che MariaDB svolge questa operazione già dalla versione 5.3.0 (al momento della stesura di questo articolo, MySQL 5.6.2). Perciò, se MariaDB ha una versione da 5.3.0 in avanti ma meno di 5.6.1, e viene usato come master con i checksum abilitati, uno slave MySQL non interpreta correttamente gli eventi che riceve. La replica quindi fallisce con un errore che dice che ci sono eventi corrotti, o addirittura nel peggiore dei casi i dati replicati vengono corrotti. Per risolvere questo problema sono necessarie modifiche a MySQL.

Ecco una tabella riassuntiva dello stato della replica tra diverse combinazioni di master e slave, e di checksum abilitati/disabilitati:

  • OLD: MySQL <5.6.1 o MariaDB < 5.3.0 senza checksum
  • NEW-MARIA: MariaDB >= 5.3.0 con i checksum
  • NEW-MYSQL: MySQL >= 5.6.1 con i checksum
Master mysqlbinlogSlave / enabled?ChecksumsStatus
OLDOLD-Ok
OLDNEW-MARIA-Ok
OLDMYSQL-Ok
NEW-MARIAOLDNoOk
NEW-MARIAOLDYesMaster produce errore
NEW-MARIANEW-MARIAYes/NoOk
NEW-MARIANEW-MYSQLNoOk
NEW-MARIANEW-MYSQLYesFallisce. Richiede modifiche a MySQL, altrimenti non capisce che MariaDB < 5.6.1 esegue i checksum.
NEW-MYSQLOLDNoOk
NEW-MYSQLOLDYesMaster produce errore
NEW-MYSQLNEW-MARIAYes/NoOk
NEW-MYSQLNEW-MYSQLYes/NoOk

Checksums and mysqlbinlog

When using the mysqlbinlog client program, there are similar issues.

A version of mysqlbinlog which understands checksums can read binlog files from either old or new servers, with or without checksums enabled.

An old version of mysqlbinlog can read binlog files produced by a new server version if checksums were disabled when the log was produced. Old versions of mysqlbinlog reading a new binlog file containing checksums will be confused, and output will be garbled, with the added checksums being interpreted as extra garbage at the end of query strings and similar entries. No error will be reported in this case, just wrong output.

A version of mysqlbinlog from MySQL >= 5.6.1 will have similar problems as a slave until this is fixed in MySQL. When reading a binlog file with checksums produced by MariaDB >= 5.3.0 but < 5.6.1, it will not realise that checksums are included, and will produce garbled output just like an old version of mysqlbinlog. The MariaDB version of mysqlbinlog can read binlog files produced by either MySQL or MariaDB just fine.

See Also

Commenti

Sto caricando i commenti......
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.