Fazer backup e restaurar bancos de dados MySQL com Mysqldump

Este tutorial explica como fazer backup e restaurar bancos de dados MySQL ou MariaDB a partir da linha de comando usando o utilitário mysqldump.

Os arquivos de backup criados pelo utilitário mysqldump são basicamente um conjunto de instruções SQL que podem ser usadas para recriar o banco de dados original.

Se você não fizer backup de seus bancos de dados, um bug de software ou uma falha no disco rígido poderá ser desastroso. Para ajudar a economizar muito tempo e frustração, é altamente recomendável que você tome o cuidado de fazer backup regularmente de seus bancos de dados MySQL.

Você também pode usar o utilitário mysqldump para transferir seu banco de dados MySQL para outro servidor MySQL.
Sintaxe do comando mysqldump

Antes de entrarmos em como usar o comando mysqldump, vamos começar revisando a sintaxe básica.


As expressões do utilitário mysqldump assumem o seguinte formato:

mysqldump [options] > file.sql
  • file.sql – O arquivo de despejo (backup)

Faça backup de um único banco de dados MySQL

Para criar um backup de um banco de dados chamado database_name usando o usuário root e salvá-lo em um arquivo chamado database_name.sql, você executaria o seguinte comando:

mysqldump -u root -p database_name > database_name.sql

Você será solicitado a inserir a senha root. Entre, pressione Enter e o processo de despejo será iniciado. Dependendo do tamanho do banco de dados, o processo pode demorar algum tempo.

Se você estiver logado como o mesmo usuário que está usando para realizar a exportação e esse usuário não exigir uma senha, você poderá omitir as opções -u e -p:

mysqldump database_name > database_name.sql

Faça backup de vários bancos de dados MySQL

Para fazer backup de vários bancos de dados MySQL com um comando, você precisa usar a opção –database seguida pela lista de bancos de dados dos quais deseja fazer backup. Cada nome de banco de dados deve ser separado por espaço.

mysqldump -u root -p --database database_name_a database_name_b > databases_a_b.sql

O comando acima criará um arquivo dump contendo os dois bancos de dados.

Faça backup de todos os bancos de dados MySQL

Para fazer backup de todos os bancos de dados MySQL, você usaria a opção –all-databases:

mysqldump -u root -p --all-databases > all_databases.sql

Assim como no exemplo anterior, o comando acima criará um único arquivo de despejo contendo todos os bancos de dados.

Faça backup de todos os bancos de dados MySQL em arquivos separados

O utilitário mysqldump não fornece uma opção para fazer backup de todos os bancos de dados em arquivos separados, mas conseguimos isso facilmente com um simples loop FOR bash:

for DB in $(mysql -e 'show databases' -s --skip-column-names); do
    mysqldump $DB > "$DB.sql";
done

O comando acima criará um arquivo de despejo separado de todos os bancos de dados usando o nome do banco de dados como nome do arquivo.

Crie um backup de banco de dados MySQL compactado

Se o tamanho do banco de dados for muito grande, é uma boa ideia compactar a saída. Para fazer isso, basta canalizar a saída para o utilitário gzip e redirecioná-la para um arquivo conforme mostrado abaixo:

mysqldump database_name > | gzip > database_name.sql.gz

Crie um backup com carimbo de data/hora

Se quiser manter mais de um backup no mesmo local, você gostaria de adicionar a data ao nome do arquivo de backup:

mysqldump  database_name > database_name-$(date +%Y%m%d).sql

O comando acima criará um arquivo com o seguinte formato database_name-20180617.sql

Se você estiver usando o cronjob para automatizar os backups de seus bancos de dados, você também pode usar o seguinte comando para excluir quaisquer backups com mais de 30 dias:

find /path/to/backups -type f -name "*.sql" -mtime +30 -delete

Claro que você precisa ajustar o comando de acordo com o local do backup e os nomes dos arquivos. Para saber mais sobre o comando find, consulte nosso guia Como encontrar arquivos no Linux usando a linha de comando.

Restaurando um dump do MySQL

Você pode restaurar um dump do MySQL usando a ferramenta mysql. Na maioria dos casos, você precisará criar um banco de dados para importar. Se o banco de dados já existir, primeiro você precisa excluí-lo.

No exemplo a seguir, o primeiro comando criará um banco de dados chamado database_name e, em seguida, importará o dump database_name.sql para ele:

mysql -u root -p -e "create database database_name";
mysql -u root -p database_name < database_name.sql

Restaurar um único banco de dados MySQL a partir de um dump completo do MySQL

Se você fez backup de todos os seus bancos de dados usando a opção -all-databases e deseja restaurar um único banco de dados a partir de um arquivo de backup que contém vários bancos de dados, use a opção –one-database conforme mostrado abaixo:

mysql --one-database database_name < all_databases.sql

Exportar e importar um banco de dados MySQL em um comando

Em vez de criar um arquivo de despejo de um banco de dados e depois importar o backup para outro banco de dados MySQL, você pode usar o seguinte one-liner:

mysqldump -u root -p database_name | mysql -h remote_host -u root -p remote_database_name

O comando acima irá canalizar a saída para um cliente mysql no host remoto e irá importá-la para um banco de dados chamado remote_database_name. Antes de executar o comando, certifique-se de que o banco de dados já exista no servidor remoto.

Rolar para cima