Як створити дамп бази даних MySQL ( .sqlфайл) з усіма його тригерами та процедурами?
Відповіді:
mysqldumpбуде резервне копіювання по замовчуванням всіх тригерів , але NOT в збережених процедурах / функціях . Існує 2 параметри mysqldump, які контролюють цю поведінку:
--routines - FALSE за замовчуванням--triggers - ІСТИНА за замовчуваннямтому в mysqldumpкоманді додайте, --routinesяк:
mysqldump <other mysqldump options> --routines > outputfile.sql
-routinesзамість --routines?
--routinesоднак працює, лише якщо користувач має достатні права доступу до mysql.procтаблиці. GRANT SELECT ON mysql.proc TO '<user>'@'localhost';
Можливо, це очевидно для досвідчених користувачів MYSQL, але я витратив трохи часу, намагаючись з'ясувати, яке значення за замовчуванням не буде експортувати функції. Тож я подумав згадати тут, що параметр --програми потрібно встановити як істинний, щоб він працював.
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