[Документация Yandex Cloud](../../../index.md) > [Yandex Managed Service for MySQL®](../../index.md) > [Пошаговые инструкции](../index.md) > [Подключение](index.md) > Подключение из приложений

# Подключение к кластеру MySQL® из приложений

В этом разделе представлены настройки для подключения к хостам кластера Managed Service for MySQL® с помощью [инструментов командной строки](#command-line-tools), из [графических IDE](#connection-ide), из [Yandex WebSQL](#websql) и [Docker-контейнера](#connection-docker). О подключении из кода вашего приложения читайте в разделе [Примеры кода](code-examples.md).

## Инструменты командной строки {#command-line-tools}

Примеры кода с заполненным FQDN хоста доступны в [консоли управления](https://kz.console.yandex.cloud) по нажатию кнопки **Подключиться** на странице кластера.

### Linux (Bash)/macOS (Zsh) {#bash-zsh}

Перед подключением установите утилиту `mysql`:

```bash
sudo apt update && sudo apt install --yes mysql-client
```

{% list tabs group=connection %}

- Подключение с SSL {#with-ssl}

  ```bash
  mysql --host=<имя_хоста_MySQL®>.mdb.yandexcloud.kz \
        --port=3306 \
        --ssl-ca=~/.mysql/root.crt \
        --ssl-mode=VERIFY_IDENTITY \
        --user=<имя_пользователя> \
        --password \
        <имя_БД>
  ```

- Подключение без SSL {#without-ssl}

  ```bash
  mysql --host=<FQDN_любого_хоста_MySQL®> \
        --port=3306 \
        --ssl-mode=DISABLED \
        --user=<имя_пользователя> \
        --password \
        <имя_БД>
  ```

{% endlist %}

О том, как получить FQDN хоста, читайте в [инструкции](fqdn.md).

При выполнении любой из команд введите пароль пользователя БД.

После подключения к СУБД выполните команду `SELECT version();`.

При успешном подключении к кластеру и выполнении тестового запроса будет выведена версия MySQL®.

### Windows (PowerShell) {#powershell}

Перед подключением [скачайте](https://dev.mysql.com/downloads/shell/) и установите утилиту `MySQL Shell`.

{% list tabs group=connection %}

- Подключение с SSL {#with-ssl}

  ```PowerShell
  mysqlsh --host=<FQDN_любого_хоста_MySQL®> `
          --port=3306 `
          --ssl-ca=<абсолютный_путь_к_файлу_сертификата> `
          --ssl-mode=VERIFY_IDENTITY `
          --user=<имя_пользователя> `
          --password `
          --database=<имя_БД> `
          --sql
  ```

- Подключение без SSL {#without-ssl}

  ```PowerShell
  mysqlsh --host=<FQDN_любого_хоста_MySQL®> `
          --port=3306 `
          --ssl-mode=DISABLED `
          --user=<имя_пользователя> `
          --password `
          --database=<имя_БД>
  ```

{% endlist %}

О том, как получить FQDN хоста, читайте в [инструкции](fqdn.md).

При выполнении любой из команд введите пароль пользователя БД.

После подключения к СУБД выполните команду `SELECT version();`.

При успешном подключении к кластеру и выполнении тестового запроса будет выведена версия MySQL®.


### Подключение с аутентификацией через IAM {#iam}

К базе данных Managed Service for MySQL® можно подключиться с помощью [интерфейса командной строки Yandex Cloud (CLI)](../../../cli/quickstart.md#install), используя аутентификацию через IAM. Этот метод доступен для [аккаунтов на Яндексе](../../../iam/concepts/users/accounts.md#passport), [федеративных аккаунтов](../../../iam/concepts/users/accounts.md#saml-federation), [локальных пользователей](../../../iam/concepts/users/accounts.md#local) и [сервисных аккаунтов](../../../iam/concepts/users/accounts.md#sa) (далее — аккаунты). Подключение с аутентификацией через IAM не требует получения SSL-сертификата или указания FQDN хостов кластера.

Перед подключением:

1. Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../../cli/quickstart.md#install).

    По умолчанию используется каталог, указанный при [создании](../../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

1. Установите клиент MySQL®:

    ```bash
    sudo apt update && sudo apt install --yes mysql-client
    ```

Подготовьте кластер Managed Service for MySQL® к подключению:

{% list tabs group=instructions %}

- Консоль управления {#console}

  1. Перейдите в сервис **Managed Service for&nbsp;MySQL**.
  1. Нажмите на имя нужного кластера.
  1. Включите публичный доступ для хостов кластера:
     1. Выберите вкладку **Хосты**.
     1. Нажмите значок ![image](../../../_assets/console-icons/ellipsis.svg) в строке первого хоста и выберите пункт **Редактировать**.
     1. Включите опцию **Публичный доступ**.
     1. Повторите операцию для остальных хостов кластера.
  1. Назначьте роль `managed-mysql.clusters.connector` аккаунту, который будет подключаться к БД:
     1. Выберите вкладку **Права доступа** и нажмите кнопку **Назначить роли**.
     1. Если роль выдается аккаунту на Яндексе, федеративному аккаунту или локальному пользователю, введите имя пользователя или электронную почту, к которой привязан аккаунт. Если роль выдается сервисному аккаунту, введите его имя или идентификатор. В результатах поиска выберите найденный аккаунт.
     1. Нажмите кнопку ![image](../../../_assets/console-icons/plus.svg) **Добавить роль** и выберите роль `managed-mysql.clusters.connector`.
     1. Нажмите кнопку **Сохранить**.
  1. Создайте пользователя MySQL®:
     1. Выберите вкладку **Пользователи**.
     1. Нажмите кнопку **Создать пользователя**.
     1. Выберите способ аутентификации **IAM**.
     1. Выберите аккаунт, которому была назначена роль `managed-mysql.clusters.connector`.
     1. Нажмите кнопку **Добавить базу данных** и выберите нужную базу данных из выпадающего списка.
     1. Нажмите значок ![image](../../../_assets/console-icons/plus.svg) в столбце **Роли** и выберите необходимые привилегии из выпадающего списка.
     1. Нажмите кнопку **Создать**.

{% endlist %}

Чтобы подключиться к БД Managed Service for MySQL®, выполните команду:

```bash
yc managed-mysql connect <имя_или_идентификатор_кластера> --db <имя_БД>
```

Имя и идентификатор кластера можно запросить со [списком кластеров в каталоге](../cluster-list.md#list-clusters).


## Подключение из графических IDE {#connection-ide}

**Подключения проверялись в следующем окружении:**

* Ubuntu 20.04, DBeaver: `22.2.4`;
* MacOS Monterey 12.7:
  * JetBrains DataGrip: `2023.3.4`;
  * DBeaver Community: `24.0.0`.


Подключаться из графических IDE можно только к хостам кластера в публичном доступе с использованием SSL-сертификата.


Чтобы избежать ошибок при подключении, [сохраните сертификат](https://storage.yandexcloud.kz/cloud-certs/RootCA.pem) в локальную папку, для доступа к которой не требуются права администратора.

{% list tabs group=ide %}

- DataGrip {#datagrip}

  1. Создайте источник данных:
     1. Выберите в меню **File** → **New** → **Data Source** → **MySQL®**.
     1. На вкладке **General**:
        1. Укажите параметры подключения:
           * **Host** — [FQDN любого хоста MySQL®](fqdn.md) или один из [особых FQDN](fqdn.md#fqdn-master);
           * **Port** — `3306`;
           * **User**, **Password** — имя и пароль пользователя БД;
           * **Database** — имя БД для подключения.
        1. Нажмите ссылку **Download**, чтобы загрузить драйвер соединения.
     1. На вкладке **SSH/SSL**:
         1. Включите настройку **Use SSL**.
         1. В поле **CA file** укажите путь к файлу [SSL-сертификата для подключения](fqdn.md#get-ssl-cert).
  1. Чтобы проверить подключение, нажмите ссылку **Test Connection**. При успешном подключении будет выведен статус подключения, информация о СУБД и драйвере.
  1. Нажмите кнопку **OK**, чтобы сохранить источник данных.

- DBeaver {#dbeaver}

  1. Создайте новое соединение с БД:
     1. Выберите в меню **База данных** пункт **Новое соединение**.
     1. Выберите из списка БД **MySQL®**.
     1. Нажмите кнопку **Далее**.
     1. Укажите параметры подключения на вкладке **Главное**:
        * **Сервер** — [FQDN любого хоста MySQL®](fqdn.md#fqdn) или один из [особых FQDN](fqdn.md#fqdn-master);
        * **Порт** — `3306`;
        * **База данных** — имя БД для подключения;
        * **Пользователь**, **Пароль** — имя и пароль пользователя БД.
     1. На вкладке **SSL**:
         1. Включите настройку **Использовать SSL**.
         1. В поле **Корневой сертификат** укажите путь к сохраненному файлу [SSL-сертификата](index.md#get-ssl-cert).
         1. В блоке **Дополнительные**:
            1. Включите настройку **Только SSL**.
            1. Выключите настройку **Проверять сертификат сервера**.
  1. Нажмите кнопку **Тест соединения ...** для проверки подключения. При успешном подключении будет выведен статус подключения, информация о СУБД и драйвере.
  1. Нажмите кнопку **Готово**, чтобы сохранить настройки соединения с БД.

{% endlist %}

### Подключение с аутентификацией через IAM {#ide-iam}

Для подключения к базе данных Managed Service for MySQL® из графических IDE с аутентификацией через [Yandex Identity and Access Management](../../../iam/index.md) необходимо запустить утилиту [CLI Yandex Cloud](../../../cli/index.md) в режиме слушающего прокси-сервера.

Подключение доступно для [аккаунтов на Яндексе](../../../iam/concepts/users/accounts.md#passport), [федеративных аккаунтов](../../../iam/concepts/users/accounts.md#saml-federation) и [локальных пользователей](../../../iam/concepts/users/accounts.md#local). Оно не требует получения SSL-сертификата или указания FQDN хостов кластера.

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

Чтобы подключиться к БД Managed Service for MySQL®:

1. Назначьте роль `managed-mysql.clusters.connector` аккаунту пользователя, который будет подключаться к БД:

    1. Перейдите в сервис **Managed Service for&nbsp;MySQL**.
    1. Нажмите на имя нужного кластера.
    1. Выберите вкладку **Права доступа** и нажмите кнопку **Назначить роли**.
    1. Введите электронную почту пользователя, к которой привязан аккаунт.
    1. Нажмите кнопку ![image](../../../_assets/console-icons/plus.svg) **Добавить роль** и выберите роль `managed-mysql.clusters.connector`.
    1. Нажмите кнопку **Сохранить**.

1. Создайте пользователя MySQL®:

    1. Выберите вкладку **Пользователи**.
    1. Нажмите кнопку **Создать пользователя**.
    1. Выберите способ аутентификации **IAM**.
    1. Выберите аккаунт, которому была назначена роль `managed-mysql.clusters.connector`.
    1. Нажмите кнопку **Добавить базу данных** и выберите нужную базу данных из выпадающего списка.
    1. Нажмите значок ![image](../../../_assets/console-icons/plus.svg) в столбце **Роли** и выберите необходимые привилегии из выпадающего списка.
    1. Нажмите кнопку **Создать**.

1. Запустите CLI Yandex Cloud в режиме прокси-сервера:

    1. Если у вас еще нет интерфейса командной строки Yandex Cloud (CLI), [установите и инициализируйте его](../../../cli/quickstart.md#install).

        По умолчанию используется каталог, указанный при [создании](../../../cli/operations/profile/profile-create.md) профиля CLI. Чтобы изменить каталог по умолчанию, используйте команду `yc config set folder-id <идентификатор_каталога>`. Также для любой команды вы можете указать другой каталог с помощью параметров `--folder-name` или `--folder-id`. Если вы обращаетесь к ресурсу по имени, поиск будет выполнен в каталоге по умолчанию. Если вы обращаетесь к ресурсу по идентификатору, поиск будет выполнен глобально — во всех каталогах с учетом прав доступа.

    1. Выполните команду:

        ```bash
        yc managed-mysql connect <имя_или_идентификатор_кластера> --db <имя_БД> --daemon
        ```

        Будет запущен прокси-сервер на порте `3306`. Чтобы выбрать другой порт, укажите в команде параметр `--port <номер_порта>`.

        Имя и идентификатор кластера можно запросить со [списком кластеров в каталоге](../cluster-list.md#list-clusters).

1. Подключитесь к кластеру Managed Service for MySQL®:

    {% list tabs group=ide %}

    - DBeaver {#dbeaver}

        1. Создайте новое соединение с БД:
            1. Выберите в меню **База данных** пункт **Новое соединение**.
            1. Выберите из списка БД **MySQL®**.
            1. Нажмите кнопку **Далее**.
            1. Укажите параметры подключения на вкладке **Главное**:
                * **Сервер** — `localhost`;
                * **Порт** — `3306` или порт, который вы указали при запуске прокси-сервера;
                * **База данных** — имя БД для подключения;
                * **Пользователь** — логин или электронная почта вашего аккаунта;
                * **Пароль** — оставьте это поле пустым.
        1. Нажмите кнопку **Тест соединения ...** для проверки подключения. При успешном подключении будет выведен статус подключения, информация о СУБД и драйвере.
        1. Нажмите кнопку **Готово**, чтобы сохранить настройки соединения с БД.

    - MySQL® Workbench {#mysql-workbench}

        1. Создайте новое соединение с БД:
            1. Выберите в меню **Database** пункт **Manage connections...**
            1. Нажмите кнопку **New**.
            1. Укажите параметры подключения на вкладке **Connection**:
                * **Hostname** — `127.0.0.1`;
                * **Port** — `3306` или порт, который вы указали при запуске прокси-сервера;
                * **Username** — логин или электронная почта вашего аккаунта;
                * **Default schema** — имя БД для подключения;
                * **SSL** → **Use SSL** — `No`.
        1. Нажмите кнопку **Test Connection** для проверки подключения. При успешном подключении будет выведена информация о нем.

    {% endlist %}



## Подключение из браузера {#browser}

Чтобы подключиться к кластеру Managed Service for MySQL®, войдите в [консоль управления](https://kz.console.yandex.cloud), откройте страницу нужного кластера и перейдите на вкладку **SQL**.

Для разрешения подключения включите опцию **Доступ из консоли управления** при [создании кластера](../cluster-create.md) или [изменении его настроек](../update.md#change-additional-settings).

Подробнее в разделе [SQL-запросы](../web-sql-query.md).


## Подготовка к подключению из Docker-контейнера {#connection-docker}

Чтобы подключаться к кластеру Managed Service for MySQL® из Docker-контейнера, добавьте в Dockerfile строки:

{% list tabs group=connection %}


- Подключение без SSL {#without-ssl}

  ```bash
  RUN apt-get update && \
      apt-get install mysql-client --yes
  ```


- Подключение с SSL {#with-ssl}

  ```bash
  RUN apt-get update && \
      apt-get install wget mysql-client --yes && \
      mkdir --parents ~/.mysql && \
      wget "https://storage.yandexcloud.kz/cloud-certs/CA.pem" \
           --output-document ~/.mysql/root.crt && \
      chmod 0600 ~/.mysql/root.crt
  ```

{% endlist %}