jueves, 4 de febrero de 2016

Script Respaldo Procedimientos MySQL

Respaldo de procedimientos de 1 por 1 en MySQL en bash.

El siguiente script permite respaldar los procedimientos, y/o funciones de una base de datos dada como parámetro, y dejando el respaldo parseado y listo para ser registrado.



Este fue creado con la necesidad de respaldar de uno por uno de los procedimientos, en archivos separados y formateado de tal manera que se pudiera registrar sin necesidad de mover.


#!/bin/bash
## Dump procedures infiles individuals.

_database=$1;
# i put a default, coudl be a parameter
# _dir=$2

_dir="/home/clickbal/respaldos/procedures/"$2/;

if [ -z ${2+x} ];
    then
    # If not sent the second parameter, take the first one, to the destination file.
    _dir=${_dir}/$1/
fi

if [ -z ${1+x} ];
    then
    echo ''
    echo ' + At least one parameter, database name + '
    echo ' +    the second one is the directory    + '
    echo ''
    exit
fi

if [[ ! -e $_dir ]]; then
    mkdir $_dir
elif [[ ! -d $_dir ]]; then
    echo "$_dir already exists but is not a directory" 1>&2
fi

echo "Database of procedures: " ${_database}
# "Obtain the grooup of procedures to dump, in database."
echo "SELECT routine_name FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = '${_database}' AND ROUTINE_TYPE = 'PROCEDURE';" | mysql -A ${_database} --skip-column-names --raw --batch > list_routines.txt

# While to record alld the procedures.
    while IFS='' read -r line || [[ -n "$line" ]]; do
    echo "Store procedure to backup: $line"
    echo "SELECT CONCAT('DROP PROCEDURE IF EXISTS \`', specific_name, '\`;\n DELIMITER \$\$\nCREATE PROCEDURE \`', specific_name, '\`(', param_list, ') %ending% \n', body_utf8, ' \$\$\nDELIMITER ;\n') FROM mysql.proc WHERE db = '${_database}' AND specific_name = '$line';" | mysql -A ${_database} --skip-column-names --raw --batch > ${_dir}$line.sql
done < list_routines.txt
echo "End of dump "

No hay comentarios.:

Publicar un comentario