Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Abilitazione dell'annotazione del log binario MariadB
In un'istanza di MariaDB DB, puoi utilizzare Annotate_rows
l'evento per annotare un evento row con una copia della query che ha causato SQL l'evento row. Questo approccio offre funzionalità simili all'abilitazione del binlog_rows_query_log_events
parametro su un'istanza RDS for My SQL DB.
Puoi abilitare le annotazioni di log binarie a livello globale creando un gruppo di parametri personalizzati e impostando il parametro binlog_annotate_row_events
su 1
. Puoi anche abilitare le annotazioni a livello di sessione richiamando SET SESSION binlog_annotate_row_events = 1
. Usa replicate_annotate_row_events
per replicare le annotazioni di log binario all'istanza di replica se la registrazione binaria è abilitata. Non sono necessari privilegi speciali per usare queste impostazioni.
Di seguito è illustrato un esempio di transazione basata su riga in MariaDB. L'uso della registrazione basata su riga viene attivato impostando il livello di isolamento delle transazioni su read-committed.
CREATE DATABASE IF NOT EXISTS test; USE test; CREATE TABLE square(x INT PRIMARY KEY, y INT NOT NULL) ENGINE = InnoDB; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; BEGIN INSERT INTO square(x, y) VALUES(5, 5 * 5); COMMIT;
Senza annotazioni, le voci del log binario per la transazione appaiono nel modo seguente:
BEGIN /*!*/; # at 1163 # at 1209 #150922 7:55:57 server id 1855786460 end_log_pos 1209 Table_map: `test`.`square` mapped to number 76 #150922 7:55:57 server id 1855786460 end_log_pos 1247 Write_rows: table id 76 flags: STMT_END_F ### INSERT INTO `test`.`square` ### SET ### @1=5 ### @2=25 # at 1247 #150922 7:56:01 server id 1855786460 end_log_pos 1274 Xid = 62 COMMIT/*!*/;
La seguente istruzione abilita le annotazioni a livello di sessione per questa stessa transazione e le disabilita dopo aver eseguito la transazione:
CREATE DATABASE IF NOT EXISTS test; USE test; CREATE TABLE square(x INT PRIMARY KEY, y INT NOT NULL) ENGINE = InnoDB; SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED; SET SESSION binlog_annotate_row_events = 1; BEGIN; INSERT INTO square(x, y) VALUES(5, 5 * 5); COMMIT; SET SESSION binlog_annotate_row_events = 0;
Con le annotazioni, le voci del log binario per la transazione appaiono nel modo seguente:
BEGIN /*!*/; # at 423 # at 483 # at 529 #150922 8:04:24 server id 1855786460 end_log_pos 483 Annotate_rows: #Q> INSERT INTO square(x, y) VALUES(5, 5 * 5) #150922 8:04:24 server id 1855786460 end_log_pos 529 Table_map: `test`.`square` mapped to number 76 #150922 8:04:24 server id 1855786460 end_log_pos 567 Write_rows: table id 76 flags: STMT_END_F ### INSERT INTO `test`.`square` ### SET ### @1=5 ### @2=25 # at 567 #150922 8:04:26 server id 1855786460 end_log_pos 594 Xid = 88 COMMIT/*!*/;