> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

> Позволяет подключаться к базам данных на удалённом сервере MySQL и выполнять запросы `INSERT` и `SELECT` для обмена данными между ClickHouse и MySQL.

# MySQL

export const CloudNotSupportedBadge = () => {
  return <a href="https://clickhouse.com/docs/products/cloud/guides/cloud-compatibility#list-of-unsupported-features" className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Не поддерживается в ClickHouse Cloud
        </a>;
};

<CloudNotSupportedBadge />

Позволяет подключаться к базам данных на удалённом сервере MySQL и выполнять запросы `INSERT` и `SELECT` для обмена данными между ClickHouse и MySQL.

Движок базы данных `MySQL` передаёт запросы на сервер MySQL, поэтому вы можете выполнять такие операции, как `SHOW TABLES` или `SHOW CREATE TABLE`.

Следующие запросы не поддерживаются:

* `RENAME`
* `CREATE TABLE`
* `ALTER`

<div id="creating-a-database">
  ## Создание базы данных
</div>

```sql theme={null}
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')
[SETTINGS enable_compression=0]
```

**Параметры движка**

* `host:port` — адрес сервера MySQL.
* `database` — имя удалённой базы данных.
* `user` — имя пользователя MySQL.
* `password` — пароль пользователя.

**Настройки**

<div id="enable-compression">
  ### `enable_compression`
</div>

Включает сжатие zlib для подключения по протоколу MySQL. Если установлено значение `1`, ClickHouse запрашивает у сервера MySQL сжатие на уровне протокола.

Значение по умолчанию: `0`.

Пример:

```sql theme={null}
CREATE DATABASE mysql_db
ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password')
SETTINGS enable_compression = 1;
```

<div id="tls-ssl">
  ## TLS/SSL
</div>

Учётные данные для зашифрованного подключения к MySQL передаются как ключи [именованной коллекции](/docs/ru/concepts/features/configuration/server-config/named-collections) (или как аргументы «ключ-значение»):

| Параметр       | Описание                                                                     |
| -------------- | ---------------------------------------------------------------------------- |
| `ssl_ca_pem`   | Содержимое CA‑сертификата, по которому проверяется сертификат сервера MySQL. |
| `ssl_cert_pem` | Содержимое клиентского сертификата для аутентификации на основе сертификата. |
| `ssl_key_pem`  | Содержимое закрытого ключа, соответствующего `ssl_cert_pem`.                 |

Значения представляют собой содержимое соответствующих PEM-файлов, которое можно скопировать в именованную коллекцию или включить в запрос. Они маскируются в журналах и в запросах `SHOW` так же, как пароли.

Те же учётные данные можно также указать в виде путей к файлам на сервере в параметрах `ssl_ca`, `ssl_cert` и `ssl_key` — но **только в именованной коллекции, определённой в файле конфигурации сервера**; такое значение нельзя переопределить в запросе. Сервер открывает эти файлы со своими привилегиями, поэтому разрешение передавать путь из SQL позволило бы любому пользователю, способному определить источник MySQL, исследовать локальную файловую систему и проходить аутентификацию с помощью сертификата и ключа, к которым у него нет доступа на чтение.

<a id="data_types-support" />

<div id="data-types-support">
  ## Поддерживаемые типы данных
</div>

| MySQL                            | ClickHouse                                                      |
| -------------------------------- | --------------------------------------------------------------- |
| UNSIGNED TINYINT                 | [UInt8](/docs/ru/reference/data-types/int-uint)                      |
| TINYINT                          | [Int8](/docs/ru/reference/data-types/int-uint)                       |
| UNSIGNED SMALLINT                | [UInt16](/docs/ru/reference/data-types/int-uint)                     |
| SMALLINT                         | [Int16](/docs/ru/reference/data-types/int-uint)                      |
| UNSIGNED INT, UNSIGNED MEDIUMINT | [UInt32](/docs/ru/reference/data-types/int-uint)                     |
| INT, MEDIUMINT                   | [Int32](/docs/ru/reference/data-types/int-uint)                      |
| UNSIGNED BIGINT                  | [UInt64](/docs/ru/reference/data-types/int-uint)                     |
| BIGINT                           | [Int64](/docs/ru/reference/data-types/int-uint)                      |
| FLOAT                            | [Float32](/docs/ru/reference/data-types/float)                       |
| DOUBLE                           | [Float64](/docs/ru/reference/data-types/float)                       |
| DATE                             | [Date](/docs/ru/reference/data-types/date)                           |
| DATETIME, TIMESTAMP              | [DateTime](/docs/ru/reference/data-types/datetime)                   |
| BINARY                           | [FixedString](/docs/ru/reference/data-types/fixedstring)             |
| POINT                            | [Point](/docs/ru/reference/data-types/geo#point)                     |
| LINESTRING                       | [LineString](/docs/ru/reference/data-types/geo#linestring)           |
| POLYGON                          | [Polygon](/docs/ru/reference/data-types/geo#polygon)                 |
| MULTILINESTRING                  | [MultiLineString](/docs/ru/reference/data-types/geo#multilinestring) |
| MULTIPOLYGON                     | [MultiPolygon](/docs/ru/reference/data-types/geo#multipolygon)       |
| MULTIPOINT                       | [MultiPoint](/docs/ru/reference/data-types/geo#multipoint)           |
| GEOMETRY                         | [Geometry](/docs/ru/reference/data-types/geo#geometry)               |

Преобразованием пространственных типов (за исключением `POINT`, который преобразуется всегда) управляет флаг `geometry` настройки [`mysql_datatypes_support_level`](/docs/ru/reference/settings/session-settings/mysql#mysql_datatypes_support_level), включённой по умолчанию. Общий тип столбца `GEOMETRY` сопоставляется с универсальным типом [`Geometry`](/docs/ru/reference/data-types/geo#geometry) (`Variant` над конкретными геометрическими типами). Поскольку такой столбец может содержать значение любого подтипа, при чтении значения, подтип которого не имеет аналога в ClickHouse (`GEOMETRYCOLLECTION`), генерируется исключение; такая несовместимость допустима в обмен на полноценный геометрический тип. Столбцы, объявленные с типом `GEOMETRYCOLLECTION`, как и все остальные типы данных MySQL, преобразуются в [String](/docs/ru/reference/data-types/string).

Тип [Nullable](/docs/ru/reference/data-types/nullable) поддерживается. Пространственный столбец сопоставляется с `String` (`Nullable(String)`, если он допускает NULL) вместо геометрического типа в трёх случаях: он объявлен как `GEOMETRYCOLLECTION`; флаг `geometry` отключён и тип не `POINT`; или столбец допускает NULL и тип не `POINT`, поскольку `Point` — единственный геометрический тип, который можно вложить в `Nullable`. Во всех трёх случаях строка содержит значение в точности в том виде, в котором его возвращает MySQL: 4-байтовый префикс SRID, за которым следует полезная нагрузка WKB, поэтому перед передачей в декодер WKB удалите эти 4 начальных байта.

<div id="global-variables-support">
  ## Поддержка глобальных переменных
</div>

Для лучшей совместимости к глобальным переменным можно обращаться в стиле MySQL — как `@@identifier`.

Поддерживаются следующие переменные:

* `version`
* `max_allowed_packet`

<Note>
  На данный момент эти переменные являются заглушками и ни с чем не связаны.
</Note>

Пример:

```sql theme={null}
SELECT @@version;
```

<div id="examples-of-use">
  ## Примеры использования
</div>

Таблица в MySQL:

```text theme={null}
mysql> USE test;
Database changed

mysql> CREATE TABLE `mysql_table` (
    ->   `int_id` INT NOT NULL AUTO_INCREMENT,
    ->   `float` FLOAT NOT NULL,
    ->   PRIMARY KEY (`int_id`));
Query OK, 0 rows affected (0,09 sec)

mysql> insert into mysql_table (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)

mysql> select * from mysql_table;
+------+-----+
| int_id | value |
+------+-----+
|      1 |     2 |
+------+-----+
1 row in set (0,00 sec)
```

База данных в ClickHouse, которая обменивается данными с сервером MySQL:

```sql theme={null}
CREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password') SETTINGS read_write_timeout=10000, connect_timeout=100;
```

```sql theme={null}
SHOW DATABASES
```

```text theme={null}
┌─name─────┐
│ default  │
│ mysql_db │
│ system   │
└──────────┘
```

```sql theme={null}
SHOW TABLES FROM mysql_db
```

```text theme={null}
┌─name─────────┐
│  mysql_table │
└──────────────┘
```

```sql theme={null}
SELECT * FROM mysql_db.mysql_table
```

```text theme={null}
┌─int_id─┬─value─┐
│      1 │     2 │
└────────┴───────┘
```

```sql theme={null}
INSERT INTO mysql_db.mysql_table VALUES (3,4)
```

```sql theme={null}
SELECT * FROM mysql_db.mysql_table
```

```text theme={null}
┌─int_id─┬─value─┐
│      1 │     2 │
│      3 │     4 │
└────────┴───────┘
```
