O MySQL infelizmente não permite que o dump das Procedures/Functions seja feito separado por objeto.
Para contornar isto, peguei uns scripts na Internet e acabei montando a minha versão.
Para executá-los:
./gera_dump_procedure [host/Ip] [Porta] [Usuário] [Senha] [Banco/Schema] [Procedure] [Diretório para Gravação]
./gera_dump_function [host/Ip] [Porta] [Usuário] [Senha] [Banco/Schema] [Function] [Diretório para Gravação]
Estes scripts são para rodar em ambiente bash (LINUX).
Para obter uma lista dos objetos, pode-se usar os SELECTS
SELECT CONCAT('./gera_dump_procedure. sh [host] [porta] [usuario] [senha] [banco]', ROUTINE_NAME, ' [diretorio]') exec
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = '[banco]'
AND ROUTINE_TYPE = 'PROCEDURE'
;
SELECT CONCAT('./gera_dump_function. sh [host] [porta] [usuario] [senha] [banco]', ROUTINE_NAME, ' [diretorio]') exec
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_SCHEMA = '[banco]'
AND ROUTINE_TYPE = 'FUNCTION'
;
Nos SELECTs troque as informações [host] [porta] [usuario] [senha] [banco] e [diretorio] de acordo com a sua necessidade.
Script Gera_Dump_Procedure
#!/bin/bash
##---------------------------------------##
## Gera Arquivo SQL de Procedure MySQL ##
## Parametros : ##
## 1 - Host (IP) ##
## 2 - Porta ##
## 3 - Usuário ##
## 4 - Senha ##
## 5 - Database/Schema ##
## 6 - Procedure ##
## 7 - Diretório ##
##---------------------------------------##
if [ "$#" -ne 7 ];then
echo "Sintaxe incorreta..."
echo "Uso: $0 host(ip) porta usuario senha banco procedure diretorio"
exit
fi
HOST=${1}
PORTA=${2}
USUARIO=${3}
SENHA=${4}
BANCO=${5}
PROCEDURE=${6}
DIRETORIO=${7}
ARQ_SAIDA="${DIRETORIO}/${PROCEDURE}.sql"
echo "DROP PROCEDURE IF EXISTS ${PROCEDURE};" > ${ARQ_SAIDA}
echo 'DELIMITER $$' >> ${ARQ_SAIDA}
mysql -NB -h${HOST} -P${PORTA} -u ${USUARIO} -p${SENHA} ${BANCO} -e "show create procedure ${PROCEDURE}" |\
xargs -n 1 -d '\t' echo |\
egrep '^CREATE' |\
xargs --null echo -e >> ${ARQ_SAIDA}
echo '$$' >> ${ARQ_SAIDA}
echo "DELIMITER ;" >> ${ARQ_SAIDA}
Script Gera_Dump_Function
#!/bin/bash
##---------------------------------------##
## Gera Arquivo SQL de Function MySQL ##
## Parametros : ##
## 1 - Host (IP) ##
## 2 - Porta ##
## 3 - Usuário ##
## 4 - Senha ##
## 5 - Database/Schema ##
## 6 - Function ##
## 7 - Diretório ##
##---------------------------------------##
if [ "$#" -ne 7 ];then
echo "Sintaxe incorreta..."
echo "Uso: $0 host(ip) porta usuario senha banco function diretorio"
exit
fi
HOST=${1}
PORTA=${2}
USUARIO=${3}
SENHA=${4}
BANCO=${5}
FUNCTION=${6}
DIRETORIO=${7}
ARQ_SAIDA="${DIRETORIO}/${FUNCTION}.sql"
echo "DROP FUNCTION IF EXISTS ${FUNCTION};" > ${ARQ_SAIDA}
echo 'DELIMITER $$' >> ${ARQ_SAIDA}
mysql -NB -h${HOST} -P${PORTA} -u ${USUARIO} -p${SENHA} ${BANCO} -e "show create function ${FUNCTION}" |\
xargs -n 1 -d '\t' echo |\
egrep '^CREATE' |\
xargs --null echo -e >> ${ARQ_SAIDA}
echo '$$' >> ${ARQ_SAIDA}
echo "DELIMITER ;" >> ${ARQ_SAIDA}