Se você tem uma banco de dados MySQL, muito provavelmente você já precisou ou vai precisar acessar um backup de seu banco. A melhor maneira de se prevenir é manter uma rotina diária (ou conforme sua necessidade) de backups, e exatamente isso que vamos aprender a fazer nesse artigo. Vamos aprender a criar rotinas de backups do MySQL no Windows e no Linux, nosso objetivo será criar um script que cria uma cópia de segurança do nosso banco em um arquivo zipado com marcação de data e uma rotina diaria para executar, nosso script também será capaz de deletar arquivos mais antigos que 7 dias.

O que é MySQL?

Não entrarei em muitos dados técnicos sobre a história do MySQL, você pode conferir nesse link, mas resumidamente o MySQL é um sistema de gerenciamento de banco de dados (SGBD), que utiliza a linguagem SQL – Linguagem de Consulta Estruturada, do inglês Structured Query Language. Atualmente é mantida pela Oracle Corporation e distribuida sob duas licenças: GPL e Licença comercial.

Criando Backups do MySQL Diariamente no Windows

Vamos aprender como criar um script completo no Windows, para isso você precisa ter previamente instalado o MySQL e ter os dados do usuário com capacidade de leitura no banco de dados a ser copiado e vamos utilizar o 7zip para compactar os nosso arquivos.

Primeiro vamos criar o arquivo que vai conter as nossas credenciais de acesso ao banco: config.cnf.

# Configuracoes de usuario
[mysqldump]
 user=root
 password=senha

E agora o arquivo que vai realizar todo o processo de backup.

#Set-ExecutionPolicy -ExecutionPolicy Bypass 
$mysqlpath = "C:\Program Files\MySQL\MySQL Server 5.5\bin"  # Caminho para a instalção do MySQL
$backuppath = "C:\backups\"  # Caminho para armazenar os backups
$7zippath = "C:\Program Files (x86)\7-Zip"  # Caminho para a instalação do 7zip
$config = "C:\config.cnf"  # Caminho para o arquivo com as credenciais
$database = "blog" # Nome do nosso banco de dados
$errorLog = "C:\error_dump.log"  # Caminho para o nosso arquivo de log
$days = 7 # Dias para manter os arquivos de backup
$date = Get-Date 
$timestamp = " " + $date.day + $date.month + $date.year + "_" + $date.hour + $date.minute 
$backupfile = $backuppath + $database + "_" + $timestamp +".sql" 
$backupzip = $backuppath + $database + "_" + $timestamp +".zip" 
 
# Inicia o processo de backup 
CD $mysqlpath 
.\mysqldump.exe --defaults-extra-file=$config --log-error=$errorLog  --result-file=$backupfile  --databases $database /c 

# Inicia o processo de compactacao com 7zip  
CD $7zippath 
.\7z.exe a -tzip $backupzip $backupfile 
 
# Deleta o arquivo bruto
Del $backupfile 

# Deleta arquivos antigos
CD $backuppath 
$oldbackups = gci *.zip* 
 
for($i=0; $i -lt $oldbackups.count; $i++){ 
    if ($oldbackups[$i].CreationTime -lt $date.AddDays(-$days)){ 
        $oldbackups[$i] | Remove-Item -Confirm:$false 
    } 
}
<p>O arquivo deve ser salvo com a extensão <code>.ps1</code> (PowerShell).</p>

Agendador de Tarefas – Criando o Agendamento

Para criar o agendamento no Windows você pode utilizar o Agendador de Tarefas.

Agendador de Tarefas

Criando Backups do MySQL Diariamente no Linux

Vamos aprender agora como criar um script completo no Linux, para isso você precisa ter previamente instalado o MySQL e ter os dados do usuário com capacidade de leitura no banco de dados a ser copiado. Também vamos utilizar o bzip2 para compactar os nosso arquivos, caso você não queira usar essa funcionalidade, comente as linhas 28 e 29.

#!/bin/bash

DB_NAME='dbname' # Nome do banco de dados
DB_USER='dbuser' # Usuario do banco
DB_PASS='dbpass' # Senha do banco
DB_PARAM='--add-drop-table --add-locks --extended-insert --single-transaction -quick' # Parametros para o backup https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html

MYSQLDUMP=/usr/bin/mysqldump # Caminho para o binário do mysqldump
BACKUP_DIR=/backup/mysql # Caminho para salvar os backups
DIAS=7 # Quantos dias de backups deseja manter

DATE=`date +%Y-%m-%d`
BACKUP_NAME=mysql-$DATE.sql
BACKUP_TAR=mysql-$DATE.tar
BACKUP_BZ2=mysql-$DATE.tar.bz2

echo "Iniciando o processo de backup..."

#Gerando arquivo sql
echo "Gerando backup da base de dados $DB_NAME em $BACKUP_DIR/$BACKUP_NAME"
$MYSQLDUMP $DB_NAME $DB_PARAM -u $DB_USER -p$DB_PASS &gt; $BACKUP_DIR/$BACKUP_NAME

# Compactando arquivo em tar
echo "Consolidando arquivo em tar ..."
tar -cf $BACKUP_DIR/$BACKUP_TAR -C $BACKUP_DIR $BACKUP_NAME

# Compactando arquivo com bzip2
echo "  -- Compactando arquivo em bzip2 ..."
bzip2 $BACKUP_DIR/$BACKUP_BZ2

# Excluindo arquivos brutos
echo "  -- Excluindo arquivos desnecessarios ..."
rm -rf $BACKUP_DIR/$BACKUP_NAME

# Excluindo arquivos mais antigos
find /backup/mysql -name "*.tar.bz2" -type f -mtime +$DIAS -exec rm -f {} \;

Salve o arquivo como mysql_backup.sh; De a ele permissão de execução com o comando chmod +x mysql_backup.sh; Agora execute o seu arquivo de backup com ./mysql_backup.sh.

Crontab – Criando o Agendamento

Para criar a rotina que execute diariamente o nosso backup no Linux, vamos usar a Crontab.

Abra a sua Crontab:

$ crontab -e

Agora vamos criar um agendamento que rode todos os dias às 00hs, para isso adicione a seguinte linha no final do arquivo:

0 0 * * *  sh ~/mysql_backup.sh
5 2 votos
Nota do Artigo
Author

Um nerd nada tradicional… Desenvolvedor web full-stack, escritor amador e inventor nas horas vagas. Apaixonado por tecnologia e entusiasmado por projetos de código aberto!

Subscribe
Notify of
guest
8 Comentários
newest
oldest most voted
Inline Feedbacks
View all comments
Edson
Edson
22 dias atrás

Olá. Meu arquivo de backup está vindo vazio, 0kb. O que pode estar ocorrendo?

ROBSON PEREIRA DA SILVA
ROBSON PEREIRA DA SILVA
1 mês atrás

Boa noite, bem interessante o script. Gostaria de saber como executa e qual a extensão do script para Windows ?

Christian
Christian
Reply to  ROBSON PEREIRA DA SILVA
1 mês atrás

O tutorial pecou nisso, não falar a extensão do arquivo windows, mas crio eu que seja .ps1, PowerShell.

Rafael
Rafael
Reply to  Christian
28 dias atrás

Talvez em .bat pra Windows

Christian
Christian
Reply to  Rafael
28 dias atrás

eu fiz outro em .bat, mas esse do tutorial eu fiz com o PowerShell e funcionou.

8
0
Would love your thoughts, please comment.x
()
x