Пользовательские скрипты инициализации

Docker-контейнер YDB поддерживает пользовательские скрипты инициализации, позволяющие автоматизировать настройку базы данных.

Директории для скриптов

Существуют две директории для размещения пользовательских скриптов:

Директория Описание Использование
/preinit.d Скрипты в этой директории выполняются при каждом запуске контейнера, до запуска сервера YDB. Выполняются при каждом запуске контейнера до запуска сервера. Полезны для установки переменных окружения, настройки логирования или других подготовительных задач, которые могут выполняться при каждом запуске контейнера.
/init.d Скрипты в этой директории выполняются только один раз после успешного запуска сервера YDB. Создаётся файл-маркер для предотвращения повторного выполнения при перезапуске контейнера. Выполняются только один раз после успешного запуска сервера. Например, для создания структуры базы данных (таблиц, индексов) и вставки начальных данных.

Поддерживаемые типы файлов

Скрипты предварительной инициализации (/preinit.d)

Расширение Описание
.sh Shell-скрипты. Если скрипт исполняемый, он запускается напрямую. В противном случае он подключается (sourced), что позволяет модифицировать переменные окружения для последующих скриптов.

Скрипты инициализации (/init.d)

Расширение Описание
.sh Shell-скрипты. Если скрипт исполняемый, он запускается напрямую. В противном случае он подключается (sourced).
.sql SQL-файлы. Содержимое выполняется через интерфейс командной строки YDB YQL.
.sql.gz Сжатые SQL-файлы в формате gzip. Содержимое распаковывается и выполняется.

Порядок выполнения

Скрипты выполняются в алфавитном порядке внутри каждой директории. Используйте числовые префиксы для управления последовательностью выполнения:

/init.d/
├── 01-create-tables.sh
├── 02-create-indexes.sql
└── 03-insert-data.sql.gz

Переменные окружения

Вы можете настроить директории скриптов с помощью переменных окружения:

Переменная Значение по умолчанию Описание
YDB_PREINITSCRIPTS_DIR /preinit.d Путь к директории скриптов предварительной инициализации
YDB_INITSCRIPTS_DIR /init.d Путь к директории скриптов инициализации

Обработка ошибок

Если какой-либо скрипт завершается с ошибкой (возвращает ненулевой код), контейнер прекращает выполнение и завершается с ошибкой. Это гарантирует немедленное обнаружение ошибок инициализации и предотвращает запуск контейнера с незавершённой настройкой.

Примеры

Использование shell-скриптов

Создайте файл /init.d/01-setup.sh для настройки базы данных и заполните следующим содержимым:

#!/bin/bash
# /init.d/01-setup.sh
echo "Настройка базы данных..."
/ydb -e grpc://localhost:2136 -d /local --no-discovery sql -s "CREATE TABLE test (id Uint64, PRIMARY KEY (id));"

Примонтируйте директорию init при запуске контейнера:

docker run -d \
    --name ydb-local \
    -v $(pwd)/init.d:/init.d \
    ydbplatform/local-ydb:latest

При запуске контейнера автоматически создастся таблица — test с использованием YDB CLI. Скрипт выполняется только один раз после успешного старта сервера.

Использование SQL-файлов

Создайте файл /init.d/01-create-tables.sql с содержимым:

-- /init.d/01-create-tables.sql
CREATE TABLE users (
    id Uint64,
    name Utf8,
    email Utf8,
    PRIMARY KEY (id)
);

CREATE TABLE orders (
    id Uint64,
    user_id Uint64,
    amount Double,
    PRIMARY KEY (id)
);

Примонтируйте директорию init при запуске контейнера:

docker run -d \
    --name ydb-local \
    -v $(pwd)/init.d:/init.d \
    ydbplatform/local-ydb:latest

При запуске контейнера автоматически создадутся две таблицы — users и orders — с помощью SQL-скрипта. Скрипт выполняется только один раз после успешного старта сервера.

Восстановление из резервной копии с помощью init-скриптов

Создайте файл /init.d/01-restore-backup.sh с содержимым:

# /init.d/01-restore-backup.sh
#!/bin/bash
if [ -d "/backup" ] && [ -n "$(ls -A /backup)" ]; then
    /ydb -e grpc://localhost:2136 -d /local --no-discovery tools restore -p . -i /backup
fi

Смонтируйте директории init, а также том с вашей резервной копией при запуске контейнера:

docker run -d \
    --name ydb-local \
    -v $(pwd)/init.d:/init.d \
    -v $(pwd)/backup:/backup \
    ydbplatform/local-ydb:latest

При запуске контейнера произойдет восстановление из резервной копии /backup в базу данных /local. Скрипт выполняется только один раз после успешного старта сервера.

Использование скриптов предварительной инициализации

Создайте файл /preinit.d/01-set-env.sh с содержимым:

# /preinit.d/01-set-env.sh
# Этот скрипт будет подключён (sourced), поэтому экспортированные переменные будут доступны
export YDB_DEFAULT_LOG_LEVEL=INFO

Примонтируйте директорию preinit при запуске контейнера:

docker run -d \
    --name ydb-local \
    -v $(pwd)/preinit.d:/preinit.d \
    ydbplatform/local-ydb:latest

При запуске контейнера экспортируется переменная окружения YDB_DEFAULT_LOG_LEVEL со значением INFO. Скрипт выполняется при каждом запуске контейнера.

Предыдущая