Jak utworzyć zrzut ( .sqlplik) bazy danych MySQL ze wszystkimi wyzwalaczami i procedurami?
Odpowiedzi:
mysqldumptworzenia kopii zapasowej przez Domyślnie wszystkie wyzwalaczy ale NOT z przechowywanych procedur / funkcji . Istnieją 2 parametry mysqldump, które kontrolują to zachowanie:
--routines - domyślnie FALSE--triggers - Domyślnie TRUEwięc w mysqldumppoleceniu dodaj --routines:
mysqldump <other mysqldump options> --routines > outputfile.sql
-routineszamiast tego mówisz --routines?
--routinesdziała jednak tylko wtedy, gdy użytkownik ma wystarczające prawa dostępu do mysql.proctabeli. GRANT SELECT ON mysql.proc TO '<user>'@'localhost';
Być może jest to oczywiste dla doświadczonych użytkowników MYSQL, ale straciłem trochę czasu, próbując dowiedzieć się, że domyślna wartość nie wyeksportowałaby funkcji. Dlatego pomyślałem, że wspomnę tutaj, że --routines param musi być ustawione na true, aby działało.
mysqldump --routines=true -u <user> my_database > my_database.sql
Stworzyłem następujący skrypt i działał dobrze.
#! /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*
i wywołujesz skrypt używając argumentów wiersza poleceń.
backupdb.sh my_db dev_user dev_password