Как создать дамп ( .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