Чи може mysqldump скидати тригери та процедури?


10

Чи є спосіб створити mysqldump, який збереже всі тригери та процедури із заданого db?

Деякий час тому я прочитав, що 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 Rolando має право на те, як скинути тригери / процедури. Якщо ви хочете побачити, чи вони існують у файлі sql, відкрийте його та знайдіть виклики "СТВОРИТИ ТРІГЕРЕР". Якщо в * nix,grep 'CREATE TRIGGER'
Дерек Дауні

@RolandoMySQLDBA, не --triggersскидається за замовчуванням? Яка буде різниця між --no-data --routines --triggersvs --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 (. *?) ) З цим: СПРИЙТЕ ТРІГГЕР / *! 50032 ЯКЩО Є * * $2;; \ n $ 1
АлександруСербань
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.