Как экспортировать базу данных MySQL с триггерами и процедурами?

83

Как создать дамп ( .sqlфайл) базы данных MySQL со всеми его триггерами и процедурами?

Югал
источник
Просто добавьте параметр -R в команду mysqldump.
Deepanshu Jain

Ответы:

122

mysqldumpбудет резервное копирование по умолчанию всех триггеров , но NOT в хранимых процедурах / функциях . Есть 2 параметра mysqldump, которые управляют этим поведением:

  • --routines - ЛОЖЬ по умолчанию
  • --triggers - ИСТИНА по умолчанию

поэтому в mysqldumpкоманде добавьте что-то --routinesвроде:

mysqldump <other mysqldump options> --routines > outputfile.sql

См. Документацию MySQL об аргументах mysqldump .

Хаим Евги
источник
у меня MySQL "5.1.48-community", я запускаю "mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt> dumpfile.sql;" но он выдает ошибку, и ошибка "ОШИБКА 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство, которое соответствует вашей версии сервера MySQL, чтобы найти правильный синтаксис рядом с 'mysql dump --routines --no -create-info --no-data --no-create-db --skip-opt> dum 'в строке 1 ". Как это решить? -
Югал
добавьте в команду "-p -username dbname", и вам не понадобится ";" подпишитесь в конце
Хаим Евги
1
Также имейте в виду, что вы должны запускать mysqldump в приглашении оболочки, а не в клиенте командной строки MySQL, в phpMyAdmin или другом инструменте запросов.
Билл Карвин,
@HaimEvgi, почему -routinesвместо --routines?
Pacerier
--routinesОднако работает только в том случае, если у пользователя есть достаточные права доступа к mysql.procтаблице. GRANT SELECT ON mysql.proc TO '<user>'@'localhost';
Rocki
20

Возможно, это очевидно для опытных пользователей MYSQL, но я потратил некоторое время, пытаясь выяснить, значение по умолчанию не будет экспортировать функции. Поэтому я подумал упомянуть здесь, что для параметра --routines необходимо установить значение true, чтобы он работал.

mysqldump --routines=true -u <user> my_database > my_database.sql
Усмань
источник
1
Вам не нужно использовать --routines = true. По умолчанию Sprocs НЕ сбрасываются. Вам просто нужно включить --routines в соответствии с примером в принятом ответе.
gview
6

Я создал следующий сценарий, и он отлично сработал.

#! /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
Кришна Ведула
источник
привет, почему в строке 7 переменная DBUSER находится между "", а другая - нет?
rafaelphp