Вопрос

У меня есть бинлоги MySQL для репликации через GTID.

Я пытаюсь показать выполненные операторы обновления/вставки следующим образом:

mysqlbinlog --base64-output=DECODE-ROWS mysql-bin.000024

Но все, что я вижу, это что-то вроде этого, никаких следов обновления или вставки stmt:

SET TIMESTAMP=1431681617/*!*/;
BEGIN
/*!*/;
# at 746987321
# at 746987392
# at 746987484
#150515 11:20:17 server id 1  end_log_pos 746987515 CRC32 0xeb874754    Xid = 997501767
COMMIT/*!*/;
# at 746987515
#150515 11:20:22 server id 1  end_log_pos 746987563 CRC32 0xc5ece64a    GTID [commit=yes]
SET @@SESSION.GTID_NEXT= 'a4ade293-c63a-11e4-94cf-005056944a56:2059057'/*!*/;
# at 746987563
#150515 11:20:22 server id 1  end_log_pos 746987650 CRC32 0x92296355    Query   thread_id=71622 exec_time=0 error_code=0

Я не уверен в формате/конфигурации репликации GTID и где ее искать...

Это было полезно?

Решение

Кажется, что опция - должна быть добавлена опция:

mysqlbinlog  --base64-output=AUTO --verbose mysql-bin.000005 
.

В результате вы видите:

### UPDATE `customer`
### WHERE
###   @1=388442
###   @2=382023
###   @3='2015:05:30'
###   @4='2015:06:02'
###   @5=3
###   @6=1
###   @7=0
.

@x - столбцы таблицы в своем порядке

Другие советы

Я не думаю, что GTID — твоя проблема.

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

Чтобы убедиться в этом, выполните одно из следующих действий:

SELECT @@global.binlog_format;
SHOW GLOBAL VARIABLES LIKE 'binlog_format';
SELECT variable_value FROM information_schema.global_variables
WHERE variable_name='binlog_format';

Вы либо увидите ROW или MIXED.Единственный способ увидеть SQL — вам придется установить binlog_format к STATEMENT в my.cnf и перезапустите mysqld, поскольку документация MySQL на Репликация с глобальными идентификаторами транзакций в первом абзаце сказано:

Вы можете использовать репликацию на основе операторов или на основе строк с GTID (см. Раздел 17.1.2, «Форматы репликации»);однако для достижения наилучших результатов мы рекомендуем использовать формат на основе строк.

Тем не менее, вы не увидите настоящий SQL с заданными двоичными журналами.

Попробуйте этот инструмент binlog2sql , он анализирует журнал BIN для обновления / вставки операторов.


Его описание использования на китайском, но я верю, что вы можете получить точку от примерной команды.

Я предпочитаю использовать

mysqlbinlog -v --base64-output=DECODE-ROWS /files/
.

Потому что:

    .
  • "Если дана опция NO - Base64-выхода, эффект такой же, как --base64-optep= auto"
  • "Комбинация --base64-вывод= декодирует rows и --verbose обеспечивает удобный способ увидеть события строки только в виде операторов SQL" (это сбрасывает регламенты Binlog)

"Укажите --verbose или -V дважды, чтобы также отображать типы данных и некоторые метаданные для каждого столбца."

Источник кавычек: MAN MYSQLBINLOG

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top