Дамп только хранимых процедур в MySQL

31

Мне нужно сбросить только хранимые процедуры: нет данных, нет создания таблиц. Как я могу сделать это, используя mysqldump?

nakhli
источник
1
+1 за этот вопрос, потому что есть много разработчиков в мире БД, которые любят каталогизировать хранимые процедуры вне MySQL в программном обеспечении для контроля версий, которые хотели бы сделать это (я сам не фанат этого)
RolandoMySQLDBA
В моем случае эта команда выдает ошибку. У mysqldump: Got error: 23: "Out of resources when opening file"меня была --single-transactionвозможность устранить эту ошибку. И если вам нужна только подпрограмма, вы можете добавить - -no-create-infoчтобы избежать оператора создания таблицы.
Бедомон

Ответы:

34

Это должно сделать это для вас:

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.

ПРЕДОСТЕРЕЖЕНИЕ

Было бы намного лучше не отделять хранимые процедуры от базы данных, чтобы в базе данных, для которой они предназначались, были созданы конкретные хранимые процедуры. То же самое касается триггеров. Это было бы предпочтительнее:

mysqldump -h... -u... -p... -d --routines --triggers --all-databases > MySQLStoredProc.sql
RolandoMySQLDBA
источник
9
Я попробовал это и должен был добавить опцию -t, чтобы не получать операторы создания таблицы.
Дерек Дауни
Забыл это, жаль, что я не могу высказать свои комментарии. Я обновил первую команду mysqldump, чтобы включить ее. Второй должен быть опущен, чтобы связать каждый триггер с его базовой таблицей. Еще раз спасибо, @DTest !!!
RolandoMySQLDBA
Нет проблем. В моем случае я просто хотел сохранить функции / процедуры для конкретной базы данных, а не триггеры. Так что все получилось
Дерек Дауни