Может ли mysqldump сбрасывать триггеры и процедуры?


10

Есть ли способ сделать mysqldump, который будет сохранять все триггеры и процедуры из указанного БД?

Некоторое время назад я прочитал, что mysqldumpтакже спасет мои триггеры, но это не похоже на это. Мой второй связанный вопрос, как я могу проверить в файле sql, если триггеры существуют?

Ответы:


9

Обычно я не отделяю триггеры от таблиц, для которых они предназначены. Я сбрасываю, как это:

mysqldump -u... -p... --no-data --routines --triggers dbname > DBSchema.sql

Проверьте наличие подпрограмм и триггеров, как это:

SELECT COUNT(1) FROM mysql.proc;

SELECT COUNT(1) FROM information_schema.triggers;

SELECT * FROM information_schema.triggers\G

Если вы хотите, чтобы это было сделано для всех БД в экземпляре MySQL, сделайте следующее:

mysql -u... -p... -A -N -e"SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema','mysql')" > /tmp/dblist.txt
for DB in `cat /tmp/dblist.txt`
do
    mysqldump -u... -p... --no-data --no-create-info --routines dbname > ${DB}-routines.sql
    mysqldump -u... -p... --no-data --triggers dbname > ${DB}-schema-triggers.sql
done

Таким образом, хранимые процедуры отправляются в дамп подпрограмм для БД, а схема и триггеры - в другой дамп.


Право @dole Роландо о том, как сбрасывать триггеры / процедуры. Если вы хотите узнать, существуют ли они в файле sql, откройте его и выполните поиск вызовов «CREATE TRIGGER». Если в * nix,grep 'CREATE TRIGGER'
Дерек Дауни

@RolandoMySQLDBA, --triggersпо умолчанию не сбрасывается? Какая разница между --no-data --routines --triggersпротив --no-data --routines?
Pacerier

1
@Pacerier Были ситуации, когда я не хотел триггеров, и я бы использовал их --skip-triggersв таких случаях (например, при настройке рабов, которые не нуждались в триггерах). В качестве постоянного напоминания мне о возможности пропуска параметров, я всегда использую определенные флаги в mysqldumps ( --routines, --triggers), даже если они установлены по умолчанию. Так что это просто личное предпочтение. Если вы уверены, что настройки по умолчанию останутся настройками по умолчанию от версии к версии и никогда не будут иметь дело с ситуациями adhoc, то вы выражаете mysqldumps так, как вам нужно, если полученный mysqldump верен для вас.
RolandoMySQLDBA

@RolandoMySQLDBA - Что делают -A -N?
MontyPython

Я использовал регулярные выражения для добавления операторов триггера DROP: Замените это: (\ / * \! 50003 CREATE * \ / \ / * \! 50017 DEFINER \ = some_text_here * \ / \ / * \! 50003 TRIGGER (. *?) ) С этим: DROP TRIGGER / *! 50032 ЕСЛИ СУЩЕСТВУЕТ * / $2;; \ n $ 1
AlexandruSerban
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.