跳至主要内容

MySQL 接口

ClickHouse 支持 MySQL 线程协议。这允许某些没有原生 ClickHouse 连接器的客户端使用 MySQL 协议,并且已通过以下 BI 工具验证。

如果您尝试使用其他未经测试的客户端或集成,请注意可能存在以下限制。

  • SSL 实现可能不完全兼容;可能存在潜在的 TLS SNI 问题。
  • 特定工具可能需要方言功能(例如,MySQL 特定函数或设置)尚未实现。

如果有可用的原生驱动程序(例如,DBeaver),始终建议使用它而不是 MySQL 接口。此外,虽然大多数 MySQL 语言客户端应该可以正常工作,但 MySQL 接口不能保证完全替代使用现有 MySQL 查询的代码库。

如果您的用例涉及特定工具,该工具没有原生 ClickHouse 驱动程序,并且您想通过 MySQL 接口使用它,并且您发现某些不兼容性 - 请在 ClickHouse 存储库中 创建问题

注意

为了更好地支持上述 BI 工具的 SQL 方言,ClickHouse 的 MySQL 接口隐式地使用设置 prefer_column_name_to_alias = 1 来运行 SELECT 查询。这无法关闭,在极少数情况下会导致发送到 ClickHouse 的正常查询接口和 MySQL 查询接口之间的行为不同。

在 ClickHouse Cloud 上启用 MySQL 接口

  1. 创建 ClickHouse Cloud 服务后,在凭据屏幕上,选择 MySQL 选项卡。

Credentials screen - Prompt

  1. 切换开关以为此特定服务启用 MySQL 接口。这将为此服务公开端口 3306,并提示您使用 MySQL 连接屏幕,其中包含您唯一的 MySQL 用户名。密码将与服务的默认用户密码相同。

Credentials screen - Enabled MySQL

或者,要为现有服务启用 MySQL 接口。

  1. 确保您的服务处于 运行 状态,然后单击要为其启用 MySQL 接口的服务的“查看连接字符串”按钮。

Connection screen - Prompt MySQL

  1. 切换开关以为此特定服务启用 MySQL 接口。这将提示您输入默认密码。

Connection screen - Prompt MySQL

  1. 输入密码后,您将获得此服务的 MySQL 连接字符串提示 连接屏幕 - 已启用 MySQL

在 ClickHouse Cloud 中创建多个 MySQL 用户

默认情况下,有一个内置的 mysql4<subdomain> 用户,它使用与 default 相同的密码。<subdomain> 部分是 ClickHouse Cloud 主机名的第一个段。此格式对于使用实现安全连接但未提供 其 TLS 握手中的 SNI 信息 的工具来说是必需的,这使得在没有用户名额外提示的情况下进行内部路由变得不可能(MySQL 控制台客户端就是其中之一)。

因此,我们强烈建议在创建打算与 MySQL 接口一起使用的新用户时,遵循 mysql4<subdomain>_<username> 格式,其中 <subdomain> 是用于识别您的 Cloud 服务的提示,而 <username> 是您选择的任意后缀。

提示

对于像 foobar.us-east1.aws.clickhouse.cloud 这样的 ClickHouse Cloud 主机名,<subdomain> 部分等于 foobar,自定义 MySQL 用户名可能类似于 mysql4foobar_team1

例如,如果您需要应用额外的设置,可以创建额外的用户来使用 MySQL 接口。

  1. 可选 - 创建一个 设置配置文件 以应用于您的自定义用户。例如,my_custom_profile 具有一个额外的设置,该设置将在我们使用稍后创建的用户连接时默认应用。

    CREATE SETTINGS PROFILE my_custom_profile SETTINGS prefer_column_name_to_alias=1;

    prefer_column_name_to_alias 仅用作示例,您可以在其中使用其他设置。

  2. 创建用户 使用以下格式:mysql4<subdomain>_<username> (参见上文)。密码必须采用双 SHA1 格式。例如

    CREATE USER mysql4foobar_team1 IDENTIFIED WITH double_sha1_password BY 'YourPassword42$';

    或者,如果您想为此用户使用自定义配置文件

    CREATE USER mysql4foobar_team1 IDENTIFIED WITH double_sha1_password BY 'YourPassword42$' SETTINGS PROFILE 'my_custom_profile';

    其中 my_custom_profile 是您之前创建的配置文件的名称。

  3. 授予 新用户与所需表或数据库交互的必要权限。例如,如果您想授予仅访问 system.query_log 的权限

    GRANT SELECT ON system.query_log TO mysql4foobar_team1;
  4. 使用创建的用户通过 MySQL 接口连接到您的 ClickHouse Cloud 服务。

ClickHouse Cloud 中多个 MySQL 用户的故障排除

如果您创建了新的 MySQL 用户,并且在通过 MySQL CLI 客户端连接时看到以下错误

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading authorization packet', system error: 54

在这种情况下,请确保用户名遵循如上所述的 mysql4<subdomain>_<username> 格式 (参见上文)。

在自管理 ClickHouse 上启用 MySQL 接口

mysql_port 设置添加到服务器的配置文件中。例如,您可以在 config.d/ 文件夹 中的新 XML 文件中定义端口

<clickhouse>
<mysql_port>9004</mysql_port>
</clickhouse>

启动 ClickHouse 服务器,并查找类似于以下内容的日志消息,其中提到正在侦听 MySQL 兼容性协议

{} <Information> Application: Listening for MySQL compatibility protocol: 127.0.0.1:9004

将 MySQL 连接到 ClickHouse

以下命令演示了如何将 MySQL 客户端 mysql 连接到 ClickHouse

mysql --protocol tcp -h [hostname] -u [username] -P [port_number] [database_name]

例如

$ mysql --protocol tcp -h 127.0.0.1 -u default -P 9004 default

如果连接成功,则输出

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 20.2.1.1-ClickHouse

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

为了与所有 MySQL 客户端兼容,建议在配置文件中使用 双 SHA1 指定用户密码。如果使用 SHA256 指定用户密码,则某些客户端将无法进行身份验证(mysqljs 和旧版本的命令行工具 MySQL 和 MariaDB)。

限制

  • 不支持准备好的查询

  • 某些数据类型以字符串形式发送

要取消长时间运行的查询,请使用 KILL QUERY connection_id 语句(在进行时,它将被替换为 KILL QUERY WHERE query_id = connection_id)。例如

$ mysql --protocol tcp -h mysql_server -P 9004 default -u default --password=123 -e "KILL QUERY 123456;"