Как создать дамп ( .sqlфайл) базы данных MySQL со всеми его триггерами и процедурами?
Ответы:
mysqldumpбудет резервное копирование по умолчанию всех триггеров , но NOT в хранимых процедурах / функциях . Есть 2 параметра mysqldump, которые управляют этим поведением:
--routines - ЛОЖЬ по умолчанию--triggers - ИСТИНА по умолчаниюпоэтому в mysqldumpкоманде добавьте что-то --routinesвроде:
mysqldump <other mysqldump options> --routines > outputfile.sql
-routinesвместо --routines?
--routinesОднако работает только в том случае, если у пользователя есть достаточные права доступа к mysql.procтаблице. GRANT SELECT ON mysql.proc TO '<user>'@'localhost';
Возможно, это очевидно для опытных пользователей MYSQL, но я потратил некоторое время, пытаясь выяснить, значение по умолчанию не будет экспортировать функции. Поэтому я подумал упомянуть здесь, что для параметра --routines необходимо установить значение true, чтобы он работал.
mysqldump --routines=true -u <user> my_database > my_database.sql
Я создал следующий сценарий, и он отлично сработал.
#! /bin/sh
cd $(dirname $0)
DB=$1
DBUSER=$2
DBPASSWD=$3
FILE=$DB-$(date +%F).sql
mysqldump --routines "--user=${DBUSER}" --password=$DBPASSWD $DB > $PWD/$FILE
gzip $FILE
echo Created $PWD/$FILE*
и вы вызываете сценарий, используя аргументы командной строки.
backupdb.sh my_db dev_user dev_password