ВЫБРАТЬ запросы в MySQL binary_log
Я пытаюсь проверить историю базы данных. Для этого мне нужно регистрировать и анализировать доступ на чтение и запись к базе данных.
Я знаю, что MySQL в основном предлагает два типа журналов - general query log
а также binary log
, Общий журнал запросов мне не помогает, так как он не регистрирует конечные метки времени. Wheresas, бинарный журнал идеально подходит для моей работы, но он не регистрирует доступ на чтение, т.е. SELECT
запросы.
Поэтому я хочу знать, существует ли способ принудительного бинарного ведения журнала, чтобы он также записывал немодифицирующие запросы.
1 ответ
Двоичный журнал записывает только изменения данных или метаданных. Нет возможности сделать так, чтобы это регистрировало запросы SELECT.
Вы пропустили журнал медленных запросов MySQL, в котором записывается метка времени и продолжительность запроса. Вы можете сделать медленный журнал запросов включающим все запросы, установив long_query_time=0
так что он регистрирует все запросы, которые занимают 0 секунд или более (то есть все они).
Быть осторожен! В типичной системе количество запросов SELECT намного больше, чем количество других запросов. Ваши журналы могут расти очень быстро. Обязательно настройте ротацию логов, иначе вы будете заполнять свой диск.
Кроме этого, похоже, что вам нужен журнал аудита. См. https://dev.mysql.com/doc/refman/5.7/en/audit-log.html для подключаемого модуля журнала аудита MySQL Enterprise (для этого требуется подписка на поддержку от Oracle).
Существует как минимум пара реализаций плагинов журнала аудита для MySQL. Например: https://www.percona.com/doc/percona-server/LATEST/management/audit_log_plugin.html