Script de backup MySQL e MariaDB

Click here for the English Version

Introdução

Uma das tarefas mais importantes para um administrador de banco de dados é o backup de sua(s) database(s).

O objetivo deste post é criar um script de backup que ficará agendado no crontab e executará as rotinas de backup todos os dias as 02:00 a.m. O usuário “backup” só terá privilégios necessários para efetuar o backup.

Neste post, é adotado o CentOS 5 como referência. Mas versões mais novas também deverão funcionar sem problemas.

Criação e configuração do Usuário ‘backup’

Para criarmos o usuário, precisamos de privilégios administrativos no MySQL. Neste exemplo utilizaremos o usuário root.

Estando logado na máquina do banco, efetue logon no MySQL shell:

$mysql -u root -p

Forneça a senha de acesso e o prompt do shell MySQL será apresentado:

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 996333
Server version: 5.0.77-log Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

Depois de logado, devemos criar o usuário e definir a senha:

mysql>create user backup@localhost identified by 'seu_password';

Neste exemplo, foi criado o usuário ‘backup’ que pode acessar o MySQL somente da própria máquina do banco, utilizando a senha ‘seu_password’.  Se tentarmos acessar o MySQL com este usuário de outra máquina, que não seja a própria maquina do banco, teremos acesso negado.

Agora devemos dar os privilégios para este usuário efetuar as rotinas de backup:

mysql>GRANT SELECT, RELOAD, SHOW DATABASES, LOCK TABLES ON *.* TO 'backup'@'localhost';

O usuário ‘backup’ deve possuir os privilégios SELECT, RELOAD, SHOW DATABASES e LOCK TABLES para conseguir efetuar os backups corretamente.

Alguns testes podem ser feitos para verificar se o usuário backup está ok.

Tente logar no MySQL Shell

$mysql -u root -p

Depois verifique as databases disponíveis

mysql> show databases;

Suponto que exista uma database chamada teste, com uma tabela tabela1, efetue um select nesta database:

mysql> use backup; select * from tabela1;

Se tudo correu bem até agora, podemos ir para o próximo passo. Caso contrário, volte e verifique os passos executados.

Criação do script de backup

Como o script já está todo comentado, não serão feitos comentários extras a respeito do mesmo.

O script será salvo no diretório /opt/scripts com o nome de backup_mysql.sh

#!/bin/bash
###################################################################
# Nome : backup_mysql.sh
# Script para Backup dos dados do MySQL  #
# Criação : 31/03/2017 - Adail Antonio #
# Ultima modificação : 31/03/2017 - Adail Antonio #
###################################################################

# Changelog 


##### Variaveis 
declare DATA=`date +%Y%m%d_%H%M%S`
declare DIR_BACKUP="/opt/backups/mysql/"  #  Define o diretório de backup
declare SENHA="seu_password"
declare USER="backup"
DIR_DEST_BACKUP=$DIR_BACKUP$DATA
###################################################################

##### Rotinas secundarias
mkdir -p $DIR_BACKUP/$DATA # Cria o diretório de backup diário
echo "MYSQL"
echo "Iniciando backup do banco de dados"
##################################################################

# função que executa o backup
executa_backup(){
echo "Inicio do backup $DATA"
 #Recebe os nomes dos bancos de dados na maquina destino
 BANCOS=$(mysql -u $USER -p$SENHA -e "show databases")
 #retira palavra database
 #BANCOS=${BANCOS:9:${#BANCOS}}

declare CONT=0

#inicia o laço de execução dos backups 


for banco in $BANCOS
 do
 if [ $CONT -ne 0 ]; then    # ignora o primeiro item do array, cujo conteudo é "databases"
     NOME="backup_my_"$banco"_"$DATA".sql"


    echo "Iniciando backup do banco de dados [$banco]"
   # comando que realmente executa o dump do banco de dados 
   mysqldump --hex-blob --lock-all-tables -u $USER -p$SENHA --databases $banco > $DIR_DEST_BACKUP/$NOME
 

   # verifica que se o comando foi bem sucedido ou nao.
   if [ $? -eq 0 ]; then
      echo "Backup Banco de dados [$banco] completo"
   else
      echo "ERRO ao realizar o Backup do Banco de dados [$banco]"
   fi

fi
 CONT=`expr $CONT + 1`
 done


DATA=`date +%Y%m%d_%H%M%S`

echo "Final do backup: $DATA"
}

executa_backup 2>> $DIR_BACKUP/$DATA/backup.log 1>> $DIR_BACKUP/$DATA/backup.log

###################################################################

É importante não esquecer de dar permissões de execução ao script:

$sudo chmod +x /opt/scripts/backup_mysql.sh

 

Agendamento das execuções (crontab)

Para que o processo de automatização seja concluído, precisamos configurar o crontab da máquina, para que ela execute o script no horário desejado.

Para editar o crontab do root, com o editor padrão do sistema:

$sudo crontab -e

Serão inseridas duas linhas, a primeira linha diz para o crontab executar o script /opt/scripts/backup_mysql.sh todos os dias da semana às 02 a.m.

00 02 * * * /opt/scripts/backup_mysql.sh

A segunda linha, diz respeito a retenção dos arquivos de backup na máquina. Neste caso serão mantidos os backups dos ultimos 31 dias.

0 23 * * * /usr/bin/find /opt/backups/mysql -type d -ctime +31 -exec rm -rf '{}' \;

 

Depois de salvo o arquivo de configuração do crontab, seu sistema já esta devidamente configurado para os backups mensais.

blur bright business codes
Photo by Pixabay on Pexels.com
Publicidade

13 comentários em “Script de backup MySQL e MariaDB

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s