
Domine as rotinas do backup e restauração MySQL, neste artigo você aprenderá sobre comandos básicos e avançados, incluindo o uso de arquivos de configuração seguros, automação com CRON e dicas para lidar com bancos de dados de grande porte
Você está procurando uma maneira eficiente de fazer backup e restaurar seus bancos de dados MySQL? Neste guia, vamos explorar diferentes métodos para realizar backups e restaurações, incluindo opções que não exigem digitar usuário e senha toda vez. Vamos cobrir scripts, comandos e automação com cron para garantir que seus dados estejam sempre protegidos.
É possível fazer um DUMP (exportar os dados) pela linha de comando com a seguinte instrução:
mysql-dump -u usuario -p nome_do_banco > nome_do_arquivo.sql
O arquivo gerado por este comando conterá todas informações e poderá ser utilização na restauração do banco de dados.
Assim como o procedimento de backup, para restaurar é necessário pela linha de comando entrar com a seguinte instrução:
mysql -u usuario -p nome_do_banco < nome_do_arquivo.sql
Nesta situação, o arquivo exportado pelo mysql-dump é restaurado no banco de dados MySQL.
Uma das formas mais flexíveis de fazer backup de seus bancos de dados MySQL é usando um script bash. Este método permite que você faça backup de múltiplos bancos de dados e adicione lógica personalizada conforme necessário.
Crie as pastas
mkdir -p ~/backup/mysql
Coloque a senha no arquivo ~/.mysqlpasswd (no exemplo abaixo estamos usando a senha do root)
nano ~/.mysqlpasswd
Script para automação:
#!/bin/bash
# Pasta de destino para armazenar os backups
DEST=~/backup/mysql/
CURRDATE=$(date +"%F")
# Hostname do servidor MySQL
HOSTNAME="localhost"
# Nome de usuário para fazer o backup
USER="root"
# Arquivo que contém a senha do usuário MySQL
PASS="$(cat ~/.mysqlpasswd)"
# Obtém a lista de bancos de dados
DATABASES=$(mysql -h $HOSTNAME -u $USER -p$PASS -e "SHOW DATABASES;" | tr -d "| " | grep -v Database)
# Cria a pasta de destino se não existir
[ ! -d $DEST ] && mkdir -p $DEST
for db in $DATABASES; do
FILE="${DEST}/$db.sql.gz"
FILEDATE=
# Garante que seja feito apenas um backup por dia
[ -f $FILE ] && FILEDATE=$(date -r $FILE +"%F")
[ "$FILEDATE" == "$CURRDATE" ] && continue
# Faz o backup e comprime
[ -f $FILE ] && mv "$FILE" "${FILE}.old"
mysqldump --single-transaction --routines --quick -h $HOSTNAME -u $USER -p$PASS -B $db | gzip > "$FILE"
chown bacula:disk "$FILE"
rm -f "${FILE}.old"
done
Este script faz o seguinte:
mysqldump
com opções para garantir consistência e incluir rotinas armazenadas.Para usar este script, você precisa:
mysql_backup.sh
).chmod +x mysql_backup.sh
.Edite a CRON (como achar melhor, igual abaixo ou crontab -e
)
nano /etc/crontab
Insira a seguinte linha ao final (presumindo que você tenha salvado o arquivo como ~/mysql_backup.sh)
* 2 * * * root ~/mysql_backup.sh
Salve e saia, e depois reinicie o serviço do cron
systemctl restart cron
Isso executará o backup todos os dias às 2:00 AM.
Se você prefere não incluir senhas diretamente em seus scripts ou comandos, pode usar um arquivo de configuração. Este método é mais seguro e conveniente.
Primeiro, crie um arquivo chamado .mysqlpwd
(repare que este é diferente do exemplo acima) em seu diretório home com o seguinte conteúdo:
[mysqldump]
user=seu_usuario
password=sua_senha
[mysql]
user=seu_usuario
password=sua_senha
Agora, você pode usar o seguinte comando para fazer backup manualmente:
mysqldump --defaults-extra-file=~/.mysqlpwd nome_do_banco > ~/backup/mysql/"$(date '+%F').sql"
Ou, edite a CRON (como achar melhor, igual abaixo ou crontab -e
)
nano /etc/crontab
Insira a seguinte linha ao final (presumindo que você tenha salvado o arquivo como ~/mysql_backup.sh)
* 2 * * * root mysqldump --defaults-extra-file=~/.mysqlpwd nome_do_banco > ~/backup/mysql/"$(date '+%F').sql"
Salve e saia, e depois reinicie o serviço do cron
systemctl restart cron
Isso executará o backup todos os dias às 2:00 AM.
Este comando faz o seguinte:
--defaults-extra-file
para especificar o arquivo de configuração.Compressão: Para economizar espaço, considere comprimir seus backups. Você pode modificar o comando mysqldump para incluir compressão:
mysqldump --defaults-extra-file=~/.mysqlpwd nome_do_banco | gzip > ~/backup/mysql/"$(date '+%F').sql.gz"
Backups Incrementais: Para bancos de dados muito grandes, considere usar ferramentas como o Percona XtraBackup para backups incrementais.
Verificação de Integridade: Sempre verifique a integridade de seus backups periodicamente tentando restaurá-los em um ambiente de teste.
Armazenamento Remoto: Considere armazenar seus backups em um local remoto ou na nuvem para proteção adicional contra falhas de hardware local.
Rotação de Backups: Implemente uma política de retenção de backups para gerenciar o espaço de armazenamento, mantendo backups diários por uma semana, semanais por um mês e mensais por um ano, por exemplo.
Para restaurar um backup, você pode usar o comando mysql. Se estiver usando o arquivo de configuração:
mysql --defaults-extra-file=~/.mysqlpwd nome_do_banco < nome_do_arquivo.sql
Se o backup estiver comprimido:
gunzip < arquivo_de_backup.sql.gz | mysql --defaults-extra-file=~/.mysqlpwd nome_do_banco
Lembre-se de que a restauração sobrescreverá os dados existentes no banco de dados. Sempre faça isso com cuidado e, se possível, em um ambiente de teste primeiro.
Fazer backup regular de seus bancos de dados MySQL é crucial para a segurança e integridade dos seus dados. Com os métodos descritos neste artigo, você pode automatizar o processo de backup, tornando-o mais seguro e conveniente. Seja usando um script personalizado, um arquivo de configuração ou uma combinação de ambos, você agora tem as ferramentas necessárias para implementar uma estratégia de backup robusta.
Lembre-se de testar regularmente seus backups e procedimentos de restauração para garantir que eles funcionem conforme o esperado quando você mais precisar deles. Com uma boa estratégia de backup em vigor, você pode ter tranquilidade sabendo que seus dados estão protegidos contra perda acidental ou falhas de sistema.
Pergunta e respostas frequentes sobre o conteúdo.
mysqldump -u [usuário] -p [nome_do_banco] > [arquivo_de_backup].sql
mysqldump -u [usuário] -p [nome_do_banco] | gzip > [arquivo_de_backup].sql.gz
--single-transaction
mysqldump -u [usuário] -p --all-databases > [arquivo_de_backup].sql
~/.sqlpwd ou ~/.my.cnf
mysql -u [usuário] -p [nome_do_banco] < [arquivo_de_backup].sql
gunzip < [arquivo_de_backup].sql.gz | mysql -u [usuário] -p [nome_do_banco]
Adicione uma linha como "0 2 * * * /caminho/para/script_de_backup.sh" ao crontab
--routines
Tente restaurá-lo em um banco de dados de teste e verifique se todos os dados estão presentes e corretos
Evita a exposição de senhas na linha de comando e aumenta a segurança
Use a opção --no-data com o comando mysqldump
Percona XtraBackup
Use a opção --ignore-database=[nome_do_banco] com mysqldump
Incluir a data no nome do arquivo, por exemplo: "backup_[nome_do_banco]_$(date '+%F').sql"
Especialista linux, desenvolvedor web full-stack, PHP no sangue, graduando em Direito, pai da Lais e esposo da Simone