mysqldumptworzenia kopii zapasowej przez Domyślnie wszystkie wyzwalaczy ale NOT z przechowywanych procedur / funkcji . Istnieją 2 parametry mysqldump, które kontrolują to zachowanie:
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.
Nie musisz używać --routines = true. Sprocy NIE są domyślnie zrzucane. Wystarczy, że w akceptowanej odpowiedzi uwzględnisz --programy zgodnie z przykładem.
Odpowiedzi:
mysqldump
tworzenia 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
mysqldump
poleceniu dodaj--routines
:Zobacz dokumentację MySQL na temat argumentów mysqldump .
źródło
-routines
zamiast tego mówisz--routines
?--routines
działa jednak tylko wtedy, gdy użytkownik ma wystarczające prawa dostępu domysql.proc
tabeli.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.
źródło
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ń.
źródło