Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

MySQL

Не поддерживается в ClickHouse Cloud

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

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

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

  • RENAME
  • CREATE TABLE
  • ALTER

Создание базы данных

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 — пароль пользователя.

Настройки

enable_compression

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

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

Пример:

CREATE DATABASE mysql_db
ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password')
SETTINGS enable_compression = 1;

TLS/SSL

Учётные данные для зашифрованного подключения к MySQL передаются как ключи именованной коллекции (или как аргументы «ключ-значение»):

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

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

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

Поддерживаемые типы данных

MySQL ClickHouse
UNSIGNED TINYINT UInt8
TINYINT Int8
UNSIGNED SMALLINT UInt16
SMALLINT Int16
UNSIGNED INT, UNSIGNED MEDIUMINT UInt32
INT, MEDIUMINT Int32
UNSIGNED BIGINT UInt64
BIGINT Int64
FLOAT Float32
DOUBLE Float64
DATE Date
DATETIME, TIMESTAMP DateTime
BINARY FixedString
POINT Point
LINESTRING LineString
POLYGON Polygon
MULTILINESTRING MultiLineString
MULTIPOLYGON MultiPolygon
MULTIPOINT MultiPoint
GEOMETRY Geometry

Преобразованием пространственных типов (за исключением POINT, который преобразуется всегда) управляет флаг geometry настройки mysql_datatypes_support_level, включённой по умолчанию. Общий тип столбца GEOMETRY сопоставляется с универсальным типом Geometry (Variant над конкретными геометрическими типами). Поскольку такой столбец может содержать значение любого подтипа, при чтении значения, подтип которого не имеет аналога в ClickHouse (GEOMETRYCOLLECTION), генерируется исключение; такая несовместимость допустима в обмен на полноценный геометрический тип. Столбцы, объявленные с типом GEOMETRYCOLLECTION, как и все остальные типы данных MySQL, преобразуются в String.

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

Поддержка глобальных переменных

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

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

  • version
  • max_allowed_packet

Пример:

SELECT @@version;

Примеры использования

Таблица в MySQL:

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:

CREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password') SETTINGS read_write_timeout=10000, connect_timeout=100;
SHOW DATABASES
┌─name─────┐
│ default  │
│ mysql_db │
│ system   │
└──────────┘
SHOW TABLES FROM mysql_db
┌─name─────────┐
│  mysql_table │
└──────────────┘
SELECT * FROM mysql_db.mysql_table
┌─int_id─┬─value─┐
│      1 │     2 │
└────────┴───────┘
INSERT INTO mysql_db.mysql_table VALUES (3,4)
SELECT * FROM mysql_db.mysql_table
┌─int_id─┬─value─┐
│      1 │     2 │
│      3 │     4 │
└────────┴───────┘
Navigation