> ## 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.

# Fonte de dicionário do MySQL

> Configure o MySQL como fonte de dicionário no ClickHouse.

Exemplo de configurações:

<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="Arquivo de configuração">
    ```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 />

Campos de configuração:

| Configuração | Descrição |
| - | - |
| `port` | A porta no servidor MySQL. Você pode especificá-la para todas as réplicas ou para cada uma individualmente (dentro de `<replica>`). |
| `user` | Nome do usuário do MySQL. Você pode especificá-lo para todas as réplicas ou para cada uma individualmente (dentro de `<replica>`). |
| `password` | Senha do usuário do MySQL. Você pode especificá-la para todas as réplicas ou para cada uma individualmente (dentro de `<replica>`). |
| `replica` | Seção de configuração da réplica. Pode haver várias seções. |
| `replica/host` | O host do MySQL. |
| `replica/priority` | A prioridade da réplica. Ao tentar se conectar, o ClickHouse percorre as réplicas em ordem de prioridade. Quanto menor o número, maior a prioridade. |
| `db` | Nome do banco de dados. |
| `table` | Nome da tabela. |
| `where` | O critério de seleção. A sintaxe das condições é a mesma da cláusula `WHERE` no MySQL, por exemplo, `id > 10 AND id < 20`. Opcional. |
| `invalidate_query` | Consulta para verificar o status do dicionário. Opcional. Leia mais na seção [Atualizando os dados do dicionário usando LIFETIME](/pt-BR/reference/statements/create/dictionary/lifetime). |
| `fail_on_connection_loss` | Controla o comportamento do servidor em caso de perda de conexão. Se `true`, uma exceção é lançada imediatamente se a conexão entre cliente e servidor for perdida. Se `false`, o servidor tenta buscar os dados novamente pelo menos três vezes antes de relatar um erro. Observe que as tentativas de repetição aumentam o tempo de resposta. Valor padrão: `false`. |
| `query` | A consulta personalizada. Opcional. |
| `enable_compression` | Habilita a compressão zlib para a conexão do protocolo MySQL. Quando definido como `1`, o ClickHouse solicita compressão no nível do protocolo ao servidor MySQL. Também pode ser definido por réplica dentro de `<replica>`. Valor padrão: `0`. |
| `enable_local_infile` | Permite que o servidor MySQL solicite ao ClickHouse o conteúdo de um arquivo local (`LOAD DATA LOCAL INFILE`). Somente um dicionário definido em um arquivo de configuração do servidor pode habilitá-lo; uma consulta `CREATE DICTIONARY` pode deixá-lo sem definição ou defini-lo como `0`. Também pode ser definido por réplica dentro de `<replica>`, e uma `<replica>` que não o define herda o valor acima. Valor padrão: `0`. |
| `ssl_ca_pem` | Conteúdo do certificado da CA usado para verificar o certificado do servidor MySQL. Opcional. |
| `ssl_cert_pem` | Conteúdo do certificado do cliente, para autenticação baseada em certificado. Opcional. |
| `ssl_key_pem` | Conteúdo da chave privada associada a `ssl_cert_pem`. Opcional. |
| `ssl_ca`, `ssl_cert`, `ssl_key` | As mesmas credenciais, como caminhos para arquivos no servidor. Permitido apenas para um dicionário definido em um arquivo de configuração do servidor ou por meio de uma coleção nomeada definida nele; veja abaixo. Opcional. |

<Note>
  Os campos `table` ou `where` não podem ser usados junto com o campo `query`. Além disso, um dos campos `table` ou `query` deve ser declarado.
</Note>

<Note>
  `ssl_ca`, `ssl_cert` e `ssl_key` nomeiam arquivos que o servidor abre com seus próprios privilégios, portanto só são aceitos para um dicionário definido em um arquivo de configuração do servidor ou por meio de uma coleção nomeada definida nele. Uma consulta `CREATE DICTIONARY` que especifique as credenciais TLS diretamente deve passar o conteúdo delas, em `ssl_ca_pem`, `ssl_cert_pem` e `ssl_key_pem`. Esses valores são mascarados nos logs e em consultas `SHOW`, da mesma forma que as senhas.
</Note>

<Note>
  `enable_local_infile` permite que o servidor MySQL solicite ao ClickHouse o conteúdo de um arquivo de sua escolha, que o servidor lê com seus próprios privilégios, portanto só é aceito para um dicionário definido em um arquivo de configuração do servidor. Uma consulta `CREATE DICTIONARY` que o habilite, na fonte ou em uma de suas entradas `<replica>`, é rejeitada com `BAD_ARGUMENTS`.
</Note>

<Note>
  Não há um parâmetro explícito `secure`. Ao estabelecer uma conexão SSL, a segurança é obrigatória.
</Note>

É possível conectar-se ao MySQL em um host local via sockets. Para isso, defina `host` e `socket`.

Exemplo de configurações:

<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="Arquivo de configuração">
    ```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>
