Base de Conhecimento

Backup MySQL com mysqldump: como fazer e restaurar

  • backup mysql, mysqldump, mysql, banco de dados, tutorial
  • Usuários acharam útil: 0

Aprenda a fazer backup MySQL com mysqldump, compactar, agendar, restaurar num banco de teste, guardar fora do servidor e limpar cópias antigas.

Por Redação Eleven Host · @robson.direitodigital · 27 de outubro de 2026 · 7 min de leitura

Arte da Eleven Host: janela de terminal com o título: Backup MySQL com mysqldump: como fazer e restaurar

Capa da Redação Eleven Host para o guia: Backup MySQL com mysqldump: como fazer e restaurar Arte: Eleven Host

Para fazer um backup MySQL, use o mysqldump: ele gera um arquivo .sql com a estrutura e os dados do banco. Um comando, mysqldump -u usuario -p meu_banco > meu_banco.sql, já cria a cópia.

Este guia mostra o comando básico, as opções que importam, como compactar com gzip, agendar, restaurar num banco de teste, guardar a cópia fora do servidor e limpar backups antigos. Os nomes são exemplos: troque usuario e meu_banco pelos seus.

O comando básico e as formas de usar

O mysqldump é um utilitário do próprio MySQL. Ele gera um arquivo com os comandos SQL para recriar o banco. Segundo o manual do MySQL 8.4, há três formas de uso:

  • Um banco, ou só algumas tabelas: mysqldump [opções] nome_do_banco [tabelas]
  • Vários bancos: mysqldump [opções] --databases banco1 banco2
  • Todos os bancos do servidor: mysqldump [opções] --all-databases

Na prática, com um usuário e um banco:

mysqldump -u usuario -p meu_banco > meu_banco.sql

O -p sem a senha colada faz o programa perguntar a senha. Evite escrever a senha no comando, porque ela fica gravada no histórico do shell.

Opções que importam

O comando básico funciona, mas algumas opções mudam a qualidade do backup. O comando completo sugerido é:

mysqldump -u usuario -p --single-transaction --routines --events --no-tablespaces meu_banco > meu_banco.sql

--single-transaction: cópia consistente, com ressalvas

Essa opção abre uma transação (REPEATABLE READ) antes de copiar. Assim, as tabelas InnoDB saem em estado consistente. As ressalvas, segundo o manual:

  • Só as tabelas InnoDB saem consistentes; tabelas MyISAM e MEMORY podem mudar durante a cópia.
  • Durante o dump, evite ALTER TABLE, CREATE TABLE, DROP TABLE, RENAME TABLE e TRUNCATE TABLE. Eles podem gerar uma cópia errada ou falha.
  • A opção não combina com --lock-tables, porque as duas são mutuamente exclusivas.

Para tabelas grandes, combine com --quick. Ele já vem ligado pela opção --opt, que é padrão.

Rotinas, eventos e gatilhos

Os gatilhos (triggers) entram no backup por padrão, e o --skip-triggers os desliga. Já as rotinas (procedures e functions) e os eventos não entram por padrão: use --routines e --events quando o seu banco tiver esses itens.

O erro de PROCESS e o --no-tablespaces

O usuário precisa de permissões. O manual lista SELECT nas tabelas, SHOW VIEW para views, TRIGGER para triggers e LOCK TABLES se você não usar --single-transaction. Falta ainda o PROCESS, exigido se você não usar --no-tablespaces. Se um usuário comum recebe erro de permissão de PROCESS ou de tablespaces, acrescente --no-tablespaces. Ele suprime o CREATE TABLESPACE, que não é preciso para um banco de site.

Compactar com gzip e pôr a data no nome

Um arquivo .sql é texto e ocupa espaço. Para compactar, passe a saída do mysqldump para o gzip, comando do Linux, com um pipe:

mysqldump -u usuario -p --single-transaction --no-tablespaces meu_banco | gzip > meu_banco.sql.gz

Para guardar várias versões, ponha a data no nome do arquivo:

mysqldump -u usuario -p --single-transaction --no-tablespaces meu_banco | gzip > meu_banco-$(date +%F).sql.gz

O $(date +%F) vira a data no formato 2026-10-27, e cada dia gera um arquivo diferente.

Agendar o backup com o crontab

Um backup que depende de você lembrar pode ser esquecido. O crontab, agendador do Linux, roda o comando sozinho; o guia Como usar crontab: agende tarefas na VPS Linux explica os campos de horário. Há dois pontos específicos deste caso.

O sinal de porcentagem

No crontab, o % precisa ser escrito como \%. Por isso, na linha agendada, o nome com data fica $(date +\%F).

A senha fora do comando

Como ninguém estará lá para digitar a senha, crie o arquivo de opções ~/.my.cnf, com uma seção [mysqldump] e as linhas:

[mysqldump]

user=usuario

password=sua_senha

Depois restrinja a permissão para que só o dono do arquivo o leia:

chmod 600 ~/.my.cnf

Com o arquivo no lugar, o mysqldump não precisa do -u nem do -p na linha agendada.

Precisa de um banco de dados na nuvem, o 11SQL? Veja os planos a partir de R$ 9,90/mês no 11SQL Mini; confira na loja o que cada plano inclui. Ver o 11SQL

Restaurar e testar o backup

Um backup só vale se der para restaurá-lo. O manual mostra a restauração com o cliente mysql:

mysql -u usuario -p meu_banco < meu_banco.sql

Para um arquivo compactado:

gunzip < meu_banco.sql.gz | mysql -u usuario -p meu_banco

Teste num banco separado

Em vez de restaurar por cima do banco real, restaure num banco de teste e confira as tabelas:

mysql -u usuario -p -e "CREATE DATABASE teste_restauracao"

mysql -u usuario -p teste_restauracao < meu_banco.sql

Depois, entre no banco de teste e veja se as tabelas e os dados esperados estão lá. Backup não testado é aposta. Se a restauração der erro, o guia Importar banco de dados MySQL: passo a passo e erros comuns reúne os erros comuns.

Backup no mesmo disco do banco some junto se o servidor falhar. Copie os arquivos para outra máquina ou para a nuvem e teste a restauração de tempos em tempos.

Guardar a cópia fora do servidor

Se o backup fica na própria VPS e o servidor tem um problema, você perde o banco e a cópia ao mesmo tempo. Leve os arquivos .sql.gz para outro lugar, como outra máquina sua ou um armazenamento na nuvem. Quem prefere manter o banco fora do servidor da aplicação pode ler o guia Banco de dados MySQL na nuvem: guia para começar.

Limpar backups antigos

Com um arquivo por dia, a pasta cresce. O find apaga os arquivos mais velhos que um número de dias. Primeiro mostre o que seria apagado, sem o -delete:

find /caminho/backups -name "*.sql.gz" -mtime +7

Conferiu a lista? Então acrescente o -delete:

find /caminho/backups -name "*.sql.gz" -mtime +7 -delete

O -mtime +7 pega os arquivos com mais de 7 dias, e o 7 é só um exemplo. Escolha o prazo que faz sentido para você e mantenha pelo menos as cópias recentes fora do servidor.

Quando o mysqldump não basta

A documentação do MySQL diz que o mysqldump não é pensado como solução rápida ou escalável para muitos dados. Para bancos grandes, o manual sugere o backup físico ou os utilitários de dump do MySQL Shell, que fazem cópia em paralelo, com compressão e indicação de progresso. Se o seu backup está demorando demais, é hora de olhar essas opções.

Checklist do backup que funciona

  • Usei --single-transaction e conferi se as tabelas são InnoDB.
  • Incluí --routines e --events se o banco tem rotinas e eventos.
  • Acrescentei --no-tablespaces se apareceu o erro de PROCESS.
  • Compactei com gzip e coloquei a data no nome.
  • Escrevi \% no crontab e protegi o ~/.my.cnf com chmod 600.
  • Restaurei num banco de teste e conferi as tabelas.
  • Copiei o arquivo para fora do servidor.
  • Apaguei os antigos com find, vendo a lista antes.

Quer rodar seus backups em um servidor seu? Os planos de VPS começam em R$ 17,00/mês, no Plano Bronze; confira na loja o que cada plano inclui. Conhecer a VPS

Perguntas frequentes

Como fazer backup de um banco MySQL?

Use mysqldump -u usuario -p meu_banco > meu_banco.sql. O comando pergunta a senha e grava um arquivo .sql com a estrutura e os dados.

Como restaurar um backup do mysqldump?

Use mysql -u usuario -p meu_banco < meu_banco.sql. Se o arquivo está compactado, use gunzip < meu_banco.sql.gz | mysql -u usuario -p meu_banco.

O mysqldump inclui procedures e eventos?

Não por padrão. Use --routines e --events. Os gatilhos já entram, a menos que você use --skip-triggers.

Por que dá erro de PROCESS no mysqldump?

O PROCESS é exigido quando você não usa --no-tablespaces. Acrescente a opção, que suprime o CREATE TABLESPACE.

O mysqldump serve para bancos grandes?

A documentação diz que não é pensado como solução rápida ou escalável para muitos dados. Para bancos grandes, ela sugere backup físico ou os utilitários do MySQL Shell.

Esta resposta lhe foi útil?

Artigos Relacionados