Как экспортировать базу данных 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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.