Estou despejando meus procedimentos armazenados apenas usando o seguinte comando:
mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt databasename -u username -p > outputfile.sql
mas o arquivo dump resultante não inclui um DROP PROCEDURE IF EXISTS antes de cada declaração de procedimento.
Como adicionar a consulta drop ao meu dump?
Obrigada.
Eu despejei meus procedimentos armazenados com o seguinte
Aqui está um dos procedimentos com o DROP PROCEDURE incluído:
Quando você usou --skip-opt, foi isso que o causou porque --opt inclui --create-options e DROP PROCEDURE é considerado específico do MySQL.
--skip-opt iria desfazer --create-options e assim remover DROP PROCEDURE.
Mistério resolvido !!!
Resposta à pergunta bônus
Esses não são comentários; essas são as diretivas do MySQL. Sempre que o MySQL executa um comando, ele procura essas diretivas dentro dos comentários
O número 50003 indica que este comando será executado se e somente se a versão do MySQL for 5.0.3 ou superior.
Aqui está outro exemplo de um mysqldump:
O número 40101 indica que este comando será executado se e somente se a versão do MySQL for 4.1.1 ou superior.
Essas diretivas SQL existem para sua proteção se você carregar esses mysqldumps em versões anteriores. Essas diretivas permitem a aceitação total de certos comandos. Por favor, não os remova.
No entanto, se você trabalha apenas com o MySQL 5.0+ e planeja despejar seus procedimentos armazenados separadamente, pode removê-los usando Perl ou awk. Pessoalmente, eu os deixaria em paz.
Na verdade, parece que a opção necessária para adicionar DROP PROCEDURE na saída do mysqldump (pelo menos no mysqldump Ver 10.13 Distrib 5.6.21-70.1, para debian-linux-gnu (x86_64)) é
--add-drop-table
: