2009-06-09 5 views
2

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

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

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

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

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

Я попытался сделать «SHOW TABLE STATUS FROM livedb», но поскольку таблицы - это все InnoDB, нет «Время обновления», плюс, похоже, что «Создать время» было этим утром, что привело меня к мысли, что база данных резервируется и воссоздается ежедневно.

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

ответ

2

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

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

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

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

0

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

А какая версия mysql вы используете?

+0

Проблема не только в том случае, если данные есть, но если данные совпадают, к сожалению. Это то, что действительно меня беспокоило. Несмотря на то, что это тестовый сайт, некоторые из тестов связаны с ситуациями в реальном мире (один из них - расписание, которое должно иметь правильные данные и т. Д.). Поэтому крайне важно, чтобы данные были как можно точнее, без меня, когда меня зацепили мои штаны, говоря: «Ой, позвольте мне запустить программу обновления». Версия 5.0.76 Enterprise GPL – Anthony

0

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