Arquivar por categoria MySQL

Backups MySQL e Postgresql

Uma tarefa muito importante na área de informática é fazer backups, mas muitas pessoas não sabem o que backup significa, então segue a definição:

Backup é um termo do inglês que significa para na informática cópia de segurança, esta consistem em copiar dados das mais diversas naturezas para outras dispositivos/medias que possibilitam o armazenamento temporário ou definitivo

[Ronneesley Moura Teles]

Assim, pode-se compreender a importância de se realizar os backups, pois é uma garantia de que após problemas inesperados, ainda tenha-se uma solução, muitas vezes parcial, do problema. Quando digo parcial é porque provavelmente o problema ocorre depois de um determinado tempo que o backup foi realizado, assim todo o trabalho durante este tempo será perdido.

Uma das coisas mais importantes para empresas são seus bancos de dados, pois são neles que estão as informações essenciais para o perfeito funcionamento dos trabalhos oferecidos aos clientes.

Os dois bancos de dados de software livre mais conhecidos são: o MySQL e o Postgresql. Cada qual possui sua ferramenta para efetuar backups, entrentanto estas ferramentas devem ser manipuladas por pessoas em interfaces gráficas, o que gasta uma grande mão-de-obra para realizá-los todos os dias. Este fato faz com que muitas empresas não executem os backups diariamente, deixando-as expostas a sorte.

Devido a este problema escrevi, scripts para efetuarem estas tarefas em um terminal, devo declarar que existem comandos para cada uma dos bancos de dados supracitados que podem ser executados com esta finalidade, entretanto por ser muito trabalhoso reuni estes em um script.

Segue os scripts:

BACKUP MYSQL

#!/bin/bash

##
# Backup do MySQL
# @author Ronneesley Moura Teles
# @since 14:34:33 21/03/2009
##

declare DATA=`date +%Y%m%d_%H%M%S`
declare DIR_BACKUP=”<<DIRETORIO_DE_BACKUPS_MYSQL>>
declare NOME=”backup_geral_my_”$DATA”.sql”
declare SENHA=<<SENHA_DO_BANCO_MYSQL>>

mkdir $DIR_BACKUP/$DATA

DIR_BACKUP=$DIR_BACKUP$DATA

echo “MYSQL”

echo “Iniciando backup do banco de dados”

#Executa o backup de todo banco de dados
mysqldump -u root -p$SENHA –all-databases > $DIR_BACKUP/$NOME

if [ $? -eq 0 ]; then
echo “Backup geral do Banco de dados completo”
else
echo “ERRO ao realizar o Backup geral do Banco de dados”
fi

#Backup por partes
BANCOS=$(mysql -u root -p$SENHA -e “show databases”)

#retira palavra database
#BANCOS=${BANCOS:9:${#BANCOS}}

declare CONT=0
for banco in $BANCOS
do
if [ $CONT -ne 0 ]; then
NOME=”backup_my_”$banco”_”$DATA”.sql”

echo -e “Iniciando backup do banco de dados e[34;1m[$banco]e[m"

mysqldump -u root -p$SENHA --databases $banco > $DIR_BACKUP/$NOME

if [ $? -eq 0 ]; then
echo -e “Backup Banco de dados e[29;1m[$banco]e[m completo"
else
echo "ERRO ao realizar o Backup do Banco de dados [$banco]”
fi

fi

CONT=$(($CONT+1))
done

Salve como backup_mysql.sh

BACKUP DO POSTGRESQL

#!/bin/bash##
# Backup do Postgres
# @author Ronneesley Moura Teles
# @since 14:34:21 21/03/2009
##

declare DATA=`date +%Y%m%d_%H%M%S`
declare DIR_BACKUP=”<<DIRETORIO_BACKUP_POSTGRESQL>>

mkdir $DIR_BACKUP/$DATA

DIR_BACKUP=$DIR_BACKUP$DATA

echo “POSTGRES”

echo “Iniciando o Vacuum”

vacuumdb –all –full –analyze

if [ $? -eq 0 ]; then
echo “Vacuum completo com sucesso”
else
echo “Erro ao executar o vaccum”
fi

echo “Iniciando backup do banco de dados (POSTGRES dados globais)”

declare NOME=”backup_geral_pg_globais_”$DATA”.sql”

#Executa o backup de todo banco de dados
pg_dumpall -U postgres -g > $DIR_BACKUP/$NOME

if [ $? -eq 0 ]; then
echo “Backup geral do Banco de dados(POSTGRES dados globais) completo”
else
echo “ERRO ao realizar o Backup geral do Banco de dados(POSTGRES dados globais)”
fi

echo “Iniciando backup do banco de dados”

declare NOME=”backup_geral_pg_”$DATA”.sql”

pg_dump -U postgres > $DIR_BACKUP/$NOME

if [ $? -eq 0 ]; then
echo “Backup geral do Banco de dados(POSTGRES) completo”
else
echo “ERRO ao realizar o Backup geral do Banco de dados(POSTGRES)”
fi

#Backup dos bancos separados
BANCOS=$(psql -U postgres -f comando.txt -t)

echo $BANCOS

declare CONT=0
for banco in $BANCOS
do
if [ $banco != "template0" ]; then
echo “Iniciando backup do banco de dados [$banco]”

NOME=”backup_pg_”$banco”_”$DATA”.sql”

pg_dump -U postgres $banco -Ft > $DIR_BACKUP/$NOME

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=$(($CONT+1))
done

Salve como backup_postgres.sh


SCRIPT DE BACKUP GERAL

#!/bin/bash##
# Script geral
# @author Ronneesley Moura Teles
# @since 14:34:45 21/03/2009
##

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

echo “Log: $DATA”

echo “Iniciando Rotina de backup de bancos”

#Backup do mysql
./backup_mysql.sh

#Backup do postgres
./backup_postgres.sh

echo “Rotina de backup terminada”

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

echo “Fim do Log: $DATA”

Salve como backup.sh.

COMANDO PARA O POSTGRESQL

select datname from pg_database

Salve como comando.txt.

E finalmente, de a permissão de execução para os scripts com os comandos

# chmod +x backup.sh

# chmod +x backup_mysql.sh

# chmod +x backup_postgres.sh

Uma atividade muito importante é a permissão de execução sem senha para o usuário root com o Postgresql, como se trata de uma coisa um pouco complexa, deixarei para o próximo artigo.

, , , , , ,

Nenhum comentário.