Есть ли способ записывать все изменения в базе MYSQL?

1. Чтоб это было прозрачно
2. Чтоб можно было откатить назад

Возможно, что-то вроде GIT для MYSQL?

Спасибо :)
  • Вопрос задан
  • 4366 просмотров
Пригласить эксперта
Ответы на вопрос 5
sledopit
@sledopit
Включите бин-логи и будет Вам счастье. Откатить по времени можно на любой момент, вплоть до секунд.
Ответ написан
Комментировать
sl_bug
@sl_bug
Только самостоятельно сделать триггеры. Например как здесь — www.jasny.net/articles/versioning-mysql-data/
Ответ написан
@gro
На вопрос в такой общей форме единственно верный ответ — бинарные логи.
Уже от конкретики самого вопроса решение может меняться.
Ответ написан
Комментировать
xaker1
@xaker1
Согласен с использованием триггеров. Откатить назад вы сможете — будет вся информация о изменениях в любой таблице, максимально прозрачно.
Пример использования habrahabr.ru/blogs/mysql/121129/.
Ответ написан
Комментировать
MarcusAurelius
@MarcusAurelius
автор Impress Application Server для Node.js
Еще для прозрачности очень хорошо не вызывать из кода сразу sql операторы, а сделать прослойку в виде своей библиотеки функций для обращения к базе, тогда можно все запросы писать в логи прямо в виде SQL операторов (CREATE, ALTER, UPDATE, DELETE, INSERT...), в таком виде журнал очень удобно править, резать на части, и загружать в базу. Если каждый день логи будут писаться в отдельный файл, то вообще удобно: для бекапа и восстановления, для синхронизации с другой базой, для понимания какие и сколько запросов делает система, ну и для оптимизации рекомендую туда еще время исполнения писать, чтобы можно было выделить долгие запросы. В MySQL есть конечно встроенное средство логирования, в /etc/mysql/my.cnf есть строка «log = /var/log/mysql/mysql.log» и она обычно закоментирована. Если ее откоментить, то логироваться будет не отдельный проект, а все базы данных на сервере. Можно логировать только медленные запросы «slow-queries=sloq.log». Про бинарные логи уже говорили и они хороши тем, что можно выбрать какую базу логировать. Но я предпочитаю писать логи самому, т.к. можно над ними делать какие-то еще операции дополнительные, например, парсать и анализировать, строить статистику, определять ошибки и предпринимать что-то, в общем, для прозрачности — нужна своя прослойка, а вызывать PDO или mysql_query прямо из кода программ считаю плохим тоном. Даже если ничего у Вас не навешено сейчас, но в любой момент Вы можете захотеть навесить что-либо, поверьте, когда ситеме пару лет и в ней тысячи файлов, то для сточного исправления проблемы или поиска ошибки такое логирование не заменимо. Даже иногда, в виде временной заплаты можно делать коррекцию SQL операторов перед их исполнением.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы