voln.io
Боты

Как подключить MySQL к боту

Добавьте отдельную базу к новому или работающему боту, настройте TLS и проверьте соединение запросом SELECT 1 без вывода пароля.

Код бота подключается к отдельной MySQL-базе по TLS; ежедневная копия хранится во Франции.
Соединение настраивается в коде. Копия хранится отдельно от рабочей базы.

MySQL необязателен. Если бот не использует отдельную базу, оставьте «Без отдельной базы». SQLite хранится на диске бота и переживает обычный перезапуск. Для MySQL нужен подходящий драйвер и настройка подключения в коде.

Условия отдельной базы

ТарифСтоимостьДиск целикомПамятьСоединения
MySQL · 1 ГиБ49 ₽ / 30 дней1 ГиБ256 МиБдо 10
MySQL · 3 ГиБ99 ₽ / 30 дней3 ГиБ384 МиБдо 20

Это MySQL-совместимая MariaDB 11.4 в Амстердаме, до 0,5 CPU на базу. Диск включает системные файлы и служебные данные; свободного места для таблиц меньше указанного объёма. Оплата базы отдельная от почасовой оплаты бота. Списание при заказе, 30 дней начинаются с готовности. Продление вручную. По окончании срока подключение приостанавливается. Удаление сервера бота само по себе не удаляет базу.

  1. Заказ или проект → Базы данных

    Выберите базу при заказе или добавьте позже

    Проверьте итог: сервер и база оплачиваются отдельно. Для существующего проекта нажмите «Создать базу». Если баланса не хватает, пополните его и повторите заказ. При зависшем ответе не создавайте новый заказ: повтор текущей операции защищён от второго списания.

  2. Базы данных

    Дождитесь готовности

    «В очереди» и «Создаётся» ещё не означают, что можно подключаться. После готовности появятся адрес, порт, база и логин. Пароль откройте отдельной кнопкой. При ошибке создания панель сначала подтверждает освобождение ресурсов, затем возвращает стоимость на исходный баланс; после возврата можно оформить новый заказ.

  3. Код бота

    Подключите драйвер и TLS

    Первая созданная неудалённая база проекта автоматически передаётся боту после перезапуска через VOLN_DB_HOST, VOLN_DB_PORT, VOLN_DB_NAME, VOLN_DB_USER, VOLN_DB_PASSWORD и VOLN_DB_SSL. Она должна быть в состоянии «Работает». Код должен читать эти переменные. Остальные базы подключаются вручную. Скопированный из панели .env использует имена DB_*: его нужно отдельно загрузить в окружение приложения или прочитать библиотекой dotenv.

  4. Консоль приложения

    Выполните SELECT 1

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

Python: проверка через PyMySQL

Добавьте PyMySQL в requirements.txt с выбранной проверенной версией. Сохраните пример как check_db.py и временно выберите его файлом запуска. После строки «MySQL: подключение успешно» верните настоящий файл бота и перезапустите сервер. Завершение этого короткого проверочного скрипта ожидаемо.

check_db.pypython
import os
import ssl
import pymysql

try:
    with pymysql.connect(
        host=os.environ['VOLN_DB_HOST'],
        port=int(os.environ['VOLN_DB_PORT']),
        user=os.environ['VOLN_DB_USER'],
        password=os.environ['VOLN_DB_PASSWORD'],
        database=os.environ['VOLN_DB_NAME'],
        ssl=ssl.create_default_context(),
        connect_timeout=10, read_timeout=10,
    ) as connection:
        with connection.cursor() as cursor:
            cursor.execute('SELECT 1')
            assert cursor.fetchone()[0] == 1
    print('MySQL: подключение успешно')
except Exception:
    print('MySQL: проверьте доступы, TLS, срок оплаты и лимит соединений')
    raise SystemExit(1)

Node.js: проверка через mysql2

Добавьте mysql2 в dependencies, обновите lockfile локально и загрузите оба файла. Сохраните пример как check-db.mjs. После проверки верните фактический файл запуска бота. Для TypeScript сначала выполните сборку на своём компьютере.

check-db.mjsjavascript
import mysql from 'mysql2/promise';

let connection;
try {
  connection = await mysql.createConnection({
    host: process.env.VOLN_DB_HOST,
    port: Number(process.env.VOLN_DB_PORT),
    user: process.env.VOLN_DB_USER,
    password: process.env.VOLN_DB_PASSWORD,
    database: process.env.VOLN_DB_NAME,
    ssl: { rejectUnauthorized: true, verifyIdentity: true },
    connectTimeout: 10000,
  });
  const [rows] = await connection.query({sql: 'SELECT 1 AS ok', timeout: 10000});
  if (rows[0].ok !== 1) throw new Error('Unexpected result');
  console.log('MySQL: подключение успешно');
} catch {
  console.error('MySQL: проверьте доступы, TLS, срок оплаты и лимит соединений');
  process.exitCode = 1;
} finally {
  if (connection) await connection.end().catch(() => {});
}

После подключения

  • Успешный SELECT 1 подтверждает соединение с базой, но не правильность запросов и схемы вашего приложения. Не превышайте лимит соединений: используйте небольшой пул и закрывайте неиспользуемые подключения.
  • Telegram: отправьте своему боту сообщение и дождитесь ответа. Discord: проверьте приглашение, права, intents и ответ на команду. Отметка пользователя о полученном ответе не является независимой проверкой платформы.
  • Обычный перезапуск сохраняет данные. Копии создаются ежедневно на отдельном сервере во Франции и доступны 7 дней. Ручное копирование и восстановление суммарно доступны дважды в сутки UTC, не чаще раза в час.
  • Восстановление через панель заменяет текущие данные этой базы; перед ним создаётся защитная копия. Восстановление в другую базу — отдельная операторская проверка, кнопки клонирования в панели пока нет.

Читайте дальше

Боты

Как загрузить Telegram-бота и запустить его

Как запустить своего бота Telegram или Discord: заказ сервера с готовым шаблоном, загрузка кода файловым менеджером, токен от BotFather и первая строка в консоли.

Боты · разбор

Почему бот не запускается

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

Боты · токен

Как безопасно хранить токен бота

Что даёт чужому человеку токен вашего бота, почему его нельзя держать в коде и в публичном репозитории и как отозвать и заменить его, если он уже утёк.

Боты · зависимости

Как закрепить зависимости бота, чтобы перезапуск не ломал код

Закрепите зависимости бота в requirements.txt или package-lock.json, учтите devDependencies и проверьте обновления библиотек до загрузки.

Боты · Telegram

Ошибка 409 Conflict у Telegram-бота: второй polling или старый webhook

Оставьте один процесс получения обновлений, проверьте прежний webhook и восстановите ответы бота без потери очереди сообщений.

Боты · Discord

Discord-бот онлайн, но не читает сообщения: проверка intents

Проверьте intents Discord-бота в коде и Developer Portal, отделите права канала от событий Gateway и разберите код закрытия 4014.