Zrzuć tylko procedury przechowywane w MySQL

31

Muszę zrzucić tylko procedury składowane: bez danych, bez tworzenia tabeli. Jak mogę to zrobić za pomocą mysqldump?

nakhli
źródło
1
+1 za to pytanie, ponieważ jest wielu programistów w świecie DB, którzy lubią katalogować procedury przechowywane poza MySQL w oprogramowaniu do kontroli wersji, którzy chcieliby to zrobić (sam nie jestem fanem tego
RolandoMySQLDBA
W moim przypadku to polecenie daje mi błąd. mysqldump: Got error: 23: "Out of resources when opening file"Miałem --single-transactionopcję rozwiązania tego błędu. A jeśli chcesz tylko procedury, możesz dodać - -no-create-infoaby uniknąć instrukcji tworzenia tabeli.
bedomon

Odpowiedzi:

34

To powinno zrobić to za Ciebie:

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.

CAVEAT

O wiele lepiej byłoby nie oddzielać procedur przechowywanych od bazy danych, aby w bazie danych, dla której były przeznaczone, zostały utworzone określone procedury przechowywane. To samo dotyczy wyzwalaczy. Byłoby to preferowane:

mysqldump -h... -u... -p... -d --routines --triggers --all-databases > MySQLStoredProc.sql
RolandoMySQLDBA
źródło
9
Próbowałem tego i musiałem dodać opcję -t, aby nie tworzyć instrukcji tworzenia tabeli.
Derek Downey
Zapomniałem tego, szkoda, że ​​nie mogę głosować za komentarzami. Zaktualizowałem pierwsze polecenie mysqldump, aby je uwzględnić. Drugi należy pominąć, aby powiązać każdy wyzwalacz z jego tabelą podstawową. Jeszcze raz dziękuję, @DTest !!!
RolandoMySQLDBA
Nie ma problemu. W moim przypadku chciałem tylko przechowywane funkcje / procedury dla konkretnej bazy danych, a nie wyzwalacze. Tak się udało
Derek Downey,