2015-01-28 3 views
12

Я был немного удивлен, обнаружив, что операторы DDL (alter table, create index и т. Д.) Неявно совершают текущую транзакцию в MySQL. Исходя из MS SQL Server, возможность изменения базы данных в транзакции локально (которая была отброшена назад) была важной частью моего рабочего процесса. Для непрерывной интеграции откаты использовались, если миграция была изъята по какой-либо причине, так что по крайней мере мы не оставили базу данных в состоянии с половиной миграции.Рабочий процесс транзакции DDL для MySQL

Как люди решают эти две проблемы при использовании MySQL с миграциями и непрерывной интеграцией?

+2

Крест отправил на DBA: http://dba.stackexchange.com/q/90794/18273 – sennett

+2

Добро пожаловать в удивительный мир MySQL :) –

+0

Вы уверены, что SQL Server DDL-команда не фиксирует транзакцию? потому что в oracle DDL команда также совершает транзакцию. –

ответ

1

Заявления DDL вызывают неявное коммитирование, и вы ничего не можете с этим поделать. Невозможно остановить это поведение.

Какие операторы DDL имеют такое поведение со временем, поэтому вам нужно проверить свою версию.

5.1 http://dev.mysql.com/doc/refman/5.1/en/implicit-commit.html 
5.5 http://dev.mysql.com/doc/refman/5.5/en/implicit-commit.html 
5.6 http://dev.mysql.com/doc/refman/5.6/en/implicit-commit.html 

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

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

Поскольку в каждом конкретном случае не так много, что я могу предложить в виде помощи для вашей конкретной ситуации.

1

Одна из возможностей делает изменения DDL в неразрушающем-образом, который будет включать:

  • разделение логики в DDL/DCL (+1 Инверсия) и DML
  • пробег только DDL/DCL скрипт добавления столбцов, новые таблицы, ..
  • в зависимости от результата:
    • на успех, применить изменения DML,
    • при неудаче, применяется обратный DDL/DCL сценарий удаления вещи вы Вань Тэд добавить во второй стадии (очевидно, с некоторыми ошибками «не существует», в зависимости от того, насколько шага 1 получили)
  • удалить то, что больше не требуется, падение старых колонок/таблиц
Смежные вопросы