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


83

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


Просто додайте опцію -R в команду mysqldump.
Deepanshu Jain

Відповіді:


122

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

  • --routines - FALSE за замовчуванням
  • --triggers - ІСТИНА за замовчуванням

тому в mysqldumpкоманді додайте, --routinesяк:

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

Див. Документацію MySQL про аргументи mysqldump .


у мене є MySQL "5.1.48-співтовариство" я запускаю "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 -uusername dbname", і вам не знадобиться ";" підпис в кінці
Хаїм Евгі

1
Також майте на увазі, що ви повинні запускати mysqldump у підказці оболонки, а не в клієнті командного рядка MySQL, у phpMyAdmin чи іншому інструменті запитів.
Білл Карвін,

@HaimEvgi, чому ти кажеш -routinesзамість --routines?
Pacerier

--routinesоднак працює, лише якщо користувач має достатні права доступу до mysql.procтаблиці. GRANT SELECT ON mysql.proc TO '<user>'@'localhost';
Рокі

20

Можливо, це очевидно для досвідчених користувачів MYSQL, але я витратив трохи часу, намагаючись з'ясувати, яке значення за замовчуванням не буде експортувати функції. Тож я подумав згадати тут, що параметр --програми потрібно встановити як істинний, щоб він працював.

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.