Пользовательские скрипты инициализации
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. Скрипт выполняется при каждом запуске контейнера.