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


83

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


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 .


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

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

cześć, w linii 7. dlaczego zmienna DBUSER znajduje się między "" a innymi nie?
rafaelphp
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.