Только схема mysqldump, обновление схемы без удаления - PullRequest
4 голосов
/ 19 апреля 2011

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

По умолчанию mysqldump (я использую --no-data) удалит существующие таблицы перед их сборкой, а это не то, что мне нужно. Мне интересно, если кто-нибудь знает способ сделать mysqldump или подобное, чтобы описать схемы БД с SQL для обновления таблиц, если они существуют вместо удаления и перестроения. Я понимаю, что это может быть далеко, но если бы кто-нибудь мог указать мне правильное направление, это было бы здорово.

1 Ответ

3 голосов
/ 20 апреля 2011

Как MySQL узнает, что обновлять? Он не может знать, в каком состоянии находится чужая база данных, поэтому он не может знать, какие обновления применять. Кроме того, обновления часто требуют больше, чем просто изменение схемы; они могут потребовать изменения данных, которые уже существуют, или могут потребовать перемещения данных из старой схемы в новую. Вы никогда не получите то, что автоматически обнаружит все это.

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

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

...