Как перечислить инструкции DDL (СОЗДАТЬ, ИЗМЕНИТЬ, УДАЛИТЬ), обработанные за период времени, когда был записан общий журнал?

#mysql #ddl

Вопрос:

Как перечислить инструкции DDL (СОЗДАТЬ, ИЗМЕНИТЬ, УДАЛИТЬ), обработанные за период времени, когда был записан общий журнал?

Ответ №1:

Я смог использовать pt-query-digest (бесплатный инструмент командной строки, часть инструментария Percona) таким образом:

 pt-query-digest --type genlog --no-report --output slowlog   --filter '$event-gt;{fingerprint} =~ /^create|alter|drop/'   /usr/local/var/mysql/bkarwin.log  

Выход:

 # Time: 2021-11-18T16:16:53.452721Z # Thread_id: 24 # Query_time: 0.000000 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 create table foo (i int); # Time: 2021-11-18T16:16:54.805065Z # Thread_id: 24 # Query_time: 0.000000 Lock_time: 0.000000 Rows_sent: 0 Rows_examined: 0 drop table foo;  

Эти два оператора являются просто тестовыми операторами DDL, которые я запустил после включения общего журнала запросов в моем экземпляре MySQL на локальном хосте.

Инструмент pt-query-digest также имеет опции для ограничения диапазона дат --since и --until . Но я получил ошибку, когда попробовал это сделать. Похоже, у него были проблемы с форматом даты.

Процесс конвейера 5 (с) вызвал ошибку: аргумент «2021-11-18T16:16:53.452721 Z» не является числовым в числовом ge (gt;=) в /usr/local/bin/pt-строка дайджеста запроса 13660, gt;lt;$fhgt; строка 2.

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