# Удаленное подключение к базе данных

Source: https://support.kapsulehost.com/ru-ru/database-remote-access

Где найти учётные данные вашей базы данных, почему прямые удалённые подключения по порту 3306 отклоняются, и как подключить настольный инструмент через SSH-туннель.

Каждый сайт KapsuleHost с базой данных получает собственную базу данных, собственного пользователя базы данных и учётные данные, которые вы можете посмотреть в любой момент. Чего вы не можете сделать, так это подключиться к ней напрямую через интернет, и это сделано намеренно. В этом руководстве рассказывается об учётных данных, о двух поддерживаемых способах подключения и о том, как настроить туннель, необходимый настольным инструментам для работы с базами данных.

## Где найти учётные данные

Перейдите в **Веб-сайты**, выберите сайт, затем **База данных**.

На странице отображаются пять полей:

| Поле | Значение |
|---|---|
| Host | `127.0.0.1` |
| Port | `3306` |
| Database | имя вашей базы данных |
| Username | ваш пользователь базы данных |
| Password | скрыт, с кнопкой показа и кнопкой копирования |

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

Сервер базы данных работает на MariaDB 10.11, которая совместима с MySQL. Это важно по одной практической причине: дамп, экспортированный из недавней версии MySQL, может содержать кодировки сортировки (collation), которые MariaDB не распознаёт, и импорт завершится с ошибкой "unknown collation". Если так случилось, экспортируйте снова, используя широко совместимую кодировку сортировки, например `utf8mb4_unicode_ci`, или найдите и замените её в файле дампа перед импортом.

![Вкладка Database для сайта в KPanel, показывающая данные подключения к базе данных](https://support.kapsulehost.com/help/screenshots/database-remote-access.84df4ba6.webp)

## Почему хостом указан 127.0.0.1

`127.0.0.1` означает "эта машина". Сервер базы данных слушает только собственный внутренний интерфейс машины, и порт 3306 также закрыт для интернета на уровне файрвола. В панели нет настройки, чтобы его открыть, и нет списка разрешённых IP-адресов для него.

Это не упущение. Порт базы данных, открытый в интернет, одна из самых часто эксплуатируемых уязвимостей в хостинге: его постоянно сканируют, он выдаёт информацию о версии любому, кто подключится, а один слабый пароль может стоить вам всего сайта. Закрытый порт полностью устраняет этот риск.

Поэтому строка подключения, использующая публичный IP-адрес вашего сайта и порт 3306, всегда будет давать сбой, откуда угодно, на любом тарифе. Вместо этого есть два поддерживаемых способа подключения.

## Вариант 1: phpMyAdmin в браузере

Самый простой способ для быстрого просмотра, правки или небольшого импорта либо экспорта.

На странице Database нажмите **Открыть phpMyAdmin**. Вы будете сразу авторизованы с учётными данными вашего сайта и увидите только свои собственные базы данных.

Ссылка, которая это делает, намеренно короткоживущая, и она даёт сбои, которые выглядят как ошибки, но таковыми не являются:

- **Она действует 60 секунд.** Нажимайте на неё сразу, как только она появится.
- **Она работает один раз.** Возврат назад и перезагрузка страницы не сработают; создайте новую ссылку.
- **Она должна открываться из того же браузера и той же сети**, из которой вы её запросили. Если вы скопируете ссылку на другое устройство или ваше соединение изменит адрес на полпути, она будет отклонена.

Если вы видите сообщение "This link has already been used" или сообщение о несоответствии IP-адреса, значит защита работает. Вернитесь на страницу Database и снова нажмите кнопку.

Для работы непосредственно с phpMyAdmin см. [Использование phpMyAdmin](https://support.kapsulehost.com/ru-ru/sites-phpmyadmin).

## Вариант 2: SSH-туннель для настольных инструментов

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

### Что нужно подготовить заранее

SSH-ключ, добавленный к сайту. Аутентификация по паролю не принимается, поэтому этот шаг не является опциональным.

1. Перейдите в **Веб-сайты**, выберите сайт, **Параметры**, затем **SSH-ключи**.
2. Либо вставьте уже используемый вами публичный ключ, либо сгенерируйте новую пару ключей в панели.
3. Запомните имя пользователя, указанное на этой странице. Это системный пользователь вашего сайта, и именно под ним вы подключаетесь.

Если вы генерируете ключ в панели, **приватный ключ показывается один раз и больше никогда**. Сохраните его немедленно и храните там, где его сможете прочитать только вы.

Вы также будете получать электронное письмо каждый раз, когда к вашему сайту добавляется ключ. Это сделано намеренно. Если такое письмо пришло, а добавляли ключ не вы, отзовите его на этой же странице немедленно и прочитайте [Если ваш сайт взломан](https://support.kapsulehost.com/ru-ru/site-hacked-what-to-do).

См. [Добавление SSH-ключей](https://support.kapsulehost.com/ru-ru/adding-ssh-keys) для полной пошаговой инструкции.

> **Warning:** Учётная запись SFTP, созданная на вкладке SFTP, не подойдёт для туннеля. Такие учётные записи предназначены только для передачи файлов, без доступа к оболочке и без перенаправления портов. Для туннелирования требуется собственный SSH-пользователь сайта с ключом. См. [Доступ по SFTP](https://support.kapsulehost.com/ru-ru/sftp-access).

### Открытие туннеля

В терминале на вашей собственной машине:

```sh
ssh -N -L 3307:127.0.0.1:3306 your-ssh-user@cp1-kapsule.kapsulehost.com
```

Замените `your-ssh-user` на имя пользователя со страницы SSH-ключи. Разберём это по частям:

- `-N` означает не выполнять команду, а просто держать туннель открытым.
- `-L 3307:127.0.0.1:3306` перенаправляет порт 3307 на вашей машине на порт 3306 на сервере.
- Используется порт 3307, а не 3306, чтобы не конфликтовать с базой данных, которая может работать у вас локально.

Команда ничего не выводит, когда работает успешно. Это нормально. Оставьте окно терминала открытым столько, сколько вам нужно соединение, и нажмите Ctrl+C, чтобы закрыть его.

### Подключение вашего клиента

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

| Настройка | Значение |
|---|---|
| Host | `127.0.0.1` |
| Port | `3307` |
| Username | имя пользователя базы данных со страницы Database |
| Password | пароль базы данных со страницы Database |
| Database | имя вашей базы данных |

Обратите внимание на разделение: имя пользователя **SSH** это системный пользователь вашего сайта, а имя пользователя **базы данных** это другое имя со страницы Database. Перепутать их друг с другом безусловно самая распространённая ошибка в этом процессе.

У большинства настольных клиентов также есть встроенная опция "подключиться через SSH-туннель", которая делает ровно то же самое без отдельного терминала. Заполните SSH-хост `cp1-kapsule.kapsulehost.com`, порт 22, ваше имя пользователя SSH и файл вашего приватного ключа, затем поля базы данных, как указано выше.

См. [SSH-туннель для базы данных](https://support.kapsulehost.com/ru-ru/database-ssh-tunnel) для настройки по каждому клиенту отдельно.

## Командная строка на сервере

Если вы уверенно работаете в терминале, туннель вам вообще не нужен. Подключитесь по SSH и работайте на сервере напрямую:

```sh
ssh your-ssh-user@cp1-kapsule.kapsulehost.com
mysqldump -u DBUSER -p DBNAME > backup.sql
```

Это гораздо быстрее, чем прогонять большую базу данных через туннель, и это правильный способ сделать ручной дамп перед рискованным изменением. Для WordPress в частности, [WP-CLI](https://support.kapsulehost.com/ru-ru/wordpress-wp-cli) обычно подходит ещё лучше.

## Решение проблем

**"Connection refused" на порту 3306 с вашей собственной машины.** Ожидаемо. См. выше. Используйте туннель.

**Команда туннеля запрашивает пароль.** Ваш ключ не предлагается или не установлен. Проверьте, что ключ есть на странице SSH-ключи, и добавьте `-i /path/to/your/private/key` к команде.

**"Permission denied (publickey)".** Неверное имя пользователя или неверный ключ. Имя пользователя указано на странице SSH-ключи, это не ваш адрес электронной почты для входа в KapsuleHost.

**"Address already in use" для порта 3307.** Туннель уже открыт, или этот порт занят чем-то ещё. Закройте другой туннель или выберите другой локальный порт, например 3308.

**Туннель открывается, но клиент не может подключиться.** Убедитесь, что ваш клиент направлен на `127.0.0.1` и выбранный вами локальный порт, а не на ваш домен.

**"Access denied for user".** Это учётные данные базы данных, а не SSH. Снова раскройте и скопируйте их со страницы Database.

**"Unknown collation" при импорте.** Описано выше. Экспортируйте заново с совместимой кодировкой сортировки.

> **Important:** Всё, что вы делаете в клиенте базы данных, происходит немедленно и не может быть отменено. Нет шага подтверждения и нет корзины. Сделайте резервную копию перед тем, как выполнять что-либо, что изменяет данные. См. [Создание резервной копии](https://support.kapsulehost.com/ru-ru/taking-a-backup).

## Похожие руководства

- [Использование phpMyAdmin](https://support.kapsulehost.com/ru-ru/sites-phpmyadmin)
- [SSH-туннель для базы данных](https://support.kapsulehost.com/ru-ru/database-ssh-tunnel)
- [Добавление SSH-ключей](https://support.kapsulehost.com/ru-ru/adding-ssh-keys)
- [Доступ по SFTP](https://support.kapsulehost.com/ru-ru/sftp-access)
- [Создание резервной копии](https://support.kapsulehost.com/ru-ru/taking-a-backup)
- [Сайты](https://support.kapsulehost.com/ru-ru/sites-overview)
- [Глоссарий хостинга](https://support.kapsulehost.com/ru-ru/glossary)
