Docker로 ClickHouse 실행 및 MySQL 클라이언트를 사용하여 연결

We did not find detailed instruction on running ClickHouse with Docker on the web, so we decide to provide our own step-by-step tutorial.



배경



ClickHouse®는 SQL을 사용한 실시간 분석을 위한 오픈 소스, 고성능 열 형식 OLAP 데이터베이스 관리 시스템입니다.

Docker는 개발자가 애플리케이션을 신속하게 빌드, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다. Docker는 기본 운영 체제를 추상화하는 표준화된 단위인 컨테이너에 소프트웨어를 패키징합니다.

설치



계속하기 전에 docker를 설치하십시오.

섬기는 사람



다음 명령을 실행하여 도커 컨테이너에서 ClickHouse 서버를 시작합니다.

docker run -d --name tutorial-clickhouse-server --ulimit nofile=262144:262144 --volume=$HOME/tutorial_clickhouse_database:/var/lib/clickhouse yandex/clickhouse-server


고객



다음 명령을 실행하여 기본 사용자로 ClickHouse 서버에 연결합니다.

docker run -it --rm --link tutorial-clickhouse-server:clickhouse-server yandex/clickhouse-client --host clickhouse-server


구성



기본 사용자에 대한 SQL 기반 액세스 제어 및 계정 관리 활성화



기본적으로 ClickHouse 서버는 SQL 기반 액세스 제어 및 계정 관리를 사용할 수 없지만 모든 권한이 있는 기본 사용자 계정을 제공합니다. 활성화하려면 서버 구성 파일을 편집해야 합니다.

운영

docker cp <container>:/etc/clickhouse-server/users.xml .


로컬 컴퓨터의 현재 디렉터리(마지막 점을 놓치지 마세요)에 복사합니다. 그런 다음 로컬에서 파일을 편집하려는 편집기를 사용하십시오.

users.xml에서 <access_management>1</access_management>를 추가합니다.

변경 후 파일 구조는 다음과 같아야 합니다.

<users>
    <default>
        <access_management>1</access_management>
    </default>
</users>


이는 안전하지 않으며 작업을 마친 후 다시 <access_management>0</access_management>로 변경해야 합니다.

그런 다음 실행

docker cp users.xml <container>:/etc/clickhouse-server/users.xml


오래된 것을 교체합니다.

사용자 만들기




CREATE USER user1 IDENTIFIED WITH PLAINTEXT_PASSWORD BY 'pass1';

SHOW USERS 명령으로 사용자를 확인할 수 있습니다.

데이터베이스 만들기




CREATE DATABASE IF NOT EXISTS db1

SHOW DATABASES 명령으로 데이터베이스를 확인할 수 있습니다.

사용자에게 데이터베이스 권한 부여




GRANT ALL PRIVILEGES ON db1.* TO user1


새 사용자와 연결



이제 생성된 사용자로 서버에 접속할 수 있습니다.

docker run -it --rm --link tutorial-clickhouse-server:clickhouse-server yandex/clickhouse-client --host clickhouse-server -u user1 --password pass1

SHOW GRANTS를 실행하여 사용자가 가진 권한을 확인할 수 있습니다.

테이블 생성 및 일부 쿼리 실행



테이블을 만들려면.

USE db1;
DROP TABLE IF EXISTS employees;
CREATE TABLE employees(
    id          integer,
    name        text,
    designation text,
    manager     integer,
    hired_on    date,
    salary      integer,
    commission  float,
    dept        integer
)
ENGINE = MergeTree()
PRIMARY KEY id
ORDER BY id;

SHOW TABLES를 실행하여 테이블을 확인하십시오.

실행DESCRIBE TABLE employees . 당신은 같은 것을 볼 수 있습니다

┌─name────────┬─type────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ id          │ Int32   │              │                    │         │                  │                │
│ name        │ String  │              │                    │         │                  │                │
│ designation │ String  │              │                    │         │                  │                │
│ manager     │ Int32   │              │                    │         │                  │                │
│ hired_on    │ Date    │              │                    │         │                  │                │
│ salary      │ Int32   │              │                    │         │                  │                │
│ commission  │ Float32 │              │                    │         │                  │                │
│ dept        │ Int32   │              │                    │         │                  │                │
└─────────────┴─────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘


일부 삽입을 수행합니다.

INSERT INTO employees (id, name, designation, manager, hired_on, salary, commission, dept) VALUES
    (1,'JOHNSON','ADMIN',6,'1990-12-17',18000,NULL,4)
    (2,'HARDING','MANAGER',9,'1998-02-02',52000,300,3)
    (3,'TAFT','SALES I',2,'1996-01-02',25000,500,3)
    (4,'HOOVER','SALES I',2,'1990-04-02',27000,NULL,3)
    (5,'LINCOLN','TECH',6,'1994-06-23',22500,1400,4)
    (6,'GARFIELD','MANAGER',9,'1993-05-01',54000,NULL,4)
    (7,'POLK','TECH',6,'1997-09-22',25000,NULL,4)
    (8,'GRANT','ENGINEER',10,'1997-03-30',32000,NULL,2)
    (9,'JACKSON','CEO',NULL,'1990-01-01',75000,NULL,4)
    (10,'FILLMORE','MANAGER',9,'1994-08-09',56000,NULL,2)
    (11,'ADAMS','ENGINEER',10,'1996-03-15',34000,NULL,2)
    (12,'WASHINGTON','ADMIN',6,'1998-04-16',18000,NULL,4)
    (13,'MONROE','ENGINEER',10,'2000-12-03',30000,NULL,2)
    (14,'ROOSEVELT','CPA',9,'1995-10-12',35000,NULL,1);


마지막으로 이제 몇 가지 쿼리를 실행할 수 있습니다.

SELECT designation,COUNT(*) AS nbr, (AVG(salary)) AS avg_salary FROM employees GROUP BY designation ORDER BY avg_salary DESC;
SELECT name,hired_on FROM employees ORDER BY hired_on;


MySQL 클라이언트로 ClickHouse 서버에 연결



ClickHouse는 MySQL 유선 프로토콜을 지원합니다. 구성 파일의 mysql_port 설정으로 활성화할 수 있습니다: /etc/clickhouse_server/config.xml .

기본적으로 <mysql_port>9004</mysql_port> 이어야 합니다.

섬기는 사람



다음 명령으로 ClickHouse 서버를 시작합니다. 이번에는 포트 9004가 노출됩니다.

docker run -d --name tutorial-clickhouse-server -p 9004:9004 --ulimit nofile=262144:262144 --volume=$HOME/tutorial_clickhouse_database:/var/lib/clickhouse yandex/clickhouse-server


고객



명령줄 도구 mysql을 사용하여 연결하는 예:

mysql --protocol tcp -u default -P 9004


연결에 성공하면 출력:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 0
Server version: 21.8.10.19-ClickHouse

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

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.

mysql>


결론



방금 Docker를 사용하여 ClickHouse 서버를 시작하고 연결하고 사용자, 데이터베이스, 테이블을 만들고 이에 대해 몇 가지 쿼리를 실행했습니다. MySQL 클라이언트를 사용하여 ClickHouse 서버에 연결하는 방법도 배웠습니다.

이 자습서가 마음에 들면 ClickHouse 데이터베이스를 관리하고 SQL 검토, 버전 제어, 백업 및 복원 등을 지원하는 오픈 소스 웹 기반 스키마 변경 관리 도구인 제품Bytebase에도 관심을 가질 수 있습니다. ..

좋은 웹페이지 즐겨찾기