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

# Source de dictionnaire MySQL

> Configurer MySQL comme source de dictionnaire dans ClickHouse.

Exemple de paramètres :

<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="Fichier de configuration">
    ```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 />

Champs des paramètres :

| Paramètre | Description |
| - | - |
| `port` | Port du serveur MySQL. Vous pouvez le spécifier pour toutes les répliques, ou individuellement pour chacune d’elles (dans `<replica>`). |
| `user` | Nom de l’utilisateur MySQL. Vous pouvez le spécifier pour toutes les répliques, ou individuellement pour chacune d’elles (dans `<replica>`). |
| `password` | Mot de passe de l’utilisateur MySQL. Vous pouvez le spécifier pour toutes les répliques, ou individuellement pour chacune d’elles (dans `<replica>`). |
| `replica` | Section de configuration des répliques. Il peut y avoir plusieurs sections. |
| `replica/host` | Hôte MySQL. |
| `replica/priority` | Priorité de la réplique. Lors d’une tentative de connexion, ClickHouse parcourt les répliques par ordre de priorité. Plus le nombre est faible, plus la priorité est élevée. |
| `db` | Nom de la base de données. |
| `table` | Nom de la table. |
| `where` | Critère de sélection. La syntaxe des conditions est la même que celle de la clause `WHERE` dans MySQL, par exemple `id > 10 AND id < 20`. Facultatif. |
| `invalidate_query` | Requête permettant de vérifier l’état du dictionnaire. Facultatif. Pour en savoir plus, consultez la section [Actualisation des données du dictionnaire à l’aide de LIFETIME](/fr/reference/statements/create/dictionary/lifetime). |
| `fail_on_connection_loss` | Contrôle le comportement du serveur en cas de perte de connexion. Si `true`, une exception est immédiatement levée si la connexion entre le client et le serveur est perdue. Si `false`, le serveur réessaie de récupérer les données au moins trois fois avant de signaler une erreur. Notez que ces nouvelles tentatives augmentent le temps de réponse. Valeur par défaut : `false`. |
| `query` | Requête personnalisée. Facultatif. |
| `enable_compression` | Active la compression zlib pour la connexion utilisant le protocole MySQL. Lorsqu’elle est définie sur `1`, ClickHouse demande une compression au niveau du protocole au serveur MySQL. Peut également être définie pour chaque réplique dans `<replica>`. Valeur par défaut : `0`. |
| `enable_local_infile` | Autorise le serveur MySQL à demander à ClickHouse le contenu d’un fichier local (`LOAD DATA LOCAL INFILE`). Seul un dictionnaire défini dans un fichier de configuration du serveur peut l’activer ; une requête `CREATE DICTIONARY` peut la laisser non définie ou la définir sur `0`. Peut également être définie pour chaque réplique dans `<replica>`, et une `<replica>` qui ne la définit pas hérite de la valeur ci-dessus. Valeur par défaut : `0`. |
| `ssl_ca_pem` | Contenu du certificat de l’autorité de certification (CA) utilisé pour vérifier le certificat du serveur MySQL. Facultatif. |
| `ssl_cert_pem` | Contenu du certificat client, pour l’authentification basée sur certificat. Facultatif. |
| `ssl_key_pem` | Contenu de la clé privée associée à `ssl_cert_pem`. Facultatif. |
| `ssl_ca`, `ssl_cert`, `ssl_key` | Les mêmes identifiants sous forme de chemins vers des fichiers sur le serveur. Autorisés uniquement pour un dictionnaire défini dans un fichier de configuration du serveur, ou via une collection nommée qui y est définie, voir ci-dessous. Facultatif. |

<Note>
  Les champs `table` ou `where` ne peuvent pas être utilisés avec le champ `query`. L’un des champs `table` ou `query` doit obligatoirement être déclaré.
</Note>

<Note>
  `ssl_ca`, `ssl_cert` et `ssl_key` désignent des fichiers que le serveur ouvre avec ses propres privilèges ; ils ne sont donc acceptés que pour un dictionnaire défini dans un fichier de configuration du serveur, ou via une collection nommée qui y est définie. Une requête `CREATE DICTIONARY` qui spécifie directement les identifiants TLS doit transmettre leur contenu à la place, dans `ssl_ca_pem`, `ssl_cert_pem` et `ssl_key_pem`. Ces valeurs sont masquées dans les journaux et dans les requêtes `SHOW`, de la même manière que les mots de passe.
</Note>

<Note>
  `enable_local_infile` permet au serveur MySQL de demander à ClickHouse le contenu d’un fichier de son choix, que le serveur lit avec ses propres privilèges ; ce paramètre n’est donc accepté que pour un dictionnaire défini dans un fichier de configuration du serveur. Une requête `CREATE DICTIONARY` qui l’active, au niveau de la source ou de l’une de ses entrées `<replica>`, est rejetée avec `BAD_ARGUMENTS`.
</Note>

<Note>
  Il n’existe pas de paramètre explicite `secure`. Lors de l’établissement d’une connexion SSL, la sécurité est obligatoire.
</Note>

MySQL peut être contacté sur un hôte local via des sockets. Pour cela, définissez `host` et `socket`.

Exemple de paramètres :

<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="Fichier de configuration">
    ```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>
