LINUX.ORG.RU

Эффективно отслеживать изменения в MySQL

 , , ,


1

3

Есть ли какой-нибудь проверенный способ отслеживать изменения в таблицах MySQL в больших проектах? Или подскажите, в какую сторону лучше копать.

Есть очень большой проект, с несколькими базами данных, основная из которых содержит около 500 таблиц, и с сотнями тысяч записей в некоторых таблицах.

Проект изначально был на Битрикс, потом его переносили на самописный фреймворк, сейчас по сути никто до конца не знает, какие таблицы в нём для чего предназначены.

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

Соответственно, есть потребность выяснять, какая таблица обновлялась в результате определённых действий пользователя. Сначала была попытка отслеживать изменения с помощью information_schema, но большая часть таблиц inno db, значит, время внесения последних изменений через information_schema учесть нельзя, число столбцов учитывается тоже примерно. Можно, наверное, для всех таблиц пересчитывать записи с помощью count(*), но идея мне кажется не самой лучшей, как и повесить триггеры на все 500 таблиц.

У меня нет доступа к логу запросов MySQL, и меня уверяют, что он трудночитаем.

Подскажите, пожалуйста, есть ли какие-нибудь хорошие анализаторы логов mysql, либо скрипты по типу профайлера, которые бы отслеживали запросы, либо наиболее эффективные способы отладки, с помощью которых можно было бы написать, например, простой скрипт, который бы запускался,отслеживал запросы и выдавал данные об изменениях в табилце?

А что мешает сделать дамп структуры базы в файл и закинуть его на гит ? При последующих коммитах сразу будет видна разница. Так можно вести историю изменений

Правда кто поменял структуру таблицы не узнать

ism ★★★ ()
Последнее исправление: ism (всего исправлений: 4)
Ответ на: комментарий от bluerosepig

это помогло бы скрасить ожидание

Дамп только схемы, а не всей БД.

У меня нет доступа к логу запросов MySQL, и меня уверяют, что он трудночитаем.

mysqlbinlog выводит все запросы в нормальном текстовом виде. Но если доступа нет, то увы.

KRoN73 ★★★★★ ()

А в самом коде ловушку поставить нельзя? Например, функцию выполнения запроса дополнить логированием выполняемых действии? Если для этого используется системная функция, можно её обернуть в самодельную функцию, в которую также засунуть логирование. Я бы так делал - намного удобнее.

anonymous ()