MySQL 인터페이스

MySQL 인터페이스 (MySQL interface)

ClickHouse는 MySQL 와이어 프로토콜을 지원해요. 네이티브 ClickHouse 커넥터가 없는 일부 클라이언트가 대신 MySQL 프로토콜을 활용할 수 있게 해 주죠. 여기서 Cloud와 자체 관리 배포에서 MySQL 인터페이스를 활성화하는 방법을 설명해 드릴게요.

출처: 문서

본문

ClickHouse는 MySQL 와이어 프로토콜을 지원해요. 네이티브 ClickHouse 커넥터가 없는 특정 클라이언트가 대신 MySQL 프로토콜을 활용할 수 있게 해 주며, 다음 BI 도구로 검증되었어요:

테스트되지 않은 다른 클라이언트나 통합을 시도한다면 다음과 같은 제한이 있을 수 있다는 점을 염두에 두세요:

  • SSL 구현이 완전히 호환되지 않을 수 있고, 잠재적 TLS SNI 문제가 있을 수 있어요.
  • 특정 도구가 아직 구현되지 않은 방언 특징(예: MySQL 특화 함수 또는 설정)을 요구할 수 있어요.

네이티브 드라이버가 있다면(예: DBeaver) 항상 MySQL 인터페이스 대신 그것을 사용하는 것이 좋아요. 또한 대부분의 MySQL 언어 클라이언트는 잘 동작하겠지만, MySQL 인터페이스가 기존 MySQL 쿼리가 있는 코드베이스의 드롭인 대체가 된다고 보장되지는 않아요.

네이티브 ClickHouse 드라이버가 없고 MySQL 인터페이스로 사용하고 싶은 특정 도구가 있는데 호환성 문제를 발견했다면 ClickHouse 저장소에 이슈를 생성해 주세요.

참고: 위 BI 도구들의 SQL 방언을 더 잘 지원하기 위해 ClickHouse의 MySQL 인터페이스는 prefer_column_name_to_alias = 1 설정으로 SELECT 쿼리를 암시적으로 실행해요. 이는 끌 수 없으며, 드문 엣지 케이스에서 ClickHouse의 일반 쿼리 인터페이스와 MySQL 쿼리 인터페이스에 보내진 쿼리 사이의 동작 차이로 이어질 수 있어요.

ClickHouse Cloud에서 MySQL 인터페이스 활성화하기

  1. ClickHouse Cloud 서비스를 만든 후 Connect 버튼을 클릭해요.
  2. Connect with 드롭다운을 MySQL로 변경해요.
  3. 스위치를 토글해 이 특정 서비스에 대해 MySQL 인터페이스를 활성화해요. 이렇게 하면 이 서비스에 대해 포트 3306이 노출되고, 고유한 MySQL 사용자 이름이 포함된 MySQL 연결 화면이 표시돼요. 비밀번호는 서비스의 기본 사용자 비밀번호와 동일해요.

표시된 MySQL 연결 문자열을 복사하세요.

ClickHouse Cloud에서 여러 MySQL 사용자 만들기

기본적으로 기본 사용자와 같은 비밀번호를 사용하는 내장 mysql4<subdomain> 사용자가 있어요. <subdomain> 부분은 ClickHouse Cloud 호스트 이름의 첫 번째 세그먼트예요. 이 형식은 보안 연결을 구현하지만 TLS 핸드셰이크에 SNI 정보를 제공하지 않는 도구와 함께 동작하는 데 필요해요. 사용자 이름의 추가 힌트 없이는 내부 라우팅이 불가능하기 때문이에요(MySQL 콘솔 클라이언트가 그런 도구 중 하나예요).

따라서 MySQL 인터페이스와 함께 사용할 새 사용자를 만들 때는 mysql4<subdomain>_<username> 형식을 따르기를 적극 권장해요. 여기서 <subdomain>은 Cloud 서비스를 식별하는 힌트이고 <username>은 원하는 임의의 접미사예요.

팁: foobar.us-east1.aws.clickhouse.cloud 같은 ClickHouse Cloud 호스트 이름의 경우 <subdomain> 부분은 foobar이 되고, 사용자 정의 MySQL 사용자 이름은 mysql4foobar_team1처럼 보일 수 있어요.

예를 들어 추가 설정을 적용해야 한다면 MySQL 인터페이스와 함께 사용할 추가 사용자를 만들 수 있어요.

  1. 선택 사항 — 사용자 정의 사용자에게 적용할 설정 프로필을 만들어요. 예를 들어, 나중에 만들 사용자로 연결할 때 기본적으로 적용될 추가 설정이 있는 my_custom_profile: CREATE SETTINGS PROFILE my_custom_profile SETTINGS prefer_column_name_to_alias=1; prefer_column_name_to_alias는 그냥 예시로 사용된 것이고, 다른 설정을 여기 넣을 수 있어요.
  2. 다음 형식을 사용해 사용자를 만듭니다: mysql4<subdomain>_<username> (위 참조). 비밀번호는 이중 SHA1 형식이어야 해요. 예를 들어: CREATE USER mysql4foobar_team1 IDENTIFIED WITH double_sha1_password BY 'YourPassword42$'; 또는 이 사용자에게 사용자 정의 프로필을 사용하려면: CREATE USER mysql4foobar_team1 IDENTIFIED WITH double_sha1_password BY 'YourPassword42$' SETTINGS PROFILE 'my_custom_profile'; 여기서 my_custom_profile은 앞서 만든 프로필의 이름이에요.
  3. 새 사용자에게 원하는 테이블이나 데이터베이스와 상호작용할 필요한 권한을 부여해요. 예를 들어 system.query_log에만 접근을 부여하려면: GRANT SELECT ON system.query_log TO mysql4foobar_team1;
  4. 만든 사용자로 MySQL 인터페이스를 사용해 ClickHouse Cloud 서비스에 연결해요.

ClickHouse Cloud에서 여러 MySQL 사용자 문제 해결

새 MySQL 사용자를 만들었는데 MySQL CLI 클라이언트로 연결할 때 다음 오류가 보인다면:

ERROR 2013 (HY000): Lost connection to MySQL server at 'reading authorization packet', system error: 54

이 경우 사용자 이름이 위에서 설명한 대로(위 참조) mysql4<subdomain>_<username> 형식을 따르는지 확인하세요.

자체 관리 ClickHouse에서 MySQL 인터페이스 활성화하기

mysql_port 설정을 서버 설정 파일에 추가해요. 예를 들어 config.d/ 폴더의 새 XML 파일에 포트를 정의할 수 있어요:

<clickhouse>
    <mysql_port>9004</mysql_port>
</clickhouse>

ClickHouse 서버를 시작하고 Listening for MySQL compatibility protocol을 언급하는 다음과 같은 로그 메시지를 찾아보세요:

{} <Information> Application: Listening for MySQL compatibility protocol: 127.0.0.1:9004

MySQL을 ClickHouse에 연결하기

다음 명령은 MySQL 클라이언트 mysql을 ClickHouse에 연결하는 방법을 보여줘요:

mysql --protocol tcp -h [hostname] -u [username] -P [port_number] [database_name]

예를 들어:

$ mysql --protocol tcp -h 127.0.0.1 -u default -P 9004 default

연결에 성공하면 출력:

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

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

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>

모든 MySQL 클라이언트와의 호환성을 위해 설정 파일에 이중 SHA1로 사용자 비밀번호를 지정하는 것이 권장돼요. 사용자 비밀번호가 SHA256으로 지정되면 일부 클라이언트는 인증할 수 없어요(mysqljs 및 명령줄 도구 MySQL과 MariaDB의 구버전).

제한 사항:

  • 준비된 쿼리(prepared queries)는 지원되지 않아요
  • 일부 데이터 타입은 문자열로 전송돼요

긴 쿼리를 취소하려면 KILL QUERY connection_id 문을 사용해요(처리 중에 KILL QUERY WHERE query_id = connection_id로 대체돼요). 예를 들어:

$ mysql --protocol tcp -h mysql_server -P 9004 default -u default --password=123 -e "KILL QUERY 123456;"

더 알아보기 (Learn more)