Jak wyeksportować bazę danych MySQL z wyzwalaczami i procedurami?

83

Jak utworzyć zrzut ( .sqlplik) bazy danych MySQL ze wszystkimi wyzwalaczami i procedurami?

Yugal
źródło
Po prostu dodaj opcję -R w poleceniu mysqldump.
Deepanshu Jain

Odpowiedzi:

122

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 TRUE

więc w mysqldumppoleceniu dodaj --routines:

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

Zobacz dokumentację MySQL na temat argumentów mysqldump .

Haim Evgi
źródło
mam MySQL "5.1.48-community" uruchamiam "mysqldump --routines --no-create-info --no-data --no-create-db --skip-opt> dumpfile.sql;" ale wyświetla błąd, a błąd to „BŁĄD 1064 (42000): Masz błąd w składni SQL; zapoznaj się z instrukcją, która odpowiada Twojej wersji serwera MySQL, aby znaleźć właściwą składnię w pobliżu 'mysql dump --routines --no -create-info --no-data --no-create-db --skip-opt> dum 'w linii 1 ". Jak to rozwiązać? -
Yugal
dodaj do polecenia „-p -uusername nazwa_db” i nie potrzebujesz znaku „;” Podpisz na koniec
Haim Evgi
1
Pamiętaj również, że powinieneś uruchomić mysqldump w wierszu polecenia powłoki, a nie w kliencie wiersza poleceń MySQL, phpMyAdmin lub innym narzędziu do zapytań.
Bill Karwin
@HaimEvgi, dlaczego -routineszamiast tego mówisz --routines?
Pacerier
--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';
Rocki
20

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
Usman
źródło
1
Nie musisz używać --routines = true. Sprocy NIE są domyślnie zrzucane. Wystarczy, że w akceptowanej odpowiedzi uwzględnisz --programy zgodnie z przykładem.
gview
6

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
Krishna Vedula
źródło
cześć, w linii 7. dlaczego zmienna DBUSER znajduje się między "" a innymi nie?
rafaelphp