n8n com MySQL: como conectar e gravar dados no banco
Veja como conectar o n8n ao MySQL: usuário próprio, credencial, nó MySQL para ler e gravar, consultas com parâmetros e o Host certo quando o n8n roda no Docker.
Por Redação Eleven Host · @robson.direitodigital · 28 de outubro de 2026 · 9 min de leitura

Capa da Redação Eleven Host para o guia: n8n com MySQL: como conectar e gravar dados no banco Arte: Eleven Host
Para usar o n8n com MySQL, crie no banco um usuário só para o n8n, cadastre a credencial MySQL com host, banco, usuário, senha e porta 3306 e use o nó MySQL para ler, inserir ou atualizar dados nos seus fluxos.
Este guia é para quem já tem o n8n funcionando, por exemplo seguindo o guia Instalar n8n na VPS: passo a passo com Docker, e quer que um fluxo converse com um banco MySQL. A ordem é a do trabalho real: primeiro o usuário no banco, depois a credencial no n8n, depois os nós. Os nomes meu_banco, n8n, 203.0.113.10 (o servidor do banco) e 198.51.100.20 (a máquina onde roda o n8n) são exemplos. Troque pelos seus.
O que o nó MySQL do n8n faz
O n8n organiza o trabalho em nós, e cada nó faz uma tarefa. O nó MySQL, segundo a documentação do n8n, tem seis operações:
- Select: selecionar, ou seja, ler linhas de uma tabela.
- Insert: inserir linhas novas.
- Update: atualizar linhas que já existem.
- Insert or Update: inserir ou atualizar.
- Delete: apagar linhas.
- Execute SQL: executar uma consulta SQL escrita por você.
As operações prontas cobrem leitura, gravação e remoção de linhas. O Execute SQL fica para os casos que elas não cobrem, e este guia mostra um deles na seção de erros comuns.
Passo 1: crie um usuário só para o n8n
A documentação do n8n lista como pré-requisito ter criado um usuário no banco. Em vez de usar a conta administrativa, crie uma conta própria para o n8n e dê a ela só as permissões que o fluxo usa. Entre no MySQL com uma conta administrativa e rode:
CREATE USER 'n8n'@'198.51.100.20' IDENTIFIED BY 'troque-esta-senha';
GRANT SELECT, INSERT, UPDATE ON meu_banco.* TO 'n8n'@'198.51.100.20';
O texto depois do @ limita de onde a conta pode entrar. Aqui, só a máquina 198.51.100.20, que é onde o n8n roda. Se você tirar essa parte, a conta passa a valer para '%', ou seja, sem restrição de origem. Troque troque-esta-senha por uma senha sua.
O GRANT do exemplo dá só ler, inserir e atualizar no banco meu_banco. Se o seu fluxo também apaga linhas, acrescente DELETE à lista. Se não apaga, deixe de fora: assim a conta fica só com o que o fluxo usa.
Se o banco está em outra máquina, o MySQL precisa aceitar conexões de fora. O guia Acesso remoto MySQL: como liberar com segurança mostra como fazer isso com cuidado.
Passo 2: cadastre a credencial no n8n
No n8n, a credencial guarda os dados de acesso uma vez, e vários nós podem usá-la. Pela documentação do n8n, a credencial MySQL tem estes campos:
- Host: o nome ou o IP do servidor do banco, como
203.0.113.10. - Database: o nome do banco, como
meu_banco. - User: o usuário que você criou no passo 1, o
n8n. - Password: a senha desse usuário.
- Port: a porta do MySQL. O padrão é 3306.
A credencial tem ainda três campos opcionais:
- Connect Timeout: o tempo de espera pela conexão. O padrão é 10000 ms.
- SSL: use se o seu banco usa SSL. Esse campo pede o certificado da CA, a chave do cliente e o certificado do cliente.
- SSH Tunnel: faz a conexão passar por um túnel SSH, com senha ou com chave privada.
Preencha os cinco campos principais, salve a credencial e execute o nó MySQL uma vez para ver se o n8n alcança o banco. Se falhar, confira primeiro o host, a porta e o endereço depois do @ no CREATE USER.
Passo 3: ler dados com Select
Para ler, adicione um nó MySQL ao fluxo, escolha a credencial do passo 2 e a operação Select. Informe a tabela e o que deseja ler. O resultado da leitura segue para o próximo nó do fluxo.
Um exemplo simples: ler os pedidos novos de hora em hora e enviar para uma planilha. O fluxo começa com o Schedule Trigger, passa pelo nó MySQL com Select e termina no nó da planilha.
Passo 4: gravar dados com Insert e Insert or Update
Para gravar, use o nó MySQL com a operação Insert. Ela cria uma linha nova na tabela. Um uso possível é gravar cada resposta de formulário que chega por webhook numa tabela com colunas como nome, email e criado_em. O webhook é o ponto de entrada do fluxo e está explicado em Webhook no n8n: como criar, testar e colocar no ar.
Há também a operação Insert or Update, que serve para inserir ou atualizar a linha na mesma operação. E há a operação Update, que muda linhas que já existem e usa uma coluna de correspondência, a "Column to Match On", para saber qual linha alterar.
Antes de testar um fluxo com Update ou Delete, faça uma cópia do banco. Se a operação atingir mais linhas do que você previu, a cópia permite voltar.
O backup do MySQL com mysqldump tem guia próprio na base de conhecimento.
Quer um n8n para começar a montar seus fluxos? O n8n Essencial sai a partir de R$ 19,90/mês; confira na loja o que cada plano inclui. Ver planos de n8n
Consultas com parâmetros: $1, $2 e a injeção de SQL
Na operação Execute SQL, você escreve a consulta. Quando ela usa valores que vêm do fluxo, como o e-mail de um formulário, use parâmetros em vez de colar o valor dentro do texto da consulta. Em Options, no campo Query Parameters, escreva $1, $2 e assim por diante na consulta e liste os valores na mesma ordem. O exemplo da documentação do n8n é este:
SELECT * FROM $1:name WHERE email = $2;
E, no campo Query Parameters, os valores nesta ordem:
users, {{ $json.email }}
Aqui o $1 recebe users (o nome da tabela) e o $2 recebe o e-mail que veio do item anterior. A documentação diz que o n8n trata os dados dos parâmetros, e isso evita a injeção de SQL (SQL injection), o ataque em que um texto digitado por alguém vira parte da consulta. Por isso, prefira os parâmetros a colar o {{ }} direto dentro do SQL.
n8n no Docker e MySQL na mesma VPS
Este caso vale para quem instala o n8n com Docker e deixa o MySQL no próprio servidor, fora do contêiner. O localhost dentro do contêiner aponta para o próprio contêiner, e não para a VPS, então a credencial precisa de outro host. A documentação do n8n descreve quatro casos:
- n8n no Docker e MySQL na VPS, fora do Docker: o MySQL precisa escutar em todas as interfaces. No Linux, inicie o contêiner do n8n com
--add-host host.docker.internal:host-gatewaye usehost.docker.internalno campo Host. - Os dois em contêineres separados: ponha os dois na mesma rede bridge definida pelo usuário e use, no campo Host, o nome do contêiner do MySQL.
- Só o MySQL no Docker: publique a porta 3306 com
-pe uselocalhost. - Os dois no mesmo contêiner: use
localhost.
Atenção ao primeiro caso. Fazer o MySQL escutar em todas as interfaces o deixa alcançável por mais caminhos, e por isso o firewall importa. O guia Firewall para VPS: como proteger seu servidor mostra como proteger o servidor.
Erros comuns com o nó MySQL
Update que não encontra a linha certa. A operação Update pela "Column to Match On" só funciona quando uma coluna identifica a linha sozinha. Se a linha é identificada por duas colunas juntas, a chamada chave composta, use o Execute SQL. O exemplo da documentação é:
UPDATE orders SET quantity = 3 WHERE customer_id = 538 AND product_id = 800;
Valores DECIMAL que chegam como texto. O n8n devolve colunas do tipo DECIMAL como texto, para não perder precisão no JavaScript. A documentação oferece três saídas: ligar a opção "Output Decimals as Numbers", aceitando o risco de perder precisão; converter o valor com toFloat() ou toFixed(); ou usar o nó Edit Fields (Set) para ajustar o campo.
Conexão recusada dentro do Docker. Se o n8n roda no Docker e o MySQL está na mesma VPS, revise o campo Host. Com localhost, o contêiner procura o banco dentro de si mesmo.
Dois exemplos para começar
Para sair do papel, escolha um fluxo pequeno e que você consegue conferir à mão:
- Gravar respostas de formulário: um Webhook recebe a resposta, e um nó MySQL com Insert grava
nome,emailecriado_emnuma tabela. Depois de enviar um formulário de teste, confira a linha no banco. - Ler pedidos novos de hora em hora: um Schedule Trigger dispara o fluxo, um nó MySQL com Select lê os pedidos e o resultado segue para uma planilha. Rode uma vez à mão e compare com o que há no banco.
Em ambos, comece com a conta do passo 1 e só acrescente permissões quando o fluxo pedir.
Checklist da conexão n8n com MySQL
- Criei um usuário só para o n8n, com o endereço da máquina do n8n depois do
@. - Dei só as permissões que o fluxo usa no
GRANT. - Preenchi na credencial Host, Database, User, Password e Port (3306) e testei a conexão.
- Se o banco usa SSL ou túnel SSH, preenchi os campos opcionais.
- Usei
$1e$2nas consultas com valores do fluxo. - No Docker, conferi o Host:
host.docker.internal, o nome do contêiner oulocalhost, conforme o caso. - Se o MySQL escuta em todas as interfaces, revisei o firewall.
- Fiz backup antes de testar Update ou Delete.
Procura um plano de n8n para os seus fluxos? O n8n Essencial custa a partir de R$ 19,90/mês; confira na loja o que cada plano inclui. Conhecer o n8n Essencial
Perguntas frequentes
Qual porta o n8n usa para conectar ao MySQL?
A credencial MySQL do n8n traz a porta 3306 como padrão. Mude o campo Port só se o seu MySQL escuta em outra porta.
Posso usar o usuário administrativo do MySQL no n8n?
Pode funcionar, mas crie um usuário só para o n8n, com as permissões que o fluxo usa. Assim a conta fica só com as permissões que o fluxo usa.
Como evito injeção de SQL no n8n?
Use parâmetros na operação Execute SQL: escreva $1 e $2 na consulta e liste os valores em Query Parameters. A documentação do n8n diz que o n8n trata esses dados, o que evita a injeção de SQL.
O n8n está no Docker e o MySQL na VPS. Qual Host uso?
Com o MySQL fora do Docker, inicie o contêiner do n8n com --add-host host.docker.internal:host-gateway e use host.docker.internal no campo Host. O MySQL precisa escutar em todas as interfaces, e isso pede firewall.
Por que meus valores DECIMAL chegam como texto?
O n8n devolve o DECIMAL como texto para não perder precisão no JavaScript. Use a opção "Output Decimals as Numbers", converta com toFloat() ou toFixed(), ou ajuste no nó Edit Fields (Set).