Вопрос

У меня есть тестовый сервер, который использует данные из тестовой базы данных.Когда я закончу тестирование, оно будет перенесено в действующую базу данных.

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

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

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

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

Я попытался выполнить «ПОКАЗАТЬ СТАТУС ТАБЛИЦЫ ИЗ liveb», но поскольку все таблицы созданы в InnoDB, «Время обновления» отсутствует, плюс, похоже, что «Время создания» было сегодня утром, что заставило меня поверить, что база данных поддерживается. создается и воссоздается ежедневно.

Есть ли в таблице какое-либо другое свойство, которое бы показывало, какой из двух объектов новее?Возможно, «дата последней строки»?

Это было полезно?

Решение

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

Не зная, что такое ваша модель данных, и вообще не понимая, что такое ваша модель синхронизации, у вас есть несколько вариантов:

  1. Сопоставление первичных ключей с действующей базой данных и с реальной базой данных.тестовая база данных.Когда тест > живые идентификаторы, выполните обновление.
  2. Используйте временные метки в таблице, чтобы определить, нужно ли ее обновлять.
  3. Используйте хеш md5 таблицы базы данных и дату изменения (UTC), чтобы определить, изменилась ли таблица.

Короче говоря:Синхронизация базы данных очень сложна.Внедрите решение, специфичное для вашего приложения.Не существует «общего» решения, которое бы работало идеально.

Другие советы

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

Но какую версию MySQL вы используете?

Вместо того, чтобы создавать собственное решение, вы можете использовать уже существующее решение для синхронизации баз данных.Я слышал хорошие отзывы о SJA SQLYog (см. здесь).Сам я никогда ею не пользовался, но другие их программы меня очень впечатлили.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top