跳转到主要内容
允许连接到远程 MySQL 服务器 上的数据库,并执行 INSERTSELECT 查询,在 ClickHouse 与 MySQL 之间交换数据。 MySQL 数据库引擎会将查询转发到 MySQL 服务器,因此您可以执行 SHOW TABLESSHOW CREATE TABLE 等操作。 您无法执行以下查询:
  • RENAME
  • CREATE TABLE
  • ALTER

创建数据库

CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')
引擎参数
  • host:port — MySQL 服务器地址。
  • database — 远程数据库名称。
  • user — MySQL 用户名。
  • password — 用户密码。

数据类型支持

MySQLClickHouse
UNSIGNED TINYINTUInt8
TINYINTInt8
UNSIGNED SMALLINTUInt16
SMALLINTInt16
UNSIGNED INT, UNSIGNED MEDIUMINTUInt32
INT, MEDIUMINTInt32
UNSIGNED BIGINTUInt64
BIGINTInt64
FLOATFloat32
DOUBLEFloat64
DATEDate
DATETIME, TIMESTAMPDateTime
BINARYFixedString
其他所有 MySQL 数据类型都会被转换为 String 支持 Nullable

支持全局变量

为获得更好的兼容性,你可以使用 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 │
└────────┴───────┘
最后修改于 2026年6月10日