用戶訪問ClickHouse镐牺,需要默認的客戶端clickhouse-client吵护,但是這個工具不夠友好:
- 需要額外安裝远剩,并且使用上,不是那么nice
- clickhouse-client其實是clickhouse的軟連接宏悦,即要么全裝镐确,要么不用
啥最普及鞍摺?
答:MySQL基本所有的服務(wù)器都裝了mysql源葫,注意漏策,這里指的是mysql-client,就是那個讓你用命令行連接到MySQL服務(wù)的那個命令
ProxySQL是眾多MySQL中間件中的佼佼者臼氨,一直被Percona推崇,最近他們也放出了支持ClickHouse的版本
因此芭届,今天的話題就是:
ClickHouse+ProxySQL = Using ClickHouse like MySQL
Install
注意下載ClickHouse打頭的包
- 安裝依賴
yum -y install perl-DBD-MySQL
- 注意
- 支持ClickHouse的ProxySQL版本储矩,只支持Ubuntu 16, Debian 9, CentOS 7, and Fedora 24,其他版本的不要往下看了
啟動ProxySQL
# 默認配置文件是這個:
/etc/proxysql.cnf
# 默認是沒有這個數(shù)據(jù)目錄的:
mkdir /var/lib/proxysql
# 啟動
proxysql --clickhouse-server
# ProxySQL默認會以daemon的方式在后臺
創(chuàng)建ClickHouse用戶
- 用戶通過MySQL協(xié)議褂乍,訪問ProxySQL持隧,ProxySQL代理請求訪問ClickHouse
- 在第一步里,需要一個密碼逃片,這個密碼不是ClickHouse的屡拨,而是訪問ProxySQL的
# 登陸本地的ProxySQL
# ProxySQL端口是6032,默認用戶名密碼在配置文件里寫有
root@10.x.x.x.x:/root # mysql -h 127.0.0.1 -P 6032 -uadmin -padmin
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.5.30 (ProxySQL Admin Module)
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]> INSERT INTO clickhouse_users VALUES ('clicku','clickp',1,100);
Query OK, 1 row affected (0.00 sec)
MySQL [(none)]> select * from clickhouse_users ;
+----------+----------+--------+-----------------+
| username | password | active | max_connections |
+----------+----------+--------+-----------------+
| clicku | clickp | 1 | 100 |
+----------+----------+--------+-----------------+
1 row in set (0.00 sec)
MySQL [(none)]> LOAD CLICKHOUSE USERS TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)
MySQL [(none)]> SAVE CLICKHOUSE USERS TO DISK;
Query OK, 0 rows affected (0.00 sec)
通過MySQL客戶端連接ClickHouse
- ProxySQL默認開啟6090端口褥实,來接收用戶對ClickHouse的訪問
# 使用上面的用戶名和密碼
# 如果是不同機器呀狼,記得改IP
root@10.x.x.x.x:/root # mysql -h 127.0.0.1 -P 6090 -uclicku -pclickp --prompt "ProxySQL-ClickHouse> "
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 13
Server version: 5.5.30 (ProxySQL ClickHouse Module)
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
ProxySQL-ClickHouse>
執(zhí)行ClickHouse操作
MySQL [(none)]> select version();
+-------------------+
| version |
+-------------------+
| 5.5.30-clickhouse |
+-------------------+
1 row in set (0.00 sec)
MySQL [(none)]> select now();
+---------------------+
| now() |
+---------------------+
| 2017-12-19 15:45:26 |
+---------------------+
1 row in set (0.00 sec)
MySQL [(none)]> select today();
+------------+
| today() |
+------------+
| 2017-12-19 |
+------------+
1 row in set (0.00 sec)
# 我們的某個表 600多億
ProxySQL-ClickHouse> select count(*) from XXXXX ;
+-------------+
| count() |
+-------------+
| 62699641362 |
+-------------+
1 row in set (11.20 sec)
# 另一個表 1300多億
ProxySQL-ClickHouse> select count(*) from edge_msg_all;
+--------------+
| count() |
+--------------+
| 131929726359 |
+--------------+
1 row in set (5.30 sec)
缺點
- 缺乏clickhouse-client默認的
- SQL格式化
- SQL進度條
- 這2個功能非常之好用,格式化后的SQL非常美觀损离,如果是要發(fā)給其他人的SQL哥艇,會顯得非常專業(yè)
- 進度條功能可以明顯看到SQL的執(zhí)行進度,對于明顯慢的不能再慢的SQL僻澎,可以及時終止掉貌踏,防止把集群資源跑滿
問題
- ProxySQL目前對后端的ClickHouse支持很弱,必須是本地的ClickHouse窟勃,并且祖乳,這個ClickHouse不能有密碼,目前是寫死的秉氧,不支持修改
總結(jié)
- MySQL方式訪問ClickHouse眷昆,可以減少ClickHouse對于新手的陌生感,非常值得一試
- ProxySQL還有很多先進的功能汁咏,這里沒有展開隙赁。不確定是否提供了SQL的控制功能,如果有梆暖,那簡直太好了
Reference
Update
- 調(diào)研ProxySQL其實有一個明顯的目的伞访,那就是支持可視化方面的需求
- 在github上有非常多的數(shù)據(jù)可視化項目,如Superset轰驳、SQLPad厚掷、Metabase弟灼、Franchise等,但是只有Superset官方支持了ClickHouse冒黑,其他幾個都不支持田绑,但是支持MySQL
- 雖然ProxySQL給ClickHouse做了一層包裝,可以用MySQL協(xié)議訪問ClickHouse抡爹,但是由于各家具體產(chǎn)品在實際操作過程中的命令不同掩驱,導(dǎo)致無法使用
- Metabase
- 執(zhí)行了一個命令,
select CONCAT(DATE_FORMAT(current_timestamp, '%Y-%m-%d %H:%i:%S.%f' ), ' ', @@system_time_zone);
冬竟,這做不到啊
- 執(zhí)行了一個命令,
- SqlPad
- 獲取DB信息的時候欧穴,需要查詢INFORMATION_SCHEMA.columns,這個也做不到啊
- Franchise直接沒跑通
- Redash
- 安裝復(fù)雜泵殴,還要額外依賴PG和Redis涮帘,沒試
- 我們覺得還是繼續(xù)用Superset吧。笑诅。调缨。。
ProxySQL在ClickHouse里能干嗎吆你?
- 之所以討論這個問題弦叶,原因是有的同學(xué)對中間件產(chǎn)生了誤會,誤以為ProxySQL會主動幫你把MySQL的函數(shù)轉(zhuǎn)換成ClickHouse的函數(shù)
- 然鵝并不是這個意思
- ProxySQL的意義妇多,是提供了一個MySQL協(xié)議的通訊方式湾蔓,具體的SQL還得是ClickHouse自己的
- 說白了,以前你用Python的mysqldb模塊砌梆,寫MySQL專有的函數(shù)操作MySQL,現(xiàn)在數(shù)據(jù)庫操作類咸包、方法不用變桃序,把SQL寫成ClickHouse專門的函數(shù)或者語法,ProxySQL幫你去操作ClickHouse
- 注意一點烂瘫,如果是mysqldb模塊媒熊,需要在SQL里用db.tb的方式來指定數(shù)據(jù)庫名