Рубрика «alter table»

Представим себе проект, который должен работать 24/7, проект, использующий базу данных mysql и типичную ситуацию, приходит разработчик и говорит:
В табличке, в которой сейчас 300 млн строк, я забыл добавить поле и индекс по нему, а остановка работы прода с базой недопустима, придумай что-нибудь.

Если попробовать погуглить на тему, то в основном встречаются советы по созданию второй таблички, постепенному копирования туда данных («insert into T select * from S limit OFFSET») и затем переименовыванию таблиц, но подобный механизм имеет существенные недостатки, например данные в исходной таблице могут измениться, сразу после копирования, а т.к. залочить таблицу на запись нельзя, то целостность данных будет под вопросом.
Можно копировать данные внешним кодом с учетом всех изменений синхронно в 2 таблицы, в читать только непрочитанное из старой в новую, но это требует изменения в коде приложения, что не всегда возможно.

А существуют ли условия, когда подобный альтер можно сделать на ходу? Безусловно да, их несколько, но я расскажу только один вариант для моего сферического коня в вакууме.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js