今天的封面很六一,不知道儿童节会收到啥礼物。这段时间断断续续的折腾CH,简单总结起来就是:资料少,文档坑,更新频率蹭蹭蹭。
日常管理来说一般命令行方式就足够了,但是给研发同学使用,没个客户端工具还真不好意思说这是个数据库。
ClickHouse提供了两个种接口:
- HTTP 易于直接使用。
- 本机TCP 开销较小。
建议使用适当的工具或库来连接,Yandex官方支持以下方式:
- 命令行客户端
- JDBC驱动程序
- ODBC驱动程序
- C ++客户端库
非官方的第三方库工具:
这个就太多了,支持Java、Python、PHP、Go、C等各种语言的客户端库
下面就一起测试下平时常用的客户端工具,看看这挖掘技术到底哪家强。
# 0 三个默认的端口:
首先看下ClickHouse配置文件,默认对外开放以下端口:
<http_port>8123</http_port>
<tcp_port>9000</tcp_port>
<mysql_port>9004</mysql_port>
HTTP方式:
clickhouse-client 方式,需要安装官方对应的client才能使用
MySQL 方式,目前对很多客户端兼容性都不太好,这里测试一些主流的客户端。先建立一个用于测试的用户:
CREATE USER caihao HOST ANY IDENTIFIED WITH double_sha1_password BY 'caihao';
GRANT ALL ON *.* TO caihao;
!注意:
为了与所有MySQL客户端兼容,建议在配置文件中使用双SHA1密码。
如果使用SHA256密码,某些客户端可能无法进行身份验证。
# 1 MySQL Client:
对版本很挑剔,这里我用的5.7.24版本的MySQL无法进入交互方式:
但是后面-e 直接执行查询是可以的。
用MariaDB就完全没这种问题
# 2 MySQL Workbench
Workbench是Oracle官方开发,本身对于社区版和企业版MySQL支持很好,但对其他非官方版本的就不要指望了。
# 3 Navicat
Navicat 作为开发人员使用最广泛的客户端软件, 对ch也是不支持,迷之报错。
用HTTP方式同样不行:
# 4 DBeaver
免费和开源的 DBeaver ,支持几乎所有的数据库,这当然也包括ch,而且是Yandex官方推荐哦。
创建连接,可以在分析数据库中找到ch
配置好JCDB方式的连接
查看数据库对象和数据没有任何问题。
# 5 Tabix
Tabix 也是ch官方推荐的数据库管理工具,他的好处是单独部署一套web服务,用户通过浏览器就可以连接ch数据库,无需额外安装任何客户端,支持SQL语法。
安装很简单:
docker部署,3步完成
# 建立镜像:
docker build -t tabix .
# 运行容器:
docker run -d -p 8080:80 spoonest/clickhouse-tabix-web-client
# 或者,加上密码验证更安全:
docker run -d -p 8080:80 -e USER='myuser' -e PASSWORD='mypass' spoonest/clickhouse-tabix-web-client
# 通过浏览器访问:
http://10.0.0.97:8080/#!/login
连接CH,注意用http端口 8123
这种性冷淡风格,很好。
# 6 ProxySQL
既然CH自带的MySQL这也不支持,那也报错,不如干脆不用了。proxysql恰好有支持ch的版本,而且支持SQL,搞一个放前面岂不美哉。
https://github.com/sysown/proxysql/wiki/ClickHouse-Support
--1. 安装 proxysql
从 https://github.com/sysown/proxysql/releases 下载相应的版本:
wget https://github.com/sysown/proxysql/releases/download/v2.0.10/proxysql-2.0.10-1-clickhouse-centos7.x86_64.rpm
yum localinstall proxysql-2.0.10-1-clickhouse-centos7.x86_64.rpm -y
--2. 启动 proxysql:
proxysql --clickhouse-server
--3. 管理端口连接proxy:(默认管理端口是6032,客户端服务端口是6090。默认的用户名密码都是 admin。)
[root@VM_0_97_centos caihao]# mysql -uadmin -padmin -h127.0.0.1 -P6032
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.30 (ProxySQL Admin Module)
Copyright (c) 2000, 2018, 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.
[admin@127.0.0.1][(none)]> show databases;
+-----+---------------+-------------------------------------+
| seq | name | file |
+-----+---------------+-------------------------------------+
| 0 | main | |
| 2 | disk | /var/lib/proxysql/proxysql.db |
| 3 | stats | |
| 4 | monitor | |
| 5 | stats_history | /var/lib/proxysql/proxysql_stats.db |
+-----+---------------+-------------------------------------+
5 rows in set (0.00 sec)
[admin@127.0.0.1][(none)]>
看下clickhouse专属用户表:
[admin@127.0.0.1][(none)]> SHOW CREATE TABLE clickhouse_users\G
*************************** 1. row ***************************
table: clickhouse_users
Create Table: CREATE TABLE clickhouse_users (
username VARCHAR NOT NULL,
password VARCHAR,
active INT CHECK (active IN (0,1)) NOT NULL DEFAULT 1,
max_connections INT CHECK (max_connections >=0) NOT NULL DEFAULT 10000,
PRIMARY KEY (username))
1 row in set (0.00 sec)
--4. 配置新用户:
注意:ProxySQL将使用Default用户名和空密码连接到ClickHouse,这里配置的是ProxySQL的用户。
[admin@127.0.0.1][(none)]> INSERT INTO clickhouse_users VALUES ('chproxy','chproxy_Pass123',1,200);
Query OK, 1 row affected (0.00 sec)
将配置加载到运行时和磁盘:
[admin@127.0.0.1][(none)]> LOAD CLICKHOUSE USERS TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)
[admin@127.0.0.1][(none)]> SAVE CLICKHOUSE USERS TO DISK;
Query OK, 0 rows affected (0.04 sec)
--5. 测试下连接:
执行各种SQL都很6
通过Navicat试试,也没问题。
Workbench 还是不行,设定字符集失败就直接报错。
# 最后总结下这些工具:
- ClickHouse Client 官方出品,没毛病。
- DBeaver 支持最好的第三方客户端
- Tabix 有点简陋,但浏览器访问很方便
- MySQL Client <---- 还可以
- 部分版本不支持官方MySQL接口
- 加上ProxySQL好很多
- Navicat <---- 对付用
- 不支持MySQL接口
- 加上ProxySQL支持
- MySQL Workbench <---- 离开亲爹啥都不是
- 不支持MySQL接口
- 加上ProxySQL也不行