本文介绍 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 bashcd /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 关闭监听地址
./config/config.xml, L159 打开监听地址
0.0.0.0 ./config/users.xml,L68 添加default用户密码,可不加密码,也可添加另外的用户名
docker-compose.yaml
文件:
version: '3.8'
services:clickhouse:image: yandex/clickhouse-server:21.9.6container_name: clickhouseports:- "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/clickhousenetworks:- my-netnetworks:my-net:
启动:
docker-compose up -d
说明:clickhouse提供http和tcp两种接口,前者端口默认为8123,后者默认为9000。按需要暴露端口即可。
客户端使用DBeaver图形化工具。
略。
双击DBeaver图标,默认情况下,未安装连接数据库。需要自己连接某种数据库,由该工具再下载。此处列出clickhouse的连接过程。
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 = Memoryinsert 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))