Меня попросили проверить любые / все изменения в таблице MySQL. Кто-нибудь знает какие-либо инструменты, которые помогут мне в этом, или мне нужно написать собственное решение?
Если я напишу свой собственный аудит, я сначала подумал, что нужно сделать отдельную таблицу и построить строку изменений в коде PHP. Что-то вроде "fieldname1 -> oldvalue | fieldname2 -> oldvalue, ...". Если вы заметили серьезную проблему с этим методом, сообщите мне.






Используйте триггер для обнаружения изменений и записи значений до / после в таблицу журнала.
Единственный надежный способ зафиксировать все изменения в таблице БД - использовать триггеры на сервере. Риск модификации вашего собственного кода для аудита изменений заключается в том, что изменения от другого приложения / пользователя и т. д. Не будут зафиксированы.
Сказав это, я не уверен, что в MySQL 4 была поддержка триггеров.
Думаю, мне просто нужно будет реализовать свое обратное решение. Возможно, я смогу получить разрешение на обновление до MySQL 5.
Триггеры были добавлены в MySQL 5.0. На данный момент действительно нет веских причин не обновляться с 4 до 5. 5.1 находится в кандидате на выпуск, а 6.0 находится в разработке.
могут ли триггеры отслеживать, какой пользователь вносит изменения?
SoftTree DB Audit поддерживает MySQL, может делать то, что вам нужно:
Если вам придется вручную раскручивать решение из-за отсутствия поддержки триггера, я настоятельно рекомендую вам не просто сбрасывать изменения в строковую каплю. Однажды вас попросят запросить эти данные, и вам придется выполнить кучу синтаксического анализа строк, чтобы вернуть свои данные. (Я говорю здесь по собственному опыту.)
Самый простой подход - просто создать теневую таблицу аудита, которая имеет все те же столбцы, что и исходная таблица, плюс столбец даты изменения и последовательный идентификатор. Тогда у вас под рукой будет вся история для восстановления в любом нужном вам формате, и вы можете запросить ее по своему желанию.
К сожалению, я застрял в использовании MySQL 4. Я отредактирую свой вопрос для уточнения. Тем не менее, отличное предложение.