> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-revert-104359-revert-104251-parquet-single.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Permite conectar-se a bancos de dados em um servidor MySQL remoto e executar consultas `INSERT` e `SELECT` para transferir dados entre o ClickHouse e o MySQL.

# MySQL

export const CloudNotSupportedBadge = () => {
  return <a href="https://clickhouse.com/docs/products/cloud/guides/cloud-compatibility#list-of-unsupported-features" className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Sem suporte no ClickHouse Cloud
        </a>;
};

<CloudNotSupportedBadge />

Permite conectar-se a bancos de dados em um servidor MySQL remoto e executar consultas `INSERT` e `SELECT` para transferir dados entre o ClickHouse e o MySQL.

O mecanismo de banco de dados `MySQL` traduz consultas para o servidor MySQL, para que você possa executar operações como `SHOW TABLES` ou `SHOW CREATE TABLE`.

Não é possível executar as seguintes consultas:

* `RENAME`
* `CREATE TABLE`
* `ALTER`

<div id="creating-a-database">
  ## Criar um banco de dados
</div>

```sql theme={null}
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')
[SETTINGS enable_compression=0]
```

**Parâmetros do mecanismo**

* `host:port` — Endereço do servidor MySQL.
* `database` — Nome do banco de dados remoto.
* `user` — Usuário do MySQL.
* `password` — Senha do usuário.

**Configurações**

<div id="enable-compression">
  ### `enable_compression`
</div>

Habilita a compressão zlib para a conexão via protocolo MySQL. Quando definido como `1`, o ClickHouse solicita a compressão no nível do protocolo ao servidor MySQL.

Valor padrão: `0`.

Exemplo:

```sql theme={null}
CREATE DATABASE mysql_db
ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password')
SETTINGS enable_compression = 1;
```

<div id="tls-ssl">
  ## TLS/SSL
</div>

As credenciais de uma conexão criptografada com o MySQL são passadas como chaves de uma [coleção nomeada](/pt-BR/concepts/features/configuration/server-config/named-collections) (ou como argumentos de chave-valor):

| Parâmetro      | Descrição                                                                           |
| -------------- | ----------------------------------------------------------------------------------- |
| `ssl_ca_pem`   | Conteúdo do certificado da CA usado para verificar o certificado do servidor MySQL. |
| `ssl_cert_pem` | Conteúdo do certificado do cliente, para autenticação baseada em certificado.       |
| `ssl_key_pem`  | Conteúdo da chave privada associada a `ssl_cert_pem`.                               |

Os valores correspondem ao conteúdo dos arquivos PEM respectivos, que pode ser copiado para uma coleção nomeada ou para uma consulta. Esses valores são mascarados nos logs e em consultas `SHOW`, assim como as senhas.

As mesmas credenciais também podem ser fornecidas como caminhos para arquivos no servidor, em `ssl_ca`, `ssl_cert` e `ssl_key` — mas **somente em uma coleção nomeada definida no arquivo de configuração do servidor**; esse valor não pode ser substituído em uma consulta. O servidor abre esses arquivos usando seus próprios privilégios; portanto, aceitar um caminho via SQL permitiria que qualquer usuário capaz de definir uma fonte MySQL sondasse o sistema de arquivos local e se autenticasse com um certificado e uma chave que não tem permissão para ler.

<a id="data_types-support" />

<div id="data-types-support">
  ## Suporte a tipos de dados
</div>

| MySQL                            | ClickHouse                                                         |
| -------------------------------- | ------------------------------------------------------------------ |
| UNSIGNED TINYINT                 | [UInt8](/pt-BR/reference/data-types/int-uint)                      |
| TINYINT                          | [Int8](/pt-BR/reference/data-types/int-uint)                       |
| UNSIGNED SMALLINT                | [UInt16](/pt-BR/reference/data-types/int-uint)                     |
| SMALLINT                         | [Int16](/pt-BR/reference/data-types/int-uint)                      |
| UNSIGNED INT, UNSIGNED MEDIUMINT | [UInt32](/pt-BR/reference/data-types/int-uint)                     |
| INT, MEDIUMINT                   | [Int32](/pt-BR/reference/data-types/int-uint)                      |
| UNSIGNED BIGINT                  | [UInt64](/pt-BR/reference/data-types/int-uint)                     |
| BIGINT                           | [Int64](/pt-BR/reference/data-types/int-uint)                      |
| FLOAT                            | [Float32](/pt-BR/reference/data-types/float)                       |
| DOUBLE                           | [Float64](/pt-BR/reference/data-types/float)                       |
| DATE                             | [Date](/pt-BR/reference/data-types/date)                           |
| DATETIME, TIMESTAMP              | [DateTime](/pt-BR/reference/data-types/datetime)                   |
| BINARY                           | [FixedString](/pt-BR/reference/data-types/fixedstring)             |
| POINT                            | [Point](/pt-BR/reference/data-types/geo#point)                     |
| LINESTRING                       | [LineString](/pt-BR/reference/data-types/geo#linestring)           |
| POLYGON                          | [Polygon](/pt-BR/reference/data-types/geo#polygon)                 |
| MULTILINESTRING                  | [MultiLineString](/pt-BR/reference/data-types/geo#multilinestring) |
| MULTIPOLYGON                     | [MultiPolygon](/pt-BR/reference/data-types/geo#multipolygon)       |
| MULTIPOINT                       | [MultiPoint](/pt-BR/reference/data-types/geo#multipoint)           |
| GEOMETRY                         | [Geometry](/pt-BR/reference/data-types/geo#geometry)               |

A conversão dos tipos espaciais (exceto `POINT`, que é sempre convertido) é controlada pela flag `geometry` da configuração [`mysql_datatypes_support_level`](/pt-BR/reference/settings/session-settings/mysql#mysql_datatypes_support_level), habilitada por padrão. O tipo de coluna genérico `GEOMETRY` é mapeado para o tipo abrangente [`Geometry`](/pt-BR/reference/data-types/geo#geometry) (um `Variant` dos tipos geométricos concretos). Como essa coluna pode conter um valor de qualquer subtipo, a leitura de um valor cujo subtipo não tem equivalente no ClickHouse (`GEOMETRYCOLLECTION`) lança uma exceção no momento da leitura; essa incompatibilidade é aceita em troca de um tipo geométrico adequado. Colunas declaradas com o tipo `GEOMETRYCOLLECTION` são convertidas em [String](/pt-BR/reference/data-types/string), como todos os outros tipos de dados do MySQL.

Há suporte para [Nullable](/pt-BR/reference/data-types/nullable). Uma coluna espacial é mapeada para `String` (`Nullable(String)` se ela aceitar nulos), em vez de um tipo geométrico, em três casos: ela é declarada como `GEOMETRYCOLLECTION`; a flag `geometry` está desabilitada e o tipo não é `POINT`; ou a coluna aceita nulos e o tipo não é `POINT`, pois `Point` é o único tipo geométrico que pode ser aninhado em `Nullable`. Nos três casos, a string contém o valor exatamente como o MySQL o retorna: um prefixo SRID de 4 bytes seguido pelo payload WKB; portanto, remova esses 4 bytes iniciais antes de passá-lo a um decodificador WKB.

<div id="global-variables-support">
  ## Suporte a variáveis globais
</div>

Para maior compatibilidade, é possível referenciar variáveis globais no estilo do MySQL, como `@@identifier`.

Há suporte para estas variáveis:

* `version`
* `max_allowed_packet`

<Note>
  No momento, essas variáveis são apenas placeholders e não correspondem a nada.
</Note>

Exemplo:

```sql theme={null}
SELECT @@version;
```

<div id="examples-of-use">
  ## Exemplos de uso
</div>

Tabela no MySQL:

```text theme={null}
mysql> USE test;
Database changed

mysql> CREATE TABLE `mysql_table` (
    ->   `int_id` INT NOT NULL AUTO_INCREMENT,
    ->   `float` FLOAT NOT NULL,
    ->   PRIMARY KEY (`int_id`));
Query OK, 0 rows affected (0,09 sec)

mysql> insert into mysql_table (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)

mysql> select * from mysql_table;
+------+-----+
| int_id | value |
+------+-----+
|      1 |     2 |
+------+-----+
1 row in set (0,00 sec)
```

Banco de dados no ClickHouse, com troca de dados com o servidor MySQL:

```sql theme={null}
CREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password') SETTINGS read_write_timeout=10000, connect_timeout=100;
```

```sql theme={null}
SHOW DATABASES
```

```text theme={null}
┌─name─────┐
│ default  │
│ mysql_db │
│ system   │
└──────────┘
```

```sql theme={null}
SHOW TABLES FROM mysql_db
```

```text theme={null}
┌─name─────────┐
│  mysql_table │
└──────────────┘
```

```sql theme={null}
SELECT * FROM mysql_db.mysql_table
```

```text theme={null}
┌─int_id─┬─value─┐
│      1 │     2 │
└────────┴───────┘
```

```sql theme={null}
INSERT INTO mysql_db.mysql_table VALUES (3,4)
```

```sql theme={null}
SELECT * FROM mysql_db.mysql_table
```

```text theme={null}
┌─int_id─┬─value─┐
│      1 │     2 │
│      3 │     4 │
└────────┴───────┘
```
