Перейти к основному содержимому

MySQL туннель

к сведению

Доступно только по подписке.

Обзор​

MySQL туннель открывает доступ к базе данных MySQL или MariaDB и показывает SQL-запросы в инспекторе: сессии в виде пользователь@база, текстовые запросы, prepared statements (Prepare, Execute, Fetch, Close), USE, CREATE DATABASE и DROP DATABASE, KILL, REFRESH. Сессию можно скачать как SQL-файл.

Ответы сервера tuna не разбирает: числа строк в ответе и ошибок сервера, как у Postgres туннеля, в инспекторе нет.

Аутентификация проходит через туннель как есть: работают все методы входа, включая mysql_native_password, caching_sha2_password, ed25519 и parsec (MariaDB 11.6 и новее), а пароль tuna не видит.

примечание

MySQL туннели рассчитаны на отладку и работу локально или в тестовых окружениях и не поддерживают TLS. Мы не рекомендуем использовать этот тип туннелей в производственных средах.

Как и у Postgres и Redis, tuna показывает в терминале полноэкранный интерфейс с сессиями и SQL-запросами.

Подключение клиента​

TLS туннель не поддерживает, поэтому отключите его в клиенте.

MySQL 8:

mysql -h <адрес> -P <порт> -u root -p --ssl-mode=DISABLED --get-server-public-key

MariaDB:

mariadb -h <адрес> -P <порт> -u root -p --skip-ssl

Без этих флагов клиент, который требует TLS, не подключится:

  • MySQL с --ssl-mode=REQUIRED — SSL is required but the server doesn't support it;
  • MariaDB 11.4 и новее требует TLS по умолчанию — ERROR 2026 (HY000): SSL is required, but the server does not support it.

Через туннель работают mariadb-admin, mariadb-dump, LOAD DATA LOCAL INFILE и пакетные запросы. Сжатие --compress клиент включить может, но через туннель запросы идут без него.

MySQL 8 и caching_sha2_password​

В MySQL 8 пользователи по умолчанию входят через плагин caching_sha2_password. Без TLS первый вход такого пользователя требует RSA-ключ сервера, поэтому клиенту нужен флаг --get-server-public-key. Без него вход завершится ошибкой:

ERROR 2061 (HY000): Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.

В драйверах то же самое включается параметром подключения, например allowPublicKeyRetrieval=true в Go-драйвере и JDBC.

После первого успешного входа сервер запоминает хеш пароля до перезапуска, и дальше вход проходит без ключа. Пользователям с mysql_native_password и серверу MariaDB флаг не нужен.

Смена пользователя​

Смену пользователя внутри соединения (COM_CHANGE_USER) туннель отклоняет. Чтобы войти другим пользователем, переподключитесь.

Примеры​

примечание

Все актуальные флаги, подсказки и примеры можно посмотреть вызвав справку:

tuna mysql --help

Почти для всех флагов есть аналогичные переменные окружения.

Базовый пример​

Без аргументов туннель подключается к порту 3306:

tuna mysql

С передачей IP-адреса​

tuna mysql 10.0.0.1:3306

С указанием API-ключа​

Можно указать другой API-ключ через флаг --api-key или переменную окружения TUNA_API_KEY, у ключа должно быть право tunnels:connect. Переопределение происходит в соответствии с политикой очерёдности конфигурации.

tuna mysql 3306 --api-key=tak_***

Статичный порт​

В качестве значения флага --port/-p может выступать алиас или назначенный порт. Порты можно резервировать в личном кабинете и после перезапуска туннеля адрес останется прежним. Подробнее о портах читайте в отдельной инструкции.

tuna mysql 3306 --port=mysql
tuna mysql 3306 --port=35000

Ограничение доступа по подсетям IP​

Вы можете определить белый список подсетей в CIDR-формате:

tuna mysql 3306 --cidr-allow="10.0.0.1/32"

Либо запретить доступ из определенных подсетей:

tuna mysql 3306 --cidr-deny="10.0.0.1/32"

Можно комбинировать, например указать широкую сеть и вычесть частные IP:

tuna mysql 3306 --cidr-allow="10.0.0.1/24" --cidr-deny="10.0.0.33/32"

Фоновый сервис и несколько туннелей​

MySQL туннель можно поставить фоновым сервисом:

tuna service install --name=db -- tuna mysql 3306 --port=mysql

И описать в .tuna.yml для tuna start:

tunnels:
mysql:
commandLine: tuna mysql 3306 --port=mysql

Инспектор запросов​

Инспектор включён всегда и доступен по адресу http://127.0.0.1:4040: слева список сессий, справа запросы выбранной сессии с длительностью, результатом и ошибками. Следующий туннель займёт порт 4041, фиксированный порт задаётся флагом --inspect-port или переменной TUNA_INSPECT_PORT. Если инспектор не нужен, используйте TCP туннель.

CLI пишет адрес инспектора в лог и показывает в шапке интерфейса в терминале. Подробнее — на странице инспектора.

Сессия MySQL: PREPARE и EXECUTE с текстом запроса