SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.07.2017 20:11:38

serker
Участник
Зарегистрирован: 25.07.2017
Сообщений: 1

Фиксация изменения любой таблицы в таблице

Доброго времени суток.

Возникла следующая задача: при изменении любой из таблиц в базе данных необходимо обновить поле в специальной таблице.
Изменение поля в специальной таблице не учитывать.

Все таблицы в базе InnoDb.

Создавать триггер для каждой таблицы не хотелось бы, да и при создании новой таблицы можно забыть это сделать.

Пока у меня созрело только одно решение:
- включить бинарные логи со сроком хранения 1 сутки;
- с помощью утилиты mysqlbinlog выбирать из них запросы с момента последнего запуска скрипта и записывать в файл;
- с помощью grep искать в файле запросы на изменение (INSERT,UPDATE,DELETE,TRUNCATE,DROP,CREATE,ALTER);
- если хотя бы один запрос найден, то проставлять в поле спец.таблицы время запуска скрипта.

Возможно, кто-то сможет предложить более элегантное и быстрое решение данной задачи ?
Заранее благодарен за Ваши ответы.

Неактивен

 

#2 27.07.2017 10:19:20

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Фиксация изменения любой таблицы в таблице

Ничего лучше бинлога в голову не приходит и правда. Могу преддожить несколько упрощений к схеме:
- Можно не запоминать позицию сценария, а просто записывать в табличку аудита уже сротированные логи (flush logs)
- В бинлоге уже пишутся только изменения, поэтому фильтровать будет не нужно
- Возможно, будет удобно читать события через show master logs/show binlog events
- При записи в табличку аудита можно делать set sql_log_bin=0, чтобы изменения аудита в бинлог не попали

Неактивен

 

#3 08.08.2017 16:30:54

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Фиксация изменения любой таблицы в таблице

Неожиданно для себя нашел вот такого зверя, возможно, будет удобно писать честный аудит, а потом загружать его в базу:
https://www.percona.com/doc/percona-ser … lugin.html

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson