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

# Fuente de diccionario de MySQL

> Configura MySQL como fuente de diccionario en ClickHouse.

Ejemplo de configuración:

<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="Archivo de configuración">
    ```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 configuración:

| Configuración | Descripción |
| - | - |
| `port` | El puerto del servidor MySQL. Puedes especificarlo para todas las réplicas o para cada una por separado (dentro de `<replica>`). |
| `user` | Nombre del usuario de MySQL. Puedes especificarlo para todas las réplicas o para cada una por separado (dentro de `<replica>`). |
| `password` | Contraseña del usuario de MySQL. Puedes especificarla para todas las réplicas o para cada una por separado (dentro de `<replica>`). |
| `replica` | Sección de configuración de las réplicas. Puede haber varias secciones. |
| `replica/host` | El host de MySQL. |
| `replica/priority` | La prioridad de la réplica. Al intentar conectarse, ClickHouse recorre las réplicas en orden de prioridad. Cuanto menor sea el número, mayor será la prioridad. |
| `db` | Nombre de la base de datos. |
| `table` | Nombre de la tabla. |
| `where` | El criterio de selección. La sintaxis de las condiciones es la misma que la de la cláusula `WHERE` de MySQL; por ejemplo, `id > 10 AND id < 20`. Opcional. |
| `invalidate_query` | Consulta para comprobar el estado del diccionario. Opcional. Más información en la sección [Actualización de datos del diccionario mediante LIFETIME](/es/reference/statements/create/dictionary/lifetime). |
| `fail_on_connection_loss` | Controla el comportamiento del servidor ante una pérdida de conexión. Si es `true`, se genera una excepción inmediatamente si se pierde la conexión entre el cliente y el servidor. Si es `false`, el servidor reintenta obtener datos al menos tres veces antes de informar de un error. Ten en cuenta que reintentar aumenta los tiempos de respuesta. Valor predeterminado: `false`. |
| `query` | La consulta personalizada. Opcional. |
| `enable_compression` | Habilita la compresión zlib para la conexión del protocolo MySQL. Cuando se establece en `1`, ClickHouse solicita compresión a nivel de protocolo al servidor MySQL. También puede establecerse por réplica dentro de `<replica>`. Valor predeterminado: `0`. |
| `enable_local_infile` | Permite que el servidor MySQL solicite a ClickHouse el contenido de un archivo local (`LOAD DATA LOCAL INFILE`). Solo puede habilitarlo un diccionario definido en un archivo de configuración del servidor; una consulta `CREATE DICTIONARY` puede dejarlo sin establecer o establecerlo en `0`. También puede establecerse por réplica dentro de `<replica>`, y una `<replica>` que no lo establezca hereda el valor anterior. Valor predeterminado: `0`. |
| `ssl_ca_pem` | Contenido del certificado de CA con el que se verifica el certificado del servidor MySQL. Opcional. |
| `ssl_cert_pem` | Contenido del certificado de cliente para la autenticación basada en certificados. Opcional. |
| `ssl_key_pem` | Contenido de la clave privada correspondiente a `ssl_cert_pem`. Opcional. |
| `ssl_ca`, `ssl_cert`, `ssl_key` | Las mismas credenciales como rutas a archivos en el servidor. Solo se permiten para un diccionario definido en un archivo de configuración del servidor o mediante una colección con nombre definida allí; consulta más abajo. Opcional. |

<Note>
  Los campos `table` o `where` no pueden usarse junto con el campo `query`. Además, debe declararse uno de los campos `table` o `query`.
</Note>

<Note>
  `ssl_ca`, `ssl_cert` y `ssl_key` nombran archivos que el servidor abre con sus propios privilegios, por lo que solo se aceptan para un diccionario definido en un archivo de configuración del servidor o mediante una colección con nombre definida allí. Una consulta `CREATE DICTIONARY` que especifique directamente las credenciales TLS debe pasar su contenido en `ssl_ca_pem`, `ssl_cert_pem` y `ssl_key_pem`. Esos valores se enmascaran en los registros y en las consultas `SHOW`, del mismo modo que las contraseñas.
</Note>

<Note>
  `enable_local_infile` permite que el servidor MySQL solicite a ClickHouse el contenido de un archivo de su elección, que el servidor lee con sus propios privilegios, por lo que solo se acepta para un diccionario definido en un archivo de configuración del servidor. Una consulta `CREATE DICTIONARY` que lo habilite, ya sea en la fuente o en una de sus entradas `<replica>`, se rechaza con `BAD_ARGUMENTS`.
</Note>

<Note>
  No existe un parámetro `secure` explícito. Al establecer una conexión SSL, la seguridad es obligatoria.
</Note>

Se puede conectar a MySQL en un host local mediante sockets. Para ello, establece `host` y `socket`.

Ejemplo de configuración:

<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="Archivo de configuración">
    ```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>
