Изменение данных в MySQL - PullRequest
1 голос
/ 09 декабря 2010

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

Ответы [ 5 ]

4 голосов
/ 09 декабря 2010

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

Посмотрите документацию для CREATE TRIGGER .

Для того, что вы хотите сделать, вам, вероятно, понадобится вспомогательная таблица, в которую вставлена ​​строка для каждого INSERT/UPDATE в основной таблице, AFTER случается, содержит идентификатор измененной строки, старое значение новое значение и отметка времени.

1 голос
/ 25 июля 2018

Я рекомендую вам взглянуть на Debezium платформу CDC с открытым исходным кодом, которая, помимо прочего, также поддерживает MySQL .

Вы можете использовать Debezium для потоковой передачи изменений в Apache Kafka, но с помощью встроенного режима вы также можете использовать соединители Debezium в качестве библиотеки в своих приложениях Java и легко распространять изменения данных в другие API потоковой передачи. такие как Kinesis и т. д.

Отказ от ответственности: я руководитель проекта Debezium.

0 голосов
/ 05 декабря 2015

Я создал инструмент под названием cdc_audit , который автоматизирует создание таблиц аудита в mysql для любой или всех таблиц и даже сохраняет существующие триггеры. Я написал это с учетом сбора данных об изменениях (для приложений ETL хранилища данных). Может быть, вы или кто-то найдет это полезным.

Я также написал об этом в блоге .

Особенности

  • автоматизирует генерацию таблиц аудита
  • автоматизирует генерацию триггеров для заполнения таблиц аудита
  • автоматизирует синхронизацию новых строк в таблицах аудита с файлами .csv.
  • Считывает mysql information_schema для автоматического определения таблиц и столбцов.
  • Может генерировать таблицы + триггеры для всех таблиц базы данных или указанного списка.
  • Может синхронизировать таблицы аудита для всех таблиц базы данных или указанного списка.
  • Сохраняет существующую логику триггера, если таковая имеется, при генерации триггеров AFTER.
  • опция сценария синхронизации для удаления всей строки аудита, кроме последней, для сохранения размера исходной БД.
0 голосов
/ 01 апреля 2014

Триггеры не всегда являются лучшим способом записи событий изменений в базе данных. Поскольку триггеры могут стать недействительными после изменения схемы таблицы, это, в свою очередь, приведет к сбою самой операции с таблицей.

Для mysql вам нужно захватить события изменения из двоичного файла журнала. Mysql предоставляет API для чтения двоичного журнала (пост версия 5.6).

Возможно, вы также захотите взглянуть на Flexviews , который предоставляет Oracle как журналы Materialized View для записи событий изменений.

0 голосов
/ 23 апреля 2011

Вот что я бы предложил.Это может быть небольшая работа, но если вы сделаете это, я действительно думаю, что у вас будет надежный способ сбора данных изменений в MySQL.Имейте в виду, что отслеживание изменений в базе данных - это ДЕЙСТВИТЕЛЬНО трудная вещь, которую вы сами делаете, когда принимаете во внимание такие проблемы, как уровни блокировки и изоляции.Я настоятельно рекомендую использовать такой процесс.

Взгляните на продукт под названием MobiLink от iAnywhere.Вы можете скачать бесплатную версию для разработчиков с здесь .Цель MobiLink - позволить вам синхронизировать изменения данных из баз данных, таких как MySQL, в базу данных SQL Anywhere.Конечно, единственная часть, которая вас интересует, - это возможность получать изменения из MySQL.К счастью, MobiLink очень эффективно создаст эти триггеры сбора данных изменений в вашей базе данных MySQL.Фактически, он даже даст вам сценарии sql, которые он использовал для этого, на случай, если вам когда-нибудь понадобится сделать это снова.После этого вы можете удалить SQL Anywhere.

Для начала, после его установки появится продукт под названием Sybase Central, который вам нужно будет открыть.Когда он откроется, появится мастер, который проведет вас через настройку MobiLink для вашей базы данных MySQL.Я думаю, что есть справка, которая устанавливается, если вы застряли, но у меня нет доступа к ней прямо сейчас, чтобы проверить.

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

Надеюсь, это поможет ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...