Skip to the content.

Команды DB 🗄️

Команды для управления временным доступом к базам данных MySQL через создание MySQLProxy CustomResource в Kubernetes.

💡 Способ предназначен для окружений l-yandex, p-yandex, p-azure. Для получения доступа нужно быть owner или contributor в K8s-неймспейсе сервиса, за которым закреплён нужный MySQL.

Команда Описание
dodo db access Запросить временный доступ к БД и поднять port-forward
dodo db extend Продлить активный доступ
dodo db revoke Удалить активные доступы

🔓 Запрос доступа (Access)

Создаёт ресурс MySQLProxy в кластере и поднимает port-forward на локальную машину для подключения к БД.

Команда открывает только сетевой доступ до БД — дальше подключайтесь любым MySQL-клиентом (mysql CLI, DBeaver, DataGrip и т.д.).

dodo db access -n <namespace> [flags]

Флаги

Флаг Сокращение Тип Описание
--namespace -n string Обязательный. Целевой неймспейс в кластере.
--role -r string Роль доступа: ro (только чтение), rw (чтение-запись), fa (полный доступ). По умолчанию: ro.
--time -t int Длительность доступа в минутах (10–120). По умолчанию: 10.
--port -p int Локальный порт для port-forward (1024–65535). По умолчанию: 13306.
--context -c string Kubernetes контекст: l-yandex, p-yandex, p-azure. По умолчанию: текущий контекст kubectl.
--service -s string Целевой сервис БД. Обязателен, когда в неймспейсе доступно несколько сервисов БД; актуальный список выведет сама команда.
--replica   string Подключение к реплике вместо мастера: any (оператор сам выберет реплику) или FQDN хоста Yandex MDB (rc<az>-<id>.mdb.yandexcloud.net). Без флага — подключение к мастеру. Работает только в Yandex-контекстах.

Примеры

Запросить read-only доступ на 30 минут:

dodo db access -r ro -t 30 -n my-namespace

Запросить read-write доступ с кастомным портом:

dodo db access -r rw -t 60 -n my-namespace -p 3307

Запросить полный доступ с явным указанием контекста:

dodo db access -r fa -t 15 -n my-namespace -c p-yandex

Запросить доступ, когда в неймспейсе несколько сервисов БД:

dodo db access -r ro -n my-namespace -s my-service

Запросить доступ к реплике (только Yandex):

dodo db access -r ro -n my-namespace --replica any
dodo db access -r ro -n my-namespace --replica rc1b-x42abc1xyz.mdb.yandexcloud.net

Подключиться к БД после получения доступа:

mysql --host=127.0.0.1 --port=13306 --user=ro --password=ro

⏳ Продление доступа (Extend)

Продлевает активную сессию доступа без пересоздания ресурса. Выполнять в отдельном терминале, пока сессия access активна.

dodo db extend -n <namespace> -t <minutes> [flags]

Флаги

Флаг Сокращение Тип Описание
--namespace -n string Обязательный. Целевой неймспейс.
--time -t int Обязательный. Дополнительные минуты к базовому времени доступа (10–480).
--context -c string Kubernetes контекст: l-yandex, p-yandex, p-azure. По умолчанию: текущий контекст kubectl.

Как считается время

Пример

# Изначальный доступ: dodo db access -n my-namespace -t 15
dodo db extend -n my-namespace -t 20   # итог: 15 + 20 = 35 минут
dodo db extend -n my-namespace -t 40   # итог: 15 + 40 = 55 минут (40 заменяет 20)

🚫 Отзыв доступа (Revoke)

Удаляет все ресурсы MySQLProxy, созданные текущим пользователем в указанном неймспейсе. Полезно, если по каким-то причинам CR не был удалён автоматически после завершения сессии доступа (например, при аварийном завершении процесса).

dodo db revoke -n <namespace> [flags]

Флаги

Флаг Сокращение Тип Описание
--namespace -n string Обязательный. Целевой неймспейс.
--context -c string Kubernetes контекст: l-yandex, p-yandex, p-azure. По умолчанию: текущий контекст kubectl.

Пример

dodo db revoke -n my-namespace

🧐 Как это работает

  1. Создание CR: Команда access создаёт MySQLProxy CustomResource в целевом неймспейсе с указанной ролью и временем жизни.
  2. Ожидание пода: Оператор в кластере обрабатывает CR и поднимает под с ProxySQL, который устанавливает соединение с базой данных (с мастером или с выбранной репликой).
  3. Port-forward: CLI автоматически запускает kubectl port-forward на локальный порт (по умолчанию 13306), после чего выводит параметры подключения:
    • Адрес: 127.0.0.1
    • Порт: указанный через --port (или 13306)
    • Логин/Пароль: совпадает с названием роли (ro, rw, fa)
    • Target: master или replica (<fqdn>)
    • Время истечения доступа
  4. TTL: Доступ живёт accessTimeMinutes + extendedAccessTimeMinutes от момента создания CR. По истечении времени оператор автоматически удаляет CR и все связанные ресурсы.
  5. Завершение сессии: При нажатии Ctrl+C port-forward останавливается и CLI удаляет CR. При ошибках CR может остаться в кластере — в таком случае используйте dodo db revoke или удалите ресурс вручную.
  6. Extend: Команда extend обновляет поле extendedAccessTimeMinutes существующего CR — оператор пересчитывает TTL.
  7. Revoke: Команда revoke находит все MySQLProxy ресурсы текущего пользователя в неймспейсе и удаляет их.

Ограничения