Spec-Zone .ru
спецификации, руководства, описания, API

4.6.8.2. Дисплей События Строки mysqlbinlog

Следующие примеры иллюстрируют, как mysqlbinlog выводит на экран события строки, которые определяют модификации данных. Они соответствуют событиям с WRITE_ROWS_EVENT, UPDATE_ROWS_EVENT, и DELETE_ROWS_EVENT введите коды. --base64-output=DECODE-ROWS и --verbose опции могут использоваться, чтобы влиять на вывод события строки.

Предположите, что сервер использует основанное на строке двоичное журналирование и что Вы выполняете следующую последовательность операторов:

CREATE TABLE t(  id   INT NOT NULL,  name VARCHAR(20) NOT NULL,  date DATE NULL) ENGINE = InnoDB;START TRANSACTION;INSERT INTO t VALUES(1, 'apple', NULL);UPDATE t SET name = 'pear', date = '2009-01-01' WHERE id = 1;DELETE FROM t WHERE id = 1;COMMIT;

По умолчанию mysqlbinlog выводит на экран события строки, закодированные как основа 64 строковых использования BINLOG операторы. Опуская посторонние строки, вывод для событий строки, произведенных предыдущей последовательностью оператора, похож на это:

shell> mysqlbinlog log_file...# at 218#080828 15:03:08 server id 1  end_log_pos 258 	Write_rows: table id 17 flags: STMT_END_FBINLOG 'fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ=='/*!*/;...# at 302#080828 15:03:08 server id 1  end_log_pos 356 	Update_rows: table id 17 flags: STMT_END_FBINLOG 'fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP'/*!*/;...# at 400#080828 15:03:08 server id 1  end_log_pos 442 	Delete_rows: table id 17 flags: STMT_END_FBINLOG 'fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP'/*!*/;

Чтобы рассмотреть события строки как комментарии в форме операторов "псевдо-SQL", выполните mysqlbinlog с --verbose или -v опция. Вывод будет содержать начинающиеся строки ###:

shell> mysqlbinlog -v log_file...# at 218#080828 15:03:08 server id 1  end_log_pos 258 	Write_rows: table id 17 flags: STMT_END_FBINLOG 'fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ=='/*!*/;### INSERT INTO test.t### SET###   @1=1###   @2='apple'###   @3=NULL...# at 302#080828 15:03:08 server id 1  end_log_pos 356 	Update_rows: table id 17 flags: STMT_END_FBINLOG 'fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP'/*!*/;### UPDATE test.t### WHERE###   @1=1###   @2='apple'###   @3=NULL### SET###   @1=1###   @2='pear'###   @3='2009:01:01'...# at 400#080828 15:03:08 server id 1  end_log_pos 442 	Delete_rows: table id 17 flags: STMT_END_FBINLOG 'fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP'/*!*/;### DELETE FROM test.t### WHERE###   @1=1###   @2='pear'###   @3='2009:01:01'

Определить --verbose или -v дважды также вывести на экран типы данных и некоторые метаданные для каждого столбца. Вывод будет содержать дополнительный комментарий после каждого изменения столбца:

shell> mysqlbinlog -vv log_file...# at 218#080828 15:03:08 server id 1  end_log_pos 258 	Write_rows: table id 17 flags: STMT_END_FBINLOG 'fAS3SBMBAAAALAAAANoAAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=fAS3SBcBAAAAKAAAAAIBAAAQABEAAAAAAAEAA//8AQAAAAVhcHBsZQ=='/*!*/;### INSERT INTO test.t### SET###   @1=1 /* INT meta=0 nullable=0 is_null=0 */###   @2='apple' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */###   @3=NULL /* VARSTRING(20) meta=0 nullable=1 is_null=1 */...# at 302#080828 15:03:08 server id 1  end_log_pos 356 	Update_rows: table id 17 flags: STMT_END_FBINLOG 'fAS3SBMBAAAALAAAAC4BAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=fAS3SBgBAAAANgAAAGQBAAAQABEAAAAAAAEAA////AEAAAAFYXBwbGX4AQAAAARwZWFyIbIP'/*!*/;### UPDATE test.t### WHERE###   @1=1 /* INT meta=0 nullable=0 is_null=0 */###   @2='apple' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */###   @3=NULL /* VARSTRING(20) meta=0 nullable=1 is_null=1 */### SET###   @1=1 /* INT meta=0 nullable=0 is_null=0 */###   @2='pear' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */###   @3='2009:01:01' /* DATE meta=0 nullable=1 is_null=0 */...# at 400#080828 15:03:08 server id 1  end_log_pos 442 	Delete_rows: table id 17 flags: STMT_END_FBINLOG 'fAS3SBMBAAAALAAAAJABAAAAABEAAAAAAAAABHRlc3QAAXQAAwMPCgIUAAQ=fAS3SBkBAAAAKgAAALoBAAAQABEAAAAAAAEAA//4AQAAAARwZWFyIbIP'/*!*/;### DELETE FROM test.t### WHERE###   @1=1 /* INT meta=0 nullable=0 is_null=0 */###   @2='pear' /* VARSTRING(20) meta=20 nullable=0 is_null=0 */###   @3='2009:01:01' /* DATE meta=0 nullable=1 is_null=0 */

Можно сказать mysqlbinlog подавлять BINLOG операторы для событий строки при использовании --base64-output=DECODE-ROWS опция. Это подобно --base64-output=NEVER но не выходит с ошибкой, если мероприятие строки учреждается. Комбинация --base64-output=DECODE-ROWS и --verbose обеспечивает удобный способ рассмотреть события строки только как SQL-операторы:

shell> mysqlbinlog -v --base64-output=DECODE-ROWS log_file...# at 218#080828 15:03:08 server id 1  end_log_pos 258 	Write_rows: table id 17 flags: STMT_END_F### INSERT INTO test.t### SET###   @1=1###   @2='apple'###   @3=NULL...# at 302#080828 15:03:08 server id 1  end_log_pos 356 	Update_rows: table id 17 flags: STMT_END_F### UPDATE test.t### WHERE###   @1=1###   @2='apple'###   @3=NULL### SET###   @1=1###   @2='pear'###   @3='2009:01:01'...# at 400#080828 15:03:08 server id 1  end_log_pos 442 	Delete_rows: table id 17 flags: STMT_END_F### DELETE FROM test.t### WHERE###   @1=1###   @2='pear'###   @3='2009:01:01'
Отметить

Недопустимо подавить BINLOG операторы, если Вы намереваетесь повторно выполнить вывод mysqlbinlog.

SQL-операторы, произведенные --verbose для строки события намного больше читаемы чем соответствие BINLOG операторы. Однако, они не соответствуют точно исходным SQL-операторам, которые генерировали события. Следующие ограничения применяются:

Правильная интерпретация событий строки запрашивает информацию от события описания формата в начале двоичного журнала. Поскольку mysqlbinlog не знает заранее, содержит ли остальная часть журнала события строки, по умолчанию это выводит на экран событие описания формата, используя a BINLOG оператор в начальной части вывода.

Если двоичный журнал, как известно, не содержит какие-либо события, требующие a BINLOG оператор (то есть, никакие события строки), --base64-output=NEVER опция может использоваться, чтобы препятствовать тому, чтобы этот заголовок был записан.