Dove posso trovare un elenco di codici di uscita “mysqldump”?

So che exit code = 0 significa No error .

Ho ottenuto il exit code = 2 . Cosa significa ?

Dove posso vedere l’elenco completo dei codici di uscita di mysqldump ?

Tratto da client / mysqldump.c in 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 

Sfogliando l’origine, EX_MYSQLERR sembra essere usato principalmente per errori dal server, ma anche in caso di fallimento di malloc. CONSCHECK sembra rappresentare controlli di coerenza. EX_EOM viene restituito anche per alcune chiamate _alloc – “End Of Memory”?

Il codice di uscita 2 si verifica spesso quando il dump non può essere completato a causa di problemi di privilegi; ad esempio, se l’utente non ha il privilegio LOCK TABLES o la password fornita è sbagliata.

Vale la pena notare che se si usa mysqldump nella funzione php exec , shell_exec o system come comando restituirà il codice di uscita 02 se non si dispone delle autorizzazioni per scrivere il file nella posizione selezionata.

Nel mio caso comando:

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

Quando chiamato da php non ha funzionato. È stato risolto dopo aver aggiunto le autorizzazioni di scrittura appropriate alla cartella LOCATION.

Ho risolto il problema controllando ciò che è stato inviato come output quando si chiama il comando:

 myslqdump 

e dopo:

 mysqldump '-uUSER' '-pPASS' DATABASE 

In entrambi i casi il comando ha dato una risposta adeguata nel secondo argomento della funzione exec .

Un altro motivo potrebbe essere una password con caratteri troppo speciali, che è stata usata senza caratteri di escape sulla console (dato che si usa mysqldump ). Il processo restituisce anche il codice di errore 2. Ho questo problema di volta in volta. Avvolgere params almeno tra virgolette / virgolette aiuta spesso: Invece -u... -p... e così via, usando "-u..." "-p..." elimina molti problemi. Tuttavia non è una soluzione perfetta (se viene utilizzato lo stesso tipo di virgolette).

Può anche essere un problema dipendente dal sistema operativo. MS Windows ad esempio usa variabili, come %MYVAR% che sembra non essere in grado di fuggire (almeno alcune fonti come il documento PHP lo menziona).