Spec-Zone .ru
спецификации, руководства, описания, API
|
Следующие примеры иллюстрируют, как 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-операторам,
которые генерировали события. Следующие ограничения применяются:
Исходные имена столбцов теряются и заменяются @
, где N
N
номер столбца.
Информация о наборе символов не доступна в двоичном журнале, который влияет на строковый дисплей столбца:
Нет никакого различия, сделанного между соответствующими типами
двоичной и недвоичной строки (BINARY
и CHAR
, VARBINARY
и VARCHAR
, BLOB
и TEXT
). Вывод использует тип данных STRING
для строк фиксированной длины и VARSTRING
для строк переменной
длины.
Для многобайтовых наборов символов максимальное количество байтов на
символ не присутствует в двоичном журнале, таким образом, длина для строковых типов
выводится на экран в байтах, а не в символах. Например, STRING(4)
будет использоваться в качестве типа данных для
значений от любого из этих типов столбца:
CHAR(4) CHARACTER SET latin1CHAR(2) CHARACTER SET ucs2
Из-за хранения форматируют для событий типа UPDATE_ROWS_EVENT
,
UPDATE
операторы выводятся на экран с WHERE
пункт, предшествующий SET
пункт.
Правильная интерпретация событий строки запрашивает информацию от события описания формата в начале двоичного
журнала. Поскольку mysqlbinlog не знает заранее, содержит ли остальная часть
журнала события строки, по умолчанию это выводит на экран событие описания формата, используя a BINLOG
оператор в начальной части вывода.
Если двоичный журнал, как известно, не содержит какие-либо события, требующие a BINLOG
оператор (то есть, никакие события строки), --base64-output=NEVER
опция может использоваться, чтобы препятствовать тому, чтобы
этот заголовок был записан.