> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# MySQL 딕셔너리 소스

> ClickHouse에서 MySQL을 딕셔너리 소스로 구성합니다.

설정 예시:

<Tabs>
  <Tab title="DDL">
    ```sql theme={null}
    SOURCE(MYSQL(
        port 3306
        user 'clickhouse'
        password 'qwerty'
        replica(host 'example01-1' priority 1)
        replica(host 'example01-2' priority 1)
        db 'db_name'
        table 'table_name'
        where 'id=10'
        invalidate_query 'SQL_QUERY'
        fail_on_connection_loss 'true'
        query 'SELECT id, value_1, value_2 FROM db_name.table_name'
        enable_compression 1
    ))
    ```
  </Tab>

  <Tab title="설정 파일">
    ```xml theme={null}
    <source>
      <mysql>
          <port>3306</port>
          <user>clickhouse</user>
          <password>qwerty</password>
          <replica>
              <host>example01-1</host>
              <priority>1</priority>
          </replica>
          <replica>
              <host>example01-2</host>
              <priority>1</priority>
          </replica>
          <db>db_name</db>
          <table>table_name</table>
          <where>id=10</where>
          <invalidate_query>SQL_QUERY</invalidate_query>
          <fail_on_connection_loss>true</fail_on_connection_loss>
          <query>SELECT id, value_1, value_2 FROM db_name.table_name</query>
          <enable_compression>1</enable_compression>
      </mysql>
    </source>
    ```
  </Tab>
</Tabs>

<br />

설정 필드:

| 설정 | 설명 |
| - | - |
| `port` | MySQL 서버의 포트입니다. 모든 레플리카에 대해 지정하거나, 각 레플리카별로(`<replica>` 내부에) 개별 지정할 수 있습니다. |
| `user` | MySQL 사용자 이름입니다. 모든 레플리카에 대해 지정하거나, 각 레플리카별로(`<replica>` 내부에) 개별 지정할 수 있습니다. |
| `password` | MySQL 사용자의 비밀번호입니다. 모든 레플리카에 대해 지정하거나, 각 레플리카별로(`<replica>` 내부에) 개별 지정할 수 있습니다. |
| `replica` | 레플리카 구성 섹션입니다. 여러 개를 지정할 수 있습니다. |
| `replica/host` | MySQL 호스트입니다. |
| `replica/priority` | 레플리카 우선순위입니다. 연결을 시도할 때 ClickHouse는 우선순위 순서대로 레플리카를 탐색합니다. 숫자가 낮을수록 우선순위가 높습니다. |
| `db` | DB 이름입니다. |
| `table` | 테이블 이름입니다. |
| `where` | 선택 조건입니다. 조건 구문은 MySQL의 `WHERE` 절과 동일하며, 예를 들어 `id > 10 AND id < 20`처럼 작성합니다. 선택 사항입니다. |
| `invalidate_query` | 딕셔너리 상태를 확인하는 쿼리입니다. 선택 사항입니다. 자세한 내용은 [LIFETIME을 사용한 딕셔너리 데이터 갱신](/ko/reference/statements/create/dictionary/lifetime) 섹션을 참조하십시오. |
| `fail_on_connection_loss` | 연결이 끊어졌을 때 서버 동작을 제어합니다. `true`이면 클라이언트와 서버 간 연결이 끊어진 경우 즉시 예외가 발생합니다. `false`이면 서버는 오류를 보고하기 전에 데이터를 가져오려고 최소 세 번 재시도합니다. 재시도하면 응답 시간이 늘어날 수 있습니다. 기본값은 `false`입니다. |
| `query` | 사용자 지정 쿼리입니다. 선택 사항입니다. |
| `enable_compression` | MySQL 프로토콜 연결에 zlib 압축을 활성화합니다. `1`로 설정하면 ClickHouse가 MySQL 서버에 프로토콜 수준 압축을 요청합니다. `<replica>` 내부에서 레플리카별로도 설정할 수 있습니다. 기본값은 `0`입니다. |
| `enable_local_infile` | MySQL 서버가 ClickHouse에 로컬 파일의 내용을 요청할 수 있도록 허용합니다(`LOAD DATA LOCAL INFILE`). 서버 설정 파일에 정의된 딕셔너리만 이를 활성화할 수 있으며, `CREATE DICTIONARY` 쿼리에서는 설정하지 않거나 `0`으로 설정해야 합니다. `<replica>` 내부에서 레플리카별로도 설정할 수 있으며, 값을 설정하지 않은 `<replica>`는 상위 값을 상속합니다. 기본값은 `0`입니다. |
| `ssl_ca_pem` | MySQL 서버 인증서를 검증하는 데 사용하는 CA 인증서의 내용입니다. 선택 사항입니다. |
| `ssl_cert_pem` | 인증서 기반 인증에 사용하는 클라이언트 인증서의 내용입니다. 선택 사항입니다. |
| `ssl_key_pem` | `ssl_cert_pem`에 해당하는 private key의 내용입니다. 선택 사항입니다. |
| `ssl_ca`, `ssl_cert`, `ssl_key` | 동일한 자격 증명을 서버의 파일 경로로 지정합니다. 서버 설정 파일에 정의된 딕셔너리 또는 거기에 정의된 명명된 컬렉션을 통해서만 허용되며, 아래를 참조하십시오. 선택 사항입니다. |

<Note>
  `table` 또는 `where` 필드는 `query` 필드와 함께 사용할 수 없습니다. 또한 `table` 또는 `query` 필드 중 하나는 반드시 선언해야 합니다.
</Note>

<Note>
  `ssl_ca`, `ssl_cert`, `ssl_key`는 서버가 자신의 권한으로 여는 파일을 지정하므로, 서버 설정 파일에 정의된 딕셔너리 또는 거기에 정의된 명명된 컬렉션을 통해서만 허용됩니다. TLS 자격 증명을 직접 지정하는 `CREATE DICTIONARY` 쿼리는 대신 그 내용을 `ssl_ca_pem`, `ssl_cert_pem`, `ssl_key_pem`으로 전달해야 합니다. 이 값들은 비밀번호와 마찬가지로 로그와 `SHOW` 쿼리에서 마스킹됩니다.
</Note>

<Note>
  `enable_local_infile`은 MySQL 서버가 임의로 선택한 파일의 내용을 ClickHouse에 요청할 수 있게 하며, 서버는 자신의 권한으로 해당 파일을 읽습니다. 따라서 서버 설정 파일에 정의된 딕셔너리에서만 허용됩니다. 소스 또는 그 `<replica>` 항목 중 하나에서 이를 활성화하는 `CREATE DICTIONARY` 쿼리는 `BAD_ARGUMENTS` 오류로 거부됩니다.
</Note>

<Note>
  명시적인 `secure` 매개변수는 없습니다. SSL 연결을 설정할 때 보안은 필수입니다.
</Note>

MySQL은 소켓을 통해 로컬 호스트에 연결할 수 있습니다. 이를 위해서는 `host`와 `socket`을 설정하십시오.

설정 예시:

<Tabs>
  <Tab title="DDL">
    ```sql theme={null}
    SOURCE(MYSQL(
        host 'localhost'
        socket '/path/to/socket/file.sock'
        user 'clickhouse'
        password 'qwerty'
        db 'db_name'
        table 'table_name'
        where 'id=10'
        invalidate_query 'SQL_QUERY'
        fail_on_connection_loss 'true'
        query 'SELECT id, value_1, value_2 FROM db_name.table_name'
    ))
    ```
  </Tab>

  <Tab title="설정 파일">
    ```xml theme={null}
    <source>
      <mysql>
          <host>localhost</host>
          <socket>/path/to/socket/file.sock</socket>
          <user>clickhouse</user>
          <password>qwerty</password>
          <db>db_name</db>
          <table>table_name</table>
          <where>id=10</where>
          <invalidate_query>SQL_QUERY</invalidate_query>
          <fail_on_connection_loss>true</fail_on_connection_loss>
          <query>SELECT id, value_1, value_2 FROM db_name.table_name</query>
      </mysql>
    </source>
    ```
  </Tab>
</Tabs>
