Simple Features Thoughts about simple features in software development

13Aug/120

MySql Backup example script

As part of the poor man's high availability server array posts series, I include the following script that synchronizes  the master and backup database servers.

#
# Script para reinstaurar la sincronizacion de las bases de
# datos de Hershey's
#!/bin/bash
#

#Variables
HOST_FR1=
HOST_GF1=
HOST_GF2=
HOST_QA=
HOST_DEV=
DB_PASSWD=
DUMP_FILE=dumpfile.sql
LOG_FILE=
LOG_IDX=
DIA_RESPALDO=6
DIA_SEMANA=$(date +%u)

#Se cierran todos los glassfish
echo "INICIA CIERRE DE GLASSFISH"
ssh -i HSH2012SRV.pem root@$HOST_FR1 "service glassfish stop"
ssh -i HSH2012SRV.pem root@$HOST_GF1 "service glassfish stop"
ssh -i HSH2012SRV.pem root@$HOST_GF2 "service glassfish stop"
echo "FIN CIERRE DE GLASSFISH"

#Se saca el dump de la base de datos
echo "INICIO DEL DUMP DEL MASTER"
echo "  Bloqueo de tablas en MASTER"
ssh -i HSH2012SRV.pem root@$HOST_FR1\
"mysql -p$DB_PASSWD teconecta_db -e \"FLUSH TABLES WITH READ LOCK;\""
LOG_FILE=$(ssh -i HSH2012SRV.pem root@$HOST_FR1\
"mysql -p$DB_PASSWD -A --skip-column-names -e \"SHOW MASTER STATUS;\"" |\
awk '{print $1}')
LOG_IDX=$(ssh -i HSH2012SRV.pem root@$HOST_FR1\
"mysql -p$DB_PASSWD -A --skip-column-names -e \"SHOW MASTER STATUS;\"" |\
awk '{print $2}')
echo "  Se obtuvieron los indices de sincronizacion ($LOG_FILE,$LOG_IDX)"
echo "  Se inicia el dump de la base de datos"
ssh -i HSH2012SRV.pem root@$HOST_FR1\
"mysqldump -p$DB_PASSWD --opt teconecta_db > $DUMP_FILE"
echo "  Se libera el bloqueo de tablas en MASTER"
ssh -i HSH2012SRV.pem root@$HOST_FR1\
"mysql -p$DB_PASSWD teconecta_db -e \"UNLOCK TABLES;\""
echo "FIN DEL DUMP DEL MASTER"

#Se reinician todos los glassfish
echo "INICIA REINICIO DE GLASSFISH"
ssh -i HSH2012SRV.pem root@$HOST_FR1 "service glassfish start"
ssh -i HSH2012SRV.pem root@$HOST_GF1 "service glassfish start"
ssh -i HSH2012SRV.pem root@$HOST_GF2 "service glassfish start"
echo "FIN REINICIO DE GLASSFISH"

echo "INICIO DEL TRANSFER"
mv /data/$DUMP_FILE /data/$DUMP_FILE.last
scp -i HSH2012SRV.pem root@$HOST_FR1:$DUMP_FILE /data/$DUMP_FILE
echo "  Reconstruccion del esquema de DB"
mysql -p$DB_PASSWD -e "DROP DATABASE teconecta_db;"
mysql -p$DB_PASSWD -e "CREATE DATABASE teconecta_db;"
echo "  Se recupera desde el dump de la base de datos"
mysql -p$DB_PASSWD teconecta_db < /data/$DUMP_FILE
echo "FIN DEL TRANSFER"

echo "INICIO DE LA SINCRONIZACION"
echo "  Reinicio de MySQL"
service mysqld restart
echo "  Se reestablecen los valores de sincronizacion"
mysql -p$DB_PASSWD -e "SLAVE STOP;"
mysql -p$DB_PASSWD -e\
"CHANGE MASTER TO MASTER_HOST=\"$HOST_FR1\",\
MASTER_USER=\"teconecta\",\
MASTER_PASSWORD=\"teconecta\",\
MASTER_LOG_FILE=\"$LOG_FILE\",\
MASTER_LOG_POS=$LOG_IDX;"
mysql -p$DB_PASSWD -e "SLAVE START;"
echo "FIN DE LA SINCRONIZACION"

echo "INICIO DE RESPALDO PARA LA DB"
echo "  Respaldo diario"
ssh -i HSH2012SRV.pem root@$HOST_QA "mv /data/$DUMP_FILE /root/$DUMP_FILE.last"
scp -i HSH2012SRV.pem /data/$DUMP_FILE root@$HOST_QA:/data/$DUMP_FILE
if [ "$DIA_SEMANA" -eq "$DIA_RESPALDO" ]; then
echo "  Respaldo semanal en caso de ser dia $DIA_RESPALDO: $DIA_SEMANA"
scp -i HSH2012SRV.pem /data/$DUMP_FILE root@$HOST_DEV:/data/$DUMP_FILE
else
echo "  Respaldo semanal excluido por no ser dia $DIA_RESPALDO: $DIA_SEMANA"
fi
echo "FIN DE RESPALDO PARA LA DB"

Filed under: devops Leave a comment
Comments (0) Trackbacks (0)

No comments yet.


Leave a comment

Trackbacks are disabled.