本文介绍 clickhouse 数据库的容器化部署。
起因
某项目需生产环境数据库,因数量太大,较耗时。经询问得知生产环境中有个 clickhouse 数据库,于是抽时间用 docker 部署,一方面是不想落后于人,要学习新技术;另一方面是为了方便外网调试。
服务端部署
下载镜像
dockerhub上有许多clickhouse的镜像,这里选择较流行的,由于生产环境的版本是21.9,因此下载相近的版本。
docker pull yandex/clickhouse-server:21.9.6 # 很久未更新 只有x86版本
docker pull clickhouse/clickhouse-server:21.9.6 # 更新,在x86和arm版本
准备配置文件
启动容器,用挂载方式,从容器拷贝指定文件。操作过程如下:
docker run --rm -it -v /tmp/config:/tmp/config --rm --name click yandex/clickhouse-server:21.9.6 bash
cd /tmp/config/
cp /etc/clickhouse-server/users.xml .
cp /etc/clickhouse-server/config.d/docker_related_config.xml .
cp /etc/clickhouse-server/config.xml .
exit
配置文件在主机目录/tmp/config
中,将其拷贝到某工程目录,假定。修改配置,如下:
./config/docker_related_config.xml, L3 关闭监听地址
<!-- <listen_host>::</listen_host> -->
./config/config.xml, L159 打开监听地址
<listen_host>0.0.0.0</listen_host>
./config/users.xml,L68 添加default用户密码,可不加密码,也可添加另外的用户名
服务脚本
docker-compose.yaml
文件:
version: '3.8'
services:
clickhouse:
image: yandex/clickhouse-server:21.9.6
container_name: clickhouse
ports:
- "9999:8123"
#- "9000:9000"
volumes:
# 默认配置
- ./config/docker_related_config.xml:/etc/clickhouse-server/config.d/docker_related_config.xml
- ./config/config.xml:/etc/clickhouse-server/config.xml
- ./config/users.xml:/etc/clickhouse-server/users.xml
- /etc/localtime:/etc/localtime
# 运行日志
- ./log:/var/log/clickhouse-server
# 数据持久
- ./data:/var/lib/clickhouse
networks:
- my-net
networks:
my-net:
启动:
docker-compose up -d
说明:clickhouse提供http和tcp两种接口,前者端口默认为8123,后者默认为9000。按需要暴露端口即可。
客户端使用
客户端使用DBeaver图形化工具。
下载及安装
略。
安装驱动
双击DBeaver图标,默认情况下,未安装连接数据库。需要自己连接某种数据库,由该工具再下载。此处列出clickhouse的连接过程。
扫描二维码关注公众号,回复:
16973316 查看本文章
latelee.cn 9999
default 密码为123456
创建数据表:
create database if not exists testUSER;
DROP TABLE if exists testUSER.test_user;
CREATE TABLE if not exists default.userinfo (
`id` Nullable(String),
`age` Nullable(Int64),
`name` Nullable(String)
) ENGINE = Memory
insert into default.userinfo(id, age, name) values('001', 250,'latelee');
insert into default.userinfo(id, age, name) values('002', 252,'latelee2');
insert into default.userinfo(id, age, name) values('003', 253,'latelee3');
insert into default.userinfo(id, age, name) values('004', 254,'latelee4');
insert into default.userinfo(id, age, name) values('005', 255,'latelee5');
快捷键:
Ctrl+Enter:执行指定的sql语句。
小结
由于有现成的 docker 镜像,因此部署并没有太多困难,只是首次接触,对一些SQL语法不熟悉,导致建表、查询有点耗时。
高阶功能暂未使用到。
附
语句小结
创建数据库:
create database if not exists userinfo;
本节列出一些错误信息记录。
密码错误:
Code: 516. DB::Exception: default: Authentication failed: password is incorrect or there is no user with such name. (AUTHENTICATION_FAILED) (version 22.1.3.7 (official build))