Cópias com mysqldump e pg_dump, e como repor a cópia

Por SSH, copia-se uma base MySQL ou MariaDB com mysqldump e uma base PostgreSQL com pg_dump. Cada um gera um ficheiro que se repõe com mysql ou com psql/pg_restore. É o método certo para bases grandes e para cópias automáticas. Precisa de uma conta com shell (porta 2299 na hospedagem partilhada) ou de um VPS. Veja o Terminal do cPanel.

MySQL e MariaDB

1 Copiar:mysqldump -u conta_utilizador -p --single-transaction conta_base | gzip > copia.sql.gzO -p pede a palavra-passe. O --single-transaction dá uma cópia coerente de tabelas InnoDB sem as bloquear.
2 Repor: numa base vazia (ou já com tabelas, se o ficheiro as apagar primeiro):gunzip -c copia.sql.gz | mysql -u conta_utilizador -p conta_base
3 Conferir: gunzip -c copia.sql.gz | tail -n 3. O mysqldump termina com um comentário a dizer Dump completed. Se não o vir, a cópia ficou a meio.

PostgreSQL

1 Copiar, em formato próprio do PostgreSQL (comprimido):pg_dump -h 127.0.0.1 -U conta_utilizador -Fc -f copia.dump conta_base
2 Repor com pg_restore, numa base vazia:pg_restore -h 127.0.0.1 -U conta_utilizador -d conta_base copia.dump
3 Ou em texto simples, que se repõe com o psql: pg_dump -h 127.0.0.1 -U conta_utilizador conta_base > copia.sql e depois psql -h 127.0.0.1 -U conta_utilizador -d conta_base -f copia.sql.
Ferramenta Formato Repor com
mysqldump Texto SQL (comprime-se com gzip). mysql
pg_dump -Fc Formato próprio, já comprimido. pg_restore
pg_dump sem -Fc Texto SQL. psql -f
Uma cópia que nunca repôs não é uma cópia. Teste a reposição numa base de teste. E tenha cuidado com a palavra-passe na linha de comandos: ela fica no historial da shell. Para a evitar, o MySQL lê-a de ~/.my.cnf e o PostgreSQL de ~/.pgpass, ambos só seus (chmod 600).

Dar nomes às cópias e pô-las no cron

Dê às cópias um nome com a data: copia-$(date +%F).sql.gz junta o dia ao nome. Se puser o comando no cron, atenção: no crontab o sinal % tem de levar uma barra, escreve-se \%, senão o cron corta o comando. Não ponha a palavra-passe na linha do cron: use o ~/.my.cnf. Por fim, decida quantas cópias guarda e apague as mais antigas, senão uma tarefa que corre todas as noites acaba por encher a conta. Veja tarefas cron. E guarde pelo menos uma cópia fora do servidor onde está a base, por exemplo no seu computador.

Automatize e guarde fora do servidor. Uma cópia que está na mesma máquina da base perde-se com ela. Para pô-lo no cron, veja cópias automáticas da sua aplicação. Para o VPS, veja cópias de um VPS.

A reposição dá erro e não percebe porquê? Mande-nos a primeira mensagem de erro, sem a palavra-passe.

Abrir um pedido de suporte

VEJA TAMBÉM

Cópias automáticas da sua aplicação: cron e mysqldump

Importar uma base grande por SSH

Como repor os seus dados com o JetBackup

Mais sobre bases de dados

Mais artigos sobre o mesmo assunto, para quando este não chega.

PRODUTO RECOMENDADO

Alojamento de sites com cPanel

Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão)

Ver planos
  • 0 Utilizadores acharam útil
Esta resposta foi útil?