Como realizar um backup completo de uma instância MySQL ou MariaDB Server em uma máquina Windows ou Linux com uma única linha de comando
Se você gosta de jogar com servidores MySQL ou MariaDB , provavelmente sabe que esses dois ótimos DBMS de código aberto vêm com mysqldump , um utilitário de linha de comando que pode ser usado para realizar cópias de backup (ou “dumps”, como seu nome implica) dos seus dados. Há muitas coisas que tornam o mysqldump ótimo, como:
- É totalmente gratuito , então não vai te custar um centavo. Também já vem empacotado com qualquer instalação MySQL ou MariaDB, portanto, você nem precisa fazer o download e instalá-lo… você já o possui.
- É incrivelmente rápido : com um SSD decente, ele fará backup de muitos GB de dados em questão de segundos.
- É superfácil de usar . E com “superfácil”, quero dizer que você poderá realizar um backup completo com uma única linha de comando – desde que tenha as permissões para fazer isso.
- Ele não exige que você desligue o banco de dados , mesmo que seja altamente recomendável bloquear o banco de dados antes de realizar o backup para evitar uma possível perda de dados (mais sobre isso posteriormente).
Como funciona
A ferramenta mysqldump funciona de uma maneira muito direta: ela recupera os dados e o esquema de cada banco de dados e tabela e “despeja” tudo em um único e gigantesco arquivo de texto formatado em SQL. Esse arquivo conterá basicamente todas as instruções SQL necessárias para reconstruir os bancos de dados e dados do zero: se você abrir um arquivo de despejo gerado pelo mysqldump, verá as várias instruções CREATE TABLE, seguidas por um número (indiscutivelmente grande) de instruções INSERT, um para cada linha de dados.
Backup completo
Aqui está o (in)famoso “command-line one-liner” para despejar todos os bancos de dados contidos em seu MySQL ou MariaDB usando mysqldump :
1
|
mysqldump –u db_root_user –p –x –A > /bak/db_backup.sql
|
Aqui está uma breve explicação das opções que estamos usando na linha acima:
- A opção -u é necessária para especificar a conta de usuário para acessar o servidor de banco de dados: certifique-se de substituir db_root_user por um usuário com direitos de permissões suficientes para sua instância de banco de dados: você também pode usar root , mas eu não recomendaria isso – especialmente se você desejará programar + agendar esse comando usando uma tarefa agendada (windows) ou um cronjob (linux).
- A opção -p , sem mais nada, abrirá o prompt de senha, o que significa que – assim que você pressionar ENTER – você será solicitado a fornecer uma senha, que você terá que digitar manualmente. Você também pode especificar uma senha lá (usando -p your_password em vez de -p ), o que pode ser muito útil para tarefas/cronjobs agendados, mas tornará todo o one-liner muito menos seguro (é por isso que você não deve usar root ).
- A opção -x faz com que o servidor SQL bloqueie todas as tabelas antes de realizar o backup: o bloqueio não será liberado até que o processo seja finalizado. Isso é altamente recomendável, pois você não deseja que os dados sejam alterados enquanto estiver executando o backup. Vale a pena notar que isso causará um tempo de inatividade, portanto, tenha cuidado ao usar isso se o banco de dados estiver conectado aos serviços de produção!
- A opção -e agrupará as instruções INSERT para cada tabela: isso fará com que o arquivo de despejo seja menor e permitirá que quaisquer restaurações futuras possíveis sejam executadas mais rapidamente.
- A opção -A (observe as letras maiúsculas) especifica que todos os bancos de dados devem ser exportados.
- Por último, mas não menos importante, o sinal > ( maior que ) redirecionará a saída padrão ( STDOUT ) para o caminho e o arquivo nomeado após ele.
Se você está curioso sobre o que essas opções realmente significam, aqui está a versão longa da frase acima :
1
|
mysqldump -user=db_root_user —password —lock–tables -all–databases > /bak/db_backup.sql
|
Na minha opinião, esta última sintaxe – embora mais longa – é mais fácil de seguir e lembrar. Observe que, se você quiser especificar uma senha com essa sintaxe estendida, precisará colocar o sinal de igual ( –password=your_password ).
Backup de banco de dados único
Aqui está o one-liner mysqldump para exportar apenas um banco de dados específico (ou uma lista de bancos de dados):
1
|
mysqldump —user=db_root_user —password —lock–tables —databases db_name > /bak/db_backup.sql
|
A única diferença significativa aqui é que nós trocamos a opção –all-databases ( -A ) e a substituímos pela opção –databases ( -B ), seguida pelo(s) nome(s) do banco de dados que queremos fazer backup. Para exportar vários bancos de dados, você pode inserir vários nomes, separando-os com um único espaço.
Tabelas de despejo
Para bancos de dados muito grandes, convém fazer backup dos dados com base em tabelas em vez de todo o banco de dados. Isso também pode ser feito com um one-liner :
1
|
mysqldump —user=db_root_user —password —lock–tables db_name table_name > /bak/db_backup.sql
|
Como você pode ver, não estamos usando as opções –all-databases (-A) e/ou –databases (-B) aqui: com essa sintaxe, mysqldump apenas assumirá que o primeiro nome fornecido é um banco de dados e o segundo nome é uma tabela . Novamente, para fazer backup de várias tabelas, basta listá-las após o nome do banco de dados, separando-as por um único espaço.
Restaurando o Backup
Depois que a tarefa mysqldump for concluída, terminaremos com um arquivo db_backup.sql contendo o backup de nosso(s) banco(s) de dados.
Para recuperá-lo, precisamos executar as seguintes tarefas:
- Copie o arquivo db_backup.sql do servidor de origem para o servidor de destino.
- Abra um prompt de comando (ou uma janela de terminal ) no servidor de destino e digite o seguinte comando:
1
|
mysql -u USER_NAME -p < db_backup.sql
|
Se o arquivo db_backup.sql contém vários bancos de dados e queremos recuperar apenas um deles, devemos modificar o comando acima adicionando a opção –one-database da seguinte maneira:
1
|
mysql -u NOME_UTENTE -p –one–database NOME_DATABASE < db_backup.sql
|
Escusado será dizer que o comando mysql acima requer que o serviço MySQL ou MariaDB – com sua interface de linha de comando (CLI) – seja instalado no servidor de destino.
Conclusão
Isso mais ou menos conclui nossa breve análise do mysqldump , que está claramente entre as melhores opções que você pode usar para realizar backups rápidos de um único banco de dados e também de todo o seu serviço DBMS . Caso você precise de informações adicionais sobre isso, você pode conferir a documentação oficial do MySQL . Além disso, se você estiver usando o Windows, você pode dar uma olhada no SQLyog , uma ótima GUI MySQL/MariaDB que revisei alguns meses atrás ( AVISO LEGAL: eles não me pagaram ou a este blog para revisá-lo – é apenas que eu realmente gosto muito ).