Despejar apenas os procedimentos armazenados no MySQL

31

Eu preciso despejar apenas os procedimentos armazenados: sem dados, sem criação de tabela. Como posso fazer isso usando o mysqldump?

nakhli
fonte
11
+1 para esta pergunta porque existem muitos desenvolvedores no mundo do banco de dados que gostam de catalogar procedimentos armazenados fora do MySQL em software de controle de versão que gostariam de fazer isso (eu não sou fã de fazer isso sozinho)
RolandoMySQLDBA
No meu caso, este comando me deu um erro mysqldump: Got error: 23: "Out of resources when opening file", tive a --single-transactionopção de resolver esse erro. E se você quiser apenas a rotina, poderá adicionar - -no-create-infopara evitar a instrução create table.
bedomon

Respostas:

34

Isso deve fazer isso por você:

mysqldump -h... -u... -p... -n -d -t --routines --triggers --all-databases > MySQLStoredProc.sql

  -n, --no-create-db     Suppress the CREATE DATABASE ... IF EXISTS statement 
                         that normally is output for each dumped database if
                         --all-databases or --databases is given.
  -d, --no-data          No row information.
  --triggers             Dump triggers for each dumped table.
                         (Defaults to on; use --skip-triggers to disable.)
  -R, --routines         Dump stored routines (functions and procedures).
  -t, --no-create-info   Do not write CREATE TABLE statements that create each 
                         dumped table.

EMBARGO

Seria muito melhor não separar os procedimentos armazenados do banco de dados, para que procedimentos armazenados específicos sejam criados no banco de dados para o qual foram criados. O mesmo vale para gatilhos. Isso seria preferível:

mysqldump -h... -u... -p... -d --routines --triggers --all-databases > MySQLStoredProc.sql
RolandoMySQLDBA
fonte
9
Eu tentei isso e tive que adicionar a opção '-t' para não obter as instruções da tabela de criação.
Derek Downey
Esqueci esse, pena que não posso votar novamente. Atualizei o primeiro comando do mysqldump para incluí-lo. O segundo deve ser deixado de fora para associar todos os gatilhos à sua tabela base. Mais uma vez obrigado, @DTest !!!
RolandoMySQLDBA
Sem problemas. No meu caso, eu só queria funções / procedimentos armazenados para um banco de dados específico, e não gatilhos. Por isso funcionou bem
Derek Downey