Отслеживайте все изменения DML / DDL БД в таблице журнала, используя триггер в Mysql

mysql triggers audit

1628 просмотра

1 ответ

18 Репутация автора

Я хотел бы отслеживать все изменения БД, происходящие на конкретной БД, используя одну таблицу журналов.

Я проверил много решений, но все они дают одну таблицу аудита для каждой таблицы в БД. Как мы можем отслеживать их в одной таблице с помощью триггера?

Столбцы таблицы могут иметь вид:

  id - primary key
  db_name -- DB Name
  version, -- Ignore it(i have a column in my table)
  event_type, -- DDL/DML command name
  object_name, -- Table/Procedure/Trigger/Function name which is changed
  object_type, -- TYpe like table,procedure,trigger
  sql_command, -- query executed by user
  username, -- who executed it
  updated_on -- timestamp

Заранее спасибо.

Автор: Arul Источник Размещён: 18.07.2016 11:13

Ответы (1)


1 плюс

7131 Репутация автора

Триггер, который вызывается при выполнении команд ddl (чтобы вы могли их регистрировать), не существует в mysql. Но вы можете использовать файлы журналов , особенно общий журнал запросов :

Общий журнал запросов - это общая запись того, что делает mysqld. Сервер записывает информацию в этот журнал, когда клиенты подключаются или отключаются, и регистрирует каждый оператор SQL, полученный от клиентов. Общий журнал запросов может быть очень полезен, когда вы подозреваете ошибку в клиенте и хотите точно знать, что клиент отправил в mysqld.

Журнал по умолчанию отключен, и его включение может немного снизить производительность. И это не будет включать косвенные изменения (например, ddls, выполняемые внутри процедуры).

Если вы можете установить плагин, то немного более настраиваемой (и более производительной) альтернативой будет использование плагина аудита, см. MySQL Enterprise Audit или любой бесплатной реализации, например, этой , или вы можете написать свою собственную , но в основном это будет Журнал те же вещи, что и общий журнал.

Другим хорошим источником информации может быть информационная схема и схема производительности . Оттуда вы можете собрать практически всю необходимую вам информацию (особенно журнал недавно выполненных запросов ) и сгенерировать из нее свою таблицу журналов, но это потребует некоторой работы для сбора всех данных, которые вы хотите - и это не будет вызвано действиями, поэтому вы должны периодически проверять изменения самостоятельно (например, сравнивать данные INFORMATION_SCHEMA.TABLESс сохраненной копией, чтобы отслеживать добавленные, удаленные и переименованные таблицы). С другой стороны, периодически mysql_dumpследовать diffсамой последней версии может быть намного проще.

Автор: Solarflare Размещён: 18.07.2016 07:17
Вопросы из категории :
32x32