Using ClickHouse like MySQL by ProxySQL

用户访问ClickHouse,需要默认的客户端clickhouse-client,但是这个工具不够友好:

  1. 需要额外安装,并且使用上,不是那么nice
  2. clickhouse-client其实是clickhouse的软连接,即要么全装,要么不用

啥最普及啊?
答:MySQL

基本所有的服务器都装了mysql,注意,这里指的是mysql-client,就是那个让你用命令行连接到MySQL服务的那个命令

ProxySQL是众多MySQL中间件中的佼佼者,一直被Percona推崇,最近他们也放出了支持ClickHouse的版本

因此,今天的话题就是:
ClickHouse+ProxySQL = Using ClickHouse like MySQL

Install

1
yum -y install   perl-DBD-MySQL
  • 注意

    • 支持ClickHouse的ProxySQL版本,只支持Ubuntu 16, Debian 9, CentOS 7, and Fedora 24,其他版本的不要往下看了

启动ProxySQL

1

2

3

4

5

6

7

8

9

10
# 默认配置文件是这个:

/etc/proxysql.cnf 

# 默认是没有这个数据目录的:

mkdir /var/lib/proxysql

# 启动

proxysql --clickhouse-server

# ProxySQL默认会以daemon的方式在后台

创建ClickHouse用户

  • 用户通过MySQL协议,访问ProxySQL,ProxySQL代理请求访问ClickHouse
  • 在第一步里,需要一个密码,这个密码不是ClickHouse的,而是访问ProxySQL的
1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28
# 登陆本地的ProxySQL

# ProxySQL端口是6032,默认用户名密码在配置文件里写有

[email protected]:/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的访问
1

2

3

4

5

6

7

8

9

10

11

12

13
# 使用上面的用户名和密码

# 如果是不同机器,记得改IP

[email protected]:/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 大专栏  Using ClickHouse like MySQL by ProxySQL, 2017, Oracle, MariaDB Corporation Ab and others.

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

ProxySQL-ClickHouse>

执行ClickHouse操作

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42
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默认的

    1. SQL格式化
    2. SQL进度条
  • 这2个功能非常之好用,格式化后的SQL非常美观,如果是要发给其他人的SQL,会显得非常专业
  • 进度条功能可以明显看到SQL的执行进度,对于明显慢的不能再慢的SQL,可以及时终止掉,防止把集群资源跑满

问题

  • ProxySQL目前对后端的ClickHouse支持很弱,必须是本地的ClickHouse,并且,这个ClickHouse不能有密码,目前是写死的,不支持修改

总结

  • MySQL方式访问ClickHouse,可以减少ClickHouse对于新手的陌生感,非常值得一试
  • ProxySQL还有很多先进的功能,这里没有展开。不确定是否提供了SQL的控制功能,如果有,那简直太好了

Reference

Update

  • 调研ProxySQL其实有一个明显的目的,那就是支持可视化方面的需求
  • 在github上有非常多的数据可视化项目,如Superset、SQLPad、Metabase、Franchise等,但是只有Superset官方支持了ClickHouse,其他几个都不支持,但是支持MySQL
  • 虽然ProxySQL给ClickHouse做了一层包装,可以用MySQL协议访问ClickHouse,但是由于各家具体产品在实际操作过程中的命令不同,导致无法使用
  • Metabase
    • 执行了一个命令,select CONCAT(DATE_FORMAT(current_timestamp, '%Y-%m-%d %H:%i:%S.%f' ), ' ', @@system_time_zone);,这做不到啊
  • SqlPad
    • 获取DB信息的时候,需要查询INFORMATION_SCHEMA.columns,这个也做不到啊
  • Franchise直接没跑通
  • Redash
    • 安装复杂,还要额外依赖PG和Redis,没试
  • 我们觉得还是继续用Superset吧。。。。

ProxySQL在ClickHouse里能干吗?

  • 之所以讨论这个问题,原因是有的同学对中间件产生了误会,误以为ProxySQL会主动帮你把MySQL的函数转换成ClickHouse的函数
  • 然鹅并不是这个意思
  • ProxySQL的意义,是提供了一个MySQL协议的通讯方式,具体的SQL还得是ClickHouse自己的
  • 说白了,以前你用Python的mysqldb模块,写MySQL专有的函数操作MySQL,现在数据库操作类、方法不用变,把SQL写成ClickHouse专门的函数或者语法,ProxySQL帮你去操作ClickHouse
  • 注意一点,如果是mysqldb模块,需要在SQL里用db.tb的方式来指定数据库名

原文地址:https://www.cnblogs.com/sanxiandoupi/p/11712834.html

时间: 2024-08-30 10:59:30

Using ClickHouse like MySQL by ProxySQL的相关文章

Mysql使用ProxySQL实现读写分离

ProxySQL简介: ProxySQL是一个高性能的MySQL中间件,拥有强大的规则引擎. 详细的中文介绍:别人写的,基本跟官方无差别 官方文档:https://github.com/sysown/proxysql/wiki/ 下载地址:https://github.com/sysown/proxysql/releases 准备工作 本文所用环境: 系统均为CentOS7.4,并且关闭防火墙和selinux ProxySQL版本:proxysql-1.4.8-1-centos7.x86_64.

Mysql中间件Proxysql实现mysql主从架构读写分离

实验主机 Master: 192.168.0.17 Slave: 192.168.0.20 Proxysql:192.168.0.30建议关闭防火墙建立Master: 192.168.0.17与Slave: 192.168.0.20的MySQL主从复制架构 Proxysql:192.168.0.30主机上基于yum安装proxysql [[email protected] ~ 20:21:05]#cat <<EOF | tee /etc/yum.repos.d/proxysql.repo &g

【MySQL】【ProxySQL】ProxySQL Cluster的搭建

背景: ? 早期的ProxySQL若需要做高可用,需要搭建两个实例,进行冗余.但两个ProxySQL实例之间的数据并不能共通,在主实例上配置后,仍需要在备用节点上进行配置,对管理来说非常不方便. ? 从1.4.2版本后,ProxySQL支持原生的集群搭建,实例之间可以互通一些配置数据,大大简化了管理与维护操作. 环境: 实例名 版本 IP 系统 备注 ProxySQL 1 1.4.6 208 CentOS7 最初启动 ProxySQL 2 1.4.6 209 CentOS7 最初启动 Proxy

应用MySQL读写分离以提高MySQL服务器的读写性能

  读写分离是借助MySQL中间件 ProxySQL 实现的  ProxySQL 有两个版本:官方版和percona版,percona版是基于官方版基础上修改C++语言开发,轻量级但性能优异(支持处理千亿级数据)具有中间件所需的绝大多数功能,包括: 多种方式的读/写分离 定制基于用户.基于schema.基于语句的规则对SQL语句进行路由 缓存查询结果 后端节点监控 准备   实现读写分离前,先实现主从复制   注意:slave节点需要设置read_only=1 主机 IP地址 类型 CentOS

专职DBA-基于MHA高可用搭建MySQL读写分离架构-Atlas

专职DBA-基于MHA高可用搭建MySQL读写分离架构-Atlas 1.Atlas介绍 Atlas是由Qihoo360,Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目. 它是在mysql-proxy-0.8.2版本的基础上,对其进行了优化,增加了一些新的功能特性. 360内部使用Atlas运行的mysql业务,每天承载的读写请求数达几十亿条. 下载地址:https://github.com/Qihoo360/Atlas/releases 注意: 1.Atlas只能安装运

Mariadb10 Galera 实验小结

Mariadb10 Galera 实验小结三台服务器作此实验,信息如下:IP 机器名称 操作系统版本 数据库版本192.168.88.11 node1 Centos7.5_64 mariadb10192.168.88.12 node2 Centos7.5_64 mariadb10192.168.88.13 node3 Centos7.5_64 mariadb10一.Mariadb10 Galera 初始化准备1.初始化环境(三台机器上都操作)A)安装相关的环境包:yum -y install v

3-1-企业级架构拓展思路及集群负载均衡场景介绍

单主机不仅受限于硬件性能也受限于并发模型,select()1024scale up向上扩展,用性能更好的主机代替性能略差的主机scale out向外扩展,多加主机,分割任务,将任务分散处理,这叫做负载均衡集群load blancing cluster,简称为LB集群第一步:分散用户请求第二步:追踪用户请求状态信息,这是一个问题第三步:用户上传文件的路径在哪?使用共享存储或者专用户专机专用存储(其他用户就看不见本用户上传的文件了),要有两种共享存储,一种存图片,一种存数据(数据库) 补充知识:数据

MySQL中间件之ProxySQL(5):线程、线程池、连接池

1.ProxySQL的线程 ProxySQL由多个模块组成,是一个多线程的daemon类程序.每个模块都有一个或多个线程去执行任务. 例如,以下是刚启动ProxySQL时的进程情况,一个main进程,一个主线程,21个线程. [[email protected] ~]# pstree | grep proxy |-proxysql---proxysql---21*[{proxysql}] 下面是正常运行时使用的线程列表: 1.1 Main thread 这其实是一个进程,该进程只负责引导.启动核

MySQL ProxySQL读写分离使用初探

目的 在美团点评DBProxy读写分离使用说明文章中已经说明了使用目的,本文介绍ProxySQL的使用方法以及和DBProxy的性能差异.具体的介绍可以看官网的相关说明,并且这个中间件也是percona推的一款中间件.其特性和其他读写分离的中间件差距不大,具体的会在文中介绍.本文大致简单的介绍在使用过程中的一些说明,也可以看官方的wiki获得使用帮助. 环境:  Distributor ID: Ubuntu Description: Ubuntu 14.04.5 LTS Release: 14.