> ## 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 Dictionary ソース

> ClickHouse で MySQL を Dictionary ソースとして設定します。

設定例:

<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 />

設定フィールド:

| Setting | Description |
| - | - |
| `port` | MySQL サーバーのポートです。すべてのレプリカに対して指定することも、各レプリカごとに個別に指定することもできます (`<replica>` 内) 。 |
| `user` | MySQL ユーザー名です。すべてのレプリカに対して指定することも、各レプリカごとに個別に指定することもできます (`<replica>` 内) 。 |
| `password` | MySQL ユーザーのパスワードです。すべてのレプリカに対して指定することも、各レプリカごとに個別に指定することもできます (`<replica>` 内) 。 |
| `replica` | レプリカ設定のセクションです。複数指定できます。 |
| `replica/host` | MySQL ホストです。 |
| `replica/priority` | レプリカの優先度です。接続を試みる際、ClickHouse は優先度順にレプリカをたどります。数値が小さいほど優先度は高くなります。 |
| `db` | データベース名です。 |
| `table` | テーブル名です。 |
| `where` | 選択条件です。条件の構文は MySQL の `WHERE` 句と同じで、たとえば `id > 10 AND id < 20` のように指定します。省略可能です。 |
| `invalidate_query` | Dictionary の状態を確認するためのクエリです。省略可能です。詳しくは、[LIFETIME を使用した Dictionary データの更新](/ja/reference/statements/create/dictionary/lifetime) を参照してください。 |
| `fail_on_connection_loss` | 接続が失われたときのサーバーの動作を制御します。`true` の場合、クライアントとサーバー間の接続が失われると、ただちに例外がスローされます。`false` の場合、サーバーはエラーを報告する前に少なくとも 3 回データの取得を再試行します。再試行すると応答時間が長くなる点に注意してください。デフォルト値: `false`。 |
| `query` | カスタムクエリです。省略可能です。 |
| `enable_compression` | MySQL プロトコル接続で zlib 圧縮を有効にします。`1` に設定すると、ClickHouse は MySQL サーバーにプロトコルレベルの圧縮を要求します。`<replica>` 内でレプリカごとに設定することもできます。デフォルト値: `0`。 |
| `enable_local_infile` | MySQL サーバーが ClickHouse にローカルファイルの内容を要求すること (`LOAD DATA LOCAL INFILE`) を許可します。これを有効にできるのは、サーバー設定ファイルで定義された Dictionary のみです。`CREATE DICTIONARY` クエリでは、未設定のままにするか `0` に設定できます。`<replica>` 内でレプリカごとに設定することもでき、設定していない `<replica>` は上位の値を継承します。デフォルト値: `0`。 |
| `ssl_ca_pem` | MySQL サーバー証明書の検証に使用する CA certificate の内容です。省略可能です。 |
| `ssl_cert_pem` | 証明書ベース認証用のクライアント証明書の内容です。省略可能です。 |
| `ssl_key_pem` | `ssl_cert_pem` に対応する秘密鍵の内容です。省略可能です。 |
| `ssl_ca`, `ssl_cert`, `ssl_key` | 同じ認証情報をサーバー上のファイルへのパスとして指定します。サーバー設定ファイルで定義された Dictionary、またはそこで定義された 名前付きコレクション を通じてのみ使用できます。以下を参照してください。省略可能です。 |

<Note>
  `table` フィールドまたは `where` フィールドは、`query` フィールドと併用できません。また、`table` フィールドまたは `query` フィールドのいずれか一方は必ず指定する必要があります。
</Note>

<Note>
  `ssl_ca`、`ssl_cert`、`ssl_key` は、サーバーが自身の権限で開くファイルを指定するため、サーバー設定ファイルで定義された Dictionary、またはそこで定義された名前付きコレクションを通じてのみ受け付けられます。TLS の認証情報を直接指定する `CREATE DICTIONARY` クエリでは、代わりにその内容を `ssl_ca_pem`、`ssl_cert_pem`、`ssl_key_pem` に渡す必要があります。これらの値は、パスワードと同様に、ログおよび `SHOW` クエリではマスクされます。
</Note>

<Note>
  `enable_local_infile` は、MySQL サーバーが任意に選んだファイルの内容を ClickHouse に要求できるようにするものであり、そのファイルはサーバーが自身の権限で読み取ります。そのため、サーバー設定ファイルで定義された Dictionary でのみ受け付けられます。ソースまたはその `<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>
