Связаться с поддержкой

Мы отвечаем по электронной почте, обычно в течение двух дней.

Для защиты от злоупотреблений Google reCAPTCHA проверяет эту отправку; при этом данные передаются в Google. Скрипт загружается только при открытии этой формы.

← Все записи

Где на самом деле живёт схема базы

О материалах и их проверке

В этой статье

Всё, что делает эта служба, лежит в системе контроля версий. Код — во всяком случае. База, на которой он работает, — это 32 таблицы, и у 15 из них нигде в репозитории нет описания: ни CREATE TABLE, ни файла схемы, ничего. Резервная копия восстанавливает все 32 вместе с их формой; чего в репозитории нет, так это второй, независимой записи этой формы.

17 таблиц описано 15 не описано нигде 21 индекс создаёт код 11 только в базе 32 таблицы, 32 вторичных индекса, 0 файлов схемы

Эти цифры получены сравнением работающей базы с 736 файлами и 5 671 710 знаками репозитория. Это не оценка.

Как теряется половина схемы

Это не небрежность, и именно поэтому стоит записать. Каждый отдельный шаг был разумным.

Таблицы, созданные до нынешнего кода, никогда не были записаны, потому что тогда они просто были. Таблицы, добавленные с тех пор, пришли через миграционные сценарии, и они лежат в репозитории — отсюда те 17 описаний. Столбцы, добавленные позже, приходили однострочным ALTER TABLE, набранным в командной строке, потому что набрать было быстрее, чем писать сценарий ради изменения длиной в секунду.

Хуже всего с индексами. Индекс добавляют, когда что-то медленно, в тот момент, когда медленно, и он чинит это сразу. После него не остаётся ничего: нечего просматривать, нечему упасть, если забыть. Одиннадцать из тридцати двух здешних вторичных индексов существуют ровно поэтому и нигде не записаны.

Таблица, в которой лежат сами счётчики, 166 438 строк, входит в те пятнадцать без описания в репозитории.

Что на самом деле ломается

Немногое — до одного определённого момента: когда базу восстанавливают из выгрузки.

Выгрузка несёт структуру с собой, так что прямое восстановление проходит нормально. Опасен любой путь, который создаёт таблицу заново вместо восстановления: переезд на другую машину, перенос отдельных таблиц, воссоздание из сценария. Данные возвращаются, а индексы молча нет. Ничего не падает. Запросы возвращают правильные ответы. Они просто идут дольше, и причина невидима, потому что единственная запись о том, чем был индекс, лежит на машине, у которой его больше нет.

Вот тот сбой, который стоит назвать: пропавший индекс не даёт ошибки, он даёт более медленный правильный ответ. Проверки на это нет, потому что тесты проходят.

Что мы делаем пока

Схемы в репозитории сегодня нет, и это точное описание состояния. То, что есть, уже полного исправления и покрывает случай, который действительно чего-то стоит:

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

Общая формулировка касается не только баз данных. Если часть системы существует только в работающей системе, второй её копии нет. Вопрос, который стоит задать о любом куске инфраструктуры, звучит не «есть ли резервная копия», а «что нельзя будет собрать заново из репозитория, если эта машина исчезнет». Здесь ответ — пятнадцать таблиц и одиннадцать индексов, на выяснение ушёл день, и это список, а не неизвестное.

Обновление: сентябрь 2026

Через пять дней после этой записи рабочий каталог попал в репозиторий: 26 файлов и 4058 строк, среди них одиннадцать сценариев миграции, написанных с 28 августа по 1 сентября и до того существовавших только на работающей машине. Это была лёгкая половина — код, который написали, но нигде не закрепили.

1 сентября 2026 года измерение повторили тем же способом: работающая база против всего, что знает git.

Таблицы4630 с CREATE TABLE в репозитории, 16 без него
Вторичные индексы4332 создаются кодом из репозитория, 11 только в работающей базе
Сценарии миграции109под контролем версий
30 таблиц описаны 16 нигде 32 индекса с файлом 11 только в базе 46 таблиц, 43 вторичных индекса, 0 файлов схемы

Число, которое важно, не сдвинулось. 27 августа одиннадцать вторичных индексов не существовали нигде, кроме работающей базы. 1 сентября их по-прежнему одиннадцать. За это время добавились ещё одиннадцать индексов, и каждый пришёл со сценарием миграции: привычка изменилась, долг нет.

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

Так что положение из августа остаётся прежним. Схемы в репозитории по-прежнему нет, и восстановление, которое строит таблицу заново вместо возврата, всё так же потеряло бы одиннадцать индексов без единого слова. Изменилось меньшее: всё, что добавилось с тех пор, оставило после себя файл.

Реклама