---
title: 'Подключиться к кластеру MySQL sync'
sidebar_label: 'Подключиться к кластеру'
sidebar_position: 8
description: 'Как подключиться к кластеру MySQL sync с SSL-сертификатом или без SSL-сертификата в консоли и из разных языков программирования'
---

import Formbricks from '@theme/MDXComponents/Formbricks'
import Tabs from '@theme/Tabs'
import TabItem from '@theme/TabItem'
import {TabItemLabel} from '@selectel/docux/components'
import ConnectionAddresses from '@site/docs/_partials/managed-databases/common/connection-addresses.mdx'

# Подключиться к кластеру MySQL sync

К кластеру MySQL sync можно подключиться:

* через консольный клиент mysql;
* графические инструменты для управления базами данных: [phpMyAdmin](#connect-via-phpmyadmin), MySQL Workbench, Sequel Pro и другие;
* программный код.

Для всех способов доступно подключение [с SSL](#connect-with-ssl) и [без SSL](#connect-without-SSL).

При подключении укажите [порт](#connection-ports) и [адрес](#connection-addresses).

[Количество подключений](#number-of-connections) для кластера ограничено количеством RAM.

## Порты для подключения \{#connection-ports}

Для подключения к ProxySQL используйте порт 6033.

ProxySQL автоматически распределяет запросы между нодами кластера.

## Адреса для подключения \{#connection-addresses}

<ConnectionAddresses DatabaseName="MySQL sync" slug="mysql-sync" />

## Количество подключений \{#number-of-connections}

Количество подключений для кластера MySQL sync определяется количеством RAM для нод кластера баз данных. На каждый 1 ГБ RAM доступно 50 подключений. Например, для кластера с 4 ГБ RAM доступно 200 подключений, для 6 ГБ RAM — 300 подключений.

Чтобы увеличить количество подключений, [масштабируйте кластер](/managed-databases/mysql-sync/resize-cluster.mdx) до нужного количества RAM.

## Подключиться с SSL \{#connect-with-ssl}

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

<Tabs queryString="connect-with-ssl">
  <TabItem value="bash" default>
    <TabItemLabel>
      Bash
    </TabItemLabel>

    1. Скачайте корневой сертификат и поместите его в папку `~/.mysql/`:

       ```bash
       mkdir -p ~/.mysql/
       wget https://storage.dbaas.selcloud.ru/CA.pem -O ~/.mysql/root.crt
       chmod 0600 ~/.mysql/root.crt
       ```

    2. Подключитесь к кластеру:

       ```bash
       mysql --host=<host> \
             --port=<port> \
             --user=<database_user_name> \
             --password \
             --database=<database_name> \
             --ssl-ca=~/.mysql/root.crt \
             --ssl-mode=verify_ca
       ```

       Укажите:

       * `<host>` — DNS-адрес или [публичный IP-адрес](/managed-databases/mysql-sync/public-ip.mdx) (Floating IP) ноды;
       * `<port>` — [порт для подключения](#connection-ports);
       * `<database_user_name>` — имя пользователя базы данных;
       * `<database_name>` — имя базы данных.
  </TabItem>

  <TabItem value="powershell">
    <TabItemLabel>
      PowerShell
    </TabItemLabel>

    1. В [панели управления](https://my.selectel.ru/vpc/default/dbaas/) нажмите **Скачать сертификат** для скачивания корневого сертификата и поместите его в папку `%APPDATA%\mysql\`.
    2. Подключитесь к кластеру:

       ```bash
       mysql --host=<host> `
             --port=<port> `
             --user=<database_user_name> `
             --password `
             --database=<database_name> `
             --ssl-ca=%APPDATA%\mysql\CA.pem\ `
             --ssl-mode=verify_ca
       ```

       Укажите:

       * `<host>` — DNS-адрес или [публичный IP-адрес](/managed-databases/mysql-sync/public-ip.mdx) (Floating IP) ноды;
       * `<port>` — [порт для подключения](#connection-ports);
       * `<database_user_name>` — имя пользователя базы данных;
       * `<database_name>` — имя базы данных.
  </TabItem>

  <TabItem value="python">
    <TabItemLabel>
      Python
    </TabItemLabel>

    1. Скачайте корневой сертификат и поместите его в папку `~/.mysql/`:

       ```bash
       mkdir -p ~/.mysql/
       wget https://storage.dbaas.selcloud.ru/CA.pem -O ~/.mysql/root.crt
       chmod 0600 ~/.mysql/root.crt
       ```
    2. Установите библиотеку PyMySQL:

       ```bash
       pip3 install PyMySQL
       ```
    3. Используйте пример подключения:

       ```python
       import pymysql.cursors

       connection = pymysql.connect(
           host='<host>',
           user='<database_user_name>',
           password='<password>',
           database='<database_name>',
           ssl_ca='<path>',
           ssl_verify_cert=True,
           port=<port>,
           cursorclass=pymysql.cursors.DictCursor
         )

       with connection:
           with connection.cursor() as cursor:
               cursor.execute("SELECT 40 + 2 AS sum")
               result = cursor.fetchone()
               print(result)
       ```

       Укажите:

       * `<host>` — DNS-адрес или [публичный IP-адрес](/managed-databases/mysql-sync/public-ip.mdx) (Floating IP) ноды;
       * `<database_user_name>` — имя пользователя базы данных;
       * `<password>` — пароль пользователя;
       * `<database_name>` — имя базы данных;
       * `<path>` — полный путь до корневого сертификата;
       * `<port>` — [порт для подключения](#connection-ports).
  </TabItem>

  <TabItem value="php">
    <TabItemLabel>
      PHP
    </TabItemLabel>

    1. Скачайте корневой сертификат и поместите его в папку `~/.mysql/`:

       ```bash
       mkdir -p ~/.mysql/
       wget https://storage.dbaas.selcloud.ru/CA.pem -O ~/.mysql/root.crt
       chmod 0600 ~/.mysql/root.crt
       ```

    2. Установите библиотеку mysqli:

       ```bash
       apt install php-mysqli
       ```

    3. Используйте пример подключения:

       ```php
       <?php
       $mysqli = mysqli_init();
       if (!$mysqli) {
           die("mysqli_init failed");
       }
       $mysqli->options(MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
       $mysqli->ssl_set(NULL, NULL, "<path>", NULL, NULL);

       if (
           !$mysqli->real_connect(
               "master.77c6916d-8f64-45d0-81fb-a5343bb2ff1c.c.dbaas.selcloud.ru",
               "<database_user_name>",
               "<password>",
               "<database_name>",
               <port>
           )
       ) {
           die("Connect Error: " . mysqli_connect_error());
       }

       $result = $mysqli->query("SELECT 40 + 2");

       $row = $result->fetch_row();

       echo "Result: $row[0]";

       $result->close();
       $mysqli->close();

       ?>
       ```

       Укажите:

       * `<path>` — полный путь до корневого сертификата;
       * `<host>` — DNS-адрес или [публичный IP-адрес](/managed-databases/mysql-sync/public-ip.mdx) (Floating IP) ноды;
       * `<database_user_name>` — имя пользователя базы данных;
       * `<password>` — пароль пользователя;
       * `<database_name>` — имя базы данных;
       * `<port>` — [порт для подключения](#connection-ports).
  </TabItem>

  <TabItem value="go">
    <TabItemLabel>
      Go
    </TabItemLabel>

    1. Скачайте корневой сертификат и поместите его в папку `~/.mysql/`:

       ```bash
       mkdir -p ~/.mysql/
       wget https://storage.dbaas.selcloud.ru/CA.pem -O ~/.mysql/root.crt
       chmod 0600 ~/.mysql/root.crt
       ```

    2. Используйте пример подключения:

       ```go
       package main

       import (
           "crypto/tls"
           "crypto/x509"
           "database/sql"
           "fmt"
           "github.com/go-sql-driver/mysql"
           "io/ioutil"
       )

       func main() {
           rootCertPool := x509.NewCertPool()
           pem, err := ioutil.ReadFile("<path>")
           if err != nil {
               panic(err)
           }
           if ok := rootCertPool.AppendCertsFromPEM(pem); !ok {
               panic("Failed to append PEM.")
           }
           mysql.RegisterTLSConfig("custom", &tls.Config{
               RootCAs: rootCertPool,
           })

           connectionString := fmt.Sprintf("%s:%s@tcp(%s:<port>)/%s?tls=custom",
               "<database_user_name>",
               "<password>",
               "<host>",
               "<database_name>",
           )

           db, err := sql.Open("mysql", connectionString)
           if err != nil {
               panic(err)
           }
           defer db.Close()

           var sum int64
           err = db.QueryRow("SELECT 40+2").Scan(&sum)
           if err != nil {
               panic(err)
           }
           fmt.Println(sum)

       }
       ```

       Укажите:

       * `<path>` — полный путь до корневого сертификата;
       * `<port>` — [порт для подключения](#connection-ports);
       * `<database_user_name>` — имя пользователя базы данных;
       * `<password>` — пароль пользователя;
       * `<host>` — DNS-адрес или [публичный IP-адрес](/managed-databases/mysql-sync/public-ip.mdx) (Floating IP) ноды;
       * `<database_name>` — имя базы данных.
  </TabItem>

  <TabItem value="nodejs">
    <TabItemLabel>
      Node.js
    </TabItemLabel>

    1. Скачайте корневой сертификат и поместите его в папку `~/.mysql/`:

       ```bash
       mkdir -p ~/.mysql/
       wget https://storage.dbaas.selcloud.ru/CA.pem -O ~/.mysql/root.crt
       chmod 0600 ~/.mysql/root.crt
       ```

    2. Установите библиотеку mysql2:

       ```bash
       npm install mysql2
       ```

    3. Используйте пример подключения:

       ```js
       const fs = require('fs');
       const mysql = require('mysql2');

       const config = {
         host: '<host>',
         port: <port>,
         database: '<database_name>',
         user: '<database_user_name>',
         password: '<password>',
         ssl: {
           rejectUnauthorized: true,
           ca: fs.readFileSync('<path>').toString(),
         },
       };

       const connection = mysql.createConnection(config);

       connection.query('SELECT 40 + 2 AS sum', (error, res) => {
         if (error) throw error;
         console.log(res);
         connection.end();
       });
       ```

       Укажите:

       * `<host>` — DNS-адрес или [публичный IP-адрес](/managed-databases/mysql-sync/public-ip.mdx) (Floating IP) ноды;
       * `<port>` — [порт для подключения](#connection-ports);
       * `<database_name>` — имя базы данных;
       * `<database_user_name>` — имя пользователя базы данных;
       * `<password>` — пароль пользователя;
       * `<path>` — полный путь до корневого сертификата.
  </TabItem>
</Tabs>

## Подключиться без SSL \{#connect-without-SSL}

<Tabs queryString="connect-without-ssl">
  <TabItem value="bash" default>
    <TabItemLabel>
      Bash
    </TabItemLabel>

    1. Откройте CLI.
    2. Подключитесь к кластеру:

       ```bash
       mysql --host=<host> \
             --port=<port> \
             --user=<database_user_name> \
             --password \
             --database=<database_name> \
       ```

       Укажите:

       * `<host>` — DNS-адрес или [публичный IP-адрес](/managed-databases/mysql-sync/public-ip.mdx) (Floating IP) ноды;
       * `<port>` — [порт для подключения](#connection-ports);
       * `<database_user_name>` — имя пользователя базы данных;
       * `<database_name>` — имя базы данных.
  </TabItem>

  <TabItem value="powershell">
    <TabItemLabel>
      PowerShell
    </TabItemLabel>

    1. Откройте CLI.
    2. Подключитесь к кластеру:

       ```bash
       mysql --host=<host> `
             --port=<port> `
             --user=<database_user_name> `
             --password `
             --database=<database_name>
       ```

       Укажите:

       * `<host>` — DNS-адрес или [публичный IP-адрес](/managed-databases/mysql-sync/public-ip.mdx) (Floating IP) ноды;
       * `<port>` — [порт для подключения](#connection-ports);
       * `<database_user_name>` — имя пользователя базы данных;
       * `<database_name>` — имя базы данных.
  </TabItem>

  <TabItem value="python">
    <TabItemLabel>
      Python
    </TabItemLabel>

    1. Установите библиотеку PyMySQL:

       ```bash
       pip3 install PyMySQL
       ```

    2. Используйте пример подключения:

       ```python
       import pymysql.cursors

       connection = pymysql.connect(
           host='<host>',
           user='<database_user_name>',
           password='<password>',
           database='<database_name>',
           port=<port>,
           cursorclass=pymysql.cursors.DictCursor
         )

       with connection:
           with connection.cursor() as cursor:
               cursor.execute("SELECT 40 + 2 AS sum")
               result = cursor.fetchone()
               print(result)
       ```

       Укажите:

       * `<host>` — DNS-адрес или [публичный IP-адрес](/managed-databases/mysql-sync/public-ip.mdx) (Floating IP) ноды;
       * `<database_user_name>` — имя пользователя базы данных;
       * `<password>` — пароль пользователя;
       * `<database_name>` — имя базы данных;
       * `<port>` — [порт для подключения](#connection-ports).
  </TabItem>

  <TabItem value="php">
    <TabItemLabel>
      PHP
    </TabItemLabel>

    1. Установите библиотеку mysqli:

       ```bash
       apt install php-mysqli
       ```

    2. Используйте пример подключения:

       ```php
       <?php
       $conn = new mysqli(
           "<host>:<port>",
           "<database_user_name>",
           "<password>",
           "<database_name>"
       );

       if ($conn->connect_error) {
           die("ERROR: Unable to connect: " . $conn->connect_error);
       }

       $result = $conn->query("SELECT 40 + 2");

       $row = $result->fetch_row();

       echo "Result: $row[0]";

       $result->close();
       $conn->close();
       ?>
       ```

       Укажите:

       * `<host>` — DNS-адрес или [публичный IP-адрес](/managed-databases/mysql-sync/public-ip.mdx) (Floating IP) ноды;
       * `<port>` — [порт для подключения](#connection-ports);
       * `<database_user_name>` — имя пользователя базы данных;
       * `<password>` — пароль пользователя;
       * `<database_name>` — имя базы данных.
  </TabItem>

  <TabItem value="go">
    <TabItemLabel>
      Go
    </TabItemLabel>

    Используйте пример подключения:

    ```go
    package main

    import (
        "database/sql"
        "fmt"
        "github.com/go-sql-driver/mysql"
    )

    func main() {
        connectionString := fmt.Sprintf("%s:%s@tcp(%s:<port>)/%s",
            "<database_user_name>",
            "<password>",
            "<host>",
            "<database_name>",
        )

        db, err := sql.Open("mysql", connectionString)
        if err != nil {
            panic(err.Error())
        }
        defer db.Close()

        var sum int64
        err = db.QueryRow("SELECT 40+2").Scan(&sum)
        if err != nil {
            panic(err.Error())
        }
        fmt.Println(sum)

    }
    ```

    Укажите:

    * `<port>` — [порт для подключения](#connection-ports);
    * `<database_user_name>` — имя пользователя базы данных;
    * `<password>` — пароль пользователя;
    * `<host>` — DNS-адрес или [публичный IP-адрес](/managed-databases/mysql-sync/public-ip.mdx) (Floating IP) ноды;
    * `<database_name>` — имя базы данных.
  </TabItem>

  <TabItem value="nodejs">
    <TabItemLabel>
      Node.js
    </TabItemLabel>

    1. Установите библиотеку mysql2:

       ```bash
       npm install mysql2
       ```

    2. Используйте пример подключения:

       ```js
       const mysql = require('mysql2');

       const config = {
         host: '<host>',
         port: <port>,
         database: '<database_name>',
         user: '<database_user_name>',
         password: '<password>',
       };

       const connection = mysql.createConnection(config);

       connection.query('SELECT 40 + 2 AS sum', (error, res) => {
         if (error) throw error;
         console.log(res);
         connection.end();
       });
       ```

       Укажите:

       * `<host>` — DNS-адрес или [публичный IP-адрес](/managed-databases/mysql-sync/public-ip.mdx) (Floating IP) ноды;
       * `<port>` — [порт для подключения](#connection-ports);
       * `<database_name>` — имя базы данных;
       * `<database_user_name>` — имя пользователя базы данных;
       * `<password>` — пароль пользователя.
  </TabItem>
</Tabs>

## Подключиться через phpMyAdmin \{#connect-via-phpmyadmin}

Добавьте в конфигурационный файл `/etc/phpmyadmin/config.inc.php` строки:

```php
$cfg['Servers'][$i]['auth_type'] = 'cookie';
$cfg['Servers'][$i]['host'] = '<host>';
$cfg['Servers'][$i]['connect_type'] = 'tcp';
$cfg['Servers'][$i]['port'] = '<port>';
$cfg['Servers'][$i]['compress'] = false;
$cfg['Servers'][$i]['extension'] = 'mysqli';
$cfg['Servers'][$i]['AllowNoPassword'] = false;
```

Укажите:

* `<host>` — DNS-адрес или [публичный IP-адрес](/managed-databases/mysql-sync/public-ip.mdx) (Floating IP) ноды;
* `<port>` — [порт для подключения](#connection-ports).

<Formbricks />
