2010-10-02 9 views

Odpowiedz

3

powinno być coś wzdłuż tych linii:

http://dev.mysql.com/doc/refman/5.5/en/error-types.html

'00' indicates success. 
'01' indicates a warning. 
'02' indicates “not found.” 
+7

Nie sądzę, że to jest poprawne. Podany link wydaje się być dla kodów błędów mysql. Samo dochodzenie pokazuje, że kod błędu 3 jest wewnętrznym błędem mysql, a kod błędu 0 to sukces. Tak i tak już znalazłem. – Arcterex

+4

Myślę, że są to kody błędów "mysql", w przeciwieństwie do kodów błędów "mysqldump". – yoni

31

Zrobione z klientem/mysqldump.c w MySQL 5.1.59:

#define EX_USAGE 1 
#define EX_MYSQLERR 2 
#define EX_CONSCHECK 3 
#define EX_EOM 4 
#define EX_EOF 5 /* ferror for output file was got */ 
#define EX_ILLEGAL_TABLE 6 

przeglądając źródła, EX_MYSQLERR wydaje do użycia głównie w przypadku błędów z serwera, ale także w przypadku niepowodzenia malloc. Wygląda na to, że CONSCHECK może oznaczać kontrole spójności. EX_EOM jest zwracana również w przypadku niektórych połączeń _alloc - "End Of Memory"?

8

Kod zakończenia 2 często występuje, gdy zrzutu nie można ukończyć z powodu problemów z przywilejami; na przykład, jeśli użytkownik nie ma uprawnienia LOCK TABLES lub podane hasło było nieprawidłowe.

0

Innym powodem może być hasło ze zbyt specjalnymi znakami, które zostały użyte bez zmiany znaczenia na konsoli (ponieważ używasz mysqldump). Proces zwraca także kod błędu 2. Mam ten problem od czasu do czasu. Zawijanie params przynajmniej w cudzysłowach/cudzysłowach często pomaga: Zamiast -u... -p... i tak dalej, używanie "-u..." "-p..." eliminuje wiele problemów. Jednak nie jest to idealne rozwiązanie (jeśli stosuje się ten sam rodzaj ofert).

Może to być również problem zależny od systemu operacyjnego. MS Windows na przykład używa zmiennych, takich jak %MYVAR%, które nie mogą być w ogóle w ogóle uaktywnione (przynajmniej niektóre źródła, takie jak PHP docu, wspominają o tym).

2

to warto zauważyć, że w przypadku korzystania mysqldump w funkcji php exec, shell_exec lub system jak polecenie zwróci kod wyjścia 02, jeśli nie masz uprawnień do zapisu pliku do wybranej lokalizacji.

W moim przypadku polecenia:

mysqldump '-uUSER' '-pPASS' DATABASE > /home/USER/LOCATION/dump.sql 

Wywołany z php nie działa. Zostało to rozwiązane po dodaniu odpowiednich uprawnień do zapisu do folderu LOCATION.

Rozwiązałem go, sprawdzając, co zostało wysłane jako wyjście podczas wywoływania komendy:

myslqdump 

i po nim:

mysqldump '-uUSER' '-pPASS' DATABASE 

W obu przypadkach polecenie dał właściwą odpowiedź w 2nd argumentu exec funkcji.