Nesse post irei apresentar uma forma de automatizar o backup de um banco de dados Postgres e enviá-lo para o Google Drive. Para isto utilizaremos o utilitário gdrive do prasmussen que nos facilita na iteração com o Google Drive.
Instalando o GDrive
Crie uma pasta bin dentro do diretório da sua conta:
mkdir ~/bin
cd ~/bin
Baixe a última versão do gdrive no repositório através do comando:
wget https://github.com/prasmussen/gdrive/releases/download/2.1.1/gdrive_2.1.1_linux_amd64.tar.gz
Extraia o arquivo:
tar -zxvf gdrive_2.1.1_linux_amd64.tar.gz
Para configurar o acesso a sua conta Google Drive, digite o seguinte comando:
gdrive about
Uma mensagem de autenticação obrigatória irá ser apresentada, Copie a URL e cole no seu navegador, e clique em permitir.
Backup do banco de dados para o Google Drive
Após a instalação e configuração do utilitário do gdrive, vamos precisar criar uma pasta no Google Drive, onde iremos armazenar os arquivos de backup do banco de dados, para isso utilize o comando abaixo, ou altere para um diretório da sua escolha:
~/bin/gdrive mkdir backups
Obtenha o ID da nova pasta criada para utilizarmos no script de backup:
~/bin/gdrive list
Feito isto vamos criar um script para backup do banco de dados postgres e criar um agendamento no crontab. Crie um arquivo chamado backup-gdrive.sh com o seguinte conteúdo abaixo, mas não se esqueça de alterar os valores que estão entre colchetes ex: [NOME_BANCO_DE_DADOS] para “database”:
#!/bin/bash
now=`date +%Y%m%d-%H%M%S`
day_ago=14
db_name="[NOME_BANCO_DE_DADOS]"
folder_gdrive_id=[ID_PASTA_GDRIVE]
base_path="/home/[NOME_DO_USUARIO]/backups"
dump_fpath="$base_path/backup_db-$now.sql.gz"
echo "Iniciando backup do banco de dados..."
sudo -u postgres pg_dump $db_name | gzip -9 > $dump_fpath
echo "Backup banco de dados finalizado."
echo "Removendo backups de 7 dias atrás..."
find $base_path -maxdepth 1 -type f -name "backup_db*.gz" -mtime +$day_ago -delete
echo "Remoção finalizada."
echo "Sincronizando backup com Google Drive..."
/home/[NOME_DO_USUARIO]/bin/gdrive sync upload --delete-extraneous $base_path $folder_gdrive_id
echo "Sincronização finalizada com sucesso."
Para testar execute o script criado com o comando:
sh backup-gdrive.sh
Automatizando backup postgres com crontab
Insira o comando no arquivo crontab que fica em /etc/crontab, e altere o valor entre colchetes. Ex: [NOME_DO_USUARIO] para kelvin:
# Backup postgres and sync gdrive (todo dia 01:00 da manha)
1 0 * * * [NOME_DO_USUARIO] /home/[NOME_DO_USUARIO]/backup-gdrive.sh
Assim o script de backup irá ser executado todo dia ás 01:00 da manhã.
Dúvidas?
Você tem outras dúvidas? Deixe seu feedback nos comentários abaixo.