Здравствуйте, dimgel, Вы писали:
D>Не знаю, как щас, но год-полтора назад ситуация была следующая: D>1) запускаем скрипт, в единой транзакции обновляющий структуру базы; D>2) скрипт выбрасывает исключение; D>3) транзакция откатывается, включая изменения метаданных, хранимых и используемых innodb, но НЕ включая изменения в frm-файлах, используемых ядром мускуля (в т.ч. планировщиком ЕМНИП); D>4) все последующие запросы к таблицам, метаданные которых рассогласованы, падают с внутренней ошибкой; D>5) делаем /etc/init.d/mysqld stop; D>6) ручками или скриптиком восстанавливаем frm-файлы (в документации мускуля было howto); D>7) делаем /etc/init.d/mysqld start; D>8) не забываем повторять про себя "во б#$% п#$#$# е#$#$#$ е#@#@ их в с#$#%# что б вы м#$^@ п#$#$%#$# cо своим е#$&@# муcкулем!" в течение всего процесса, начиная с пункта 4 (можно раньше).
А всего то надо было сделать бекап перед деплойментом. Из всего этого следует только то, что деплоймент, изменяющий структуру базы данных на MySQL требует обязательный down-time на время прогона скрипта (и/или создния и восстановления бекапа). Но даже на оракле и скл сервере, все деплойменты которые я проводил/имел отношение/наблюдал проходили с down-time'ом на время бекапа (когда было возможно), прогона скрипта (без транзакций) и первичного тестирования. Так что в данном случае не было бы никакой разницы.