Я знаю, что exit code = 0 означает No error.
Я получил exit code = 2. Что это значит?
Где я могу увидеть полный список кодов выхода mysqldump?
Я знаю, что exit code = 0 означает No error.
Я получил exit code = 2. Что это значит?
Где я могу увидеть полный список кодов выхода mysqldump?
Должно быть что-то в этом роде:
http://dev.mysql.com/doc/refman/5.5/en/error-types.html
'00' indicates success.  
'01' indicates a warning.
'02' indicates "not found." 
		Взято из client/mysqldump.c в 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
Сбой через источник, EX_MYSQLERR, по-видимому, используется в основном для ошибок с сервера, но также и в случае сбоя malloc. Кажется, что CONSCHECK поддерживает проверку целостности. EX_EOM возвращается для некоторых вызовов _alloc тоже - "Конец памяти"?
Код выхода 2 часто возникает, когда дамп не может быть завершен из-за проблем с привилегиями; например, если пользователь не имеет привилегии LOCK TABLES, или пароль, предоставленный вами, был неправильным.
Стоит отметить, что если вы используете mysqldump в php-функции exec, shell_exec или system как команду, он вернет код выхода 02, если у вас нет прав на запись файла в выбранное место.
В моем случае команда:
mysqldump '-uUSER' '-pPASS' DATABASE > /home/USER/LOCATION/dump.sql
При вызове php не работает. Он был решен после добавления правильных разрешений на запись в папку LOCATION.
Я решил это, проверив, что было отправлено как результат при вызове команды:
myslqdump
и после него:
mysqldump '-uUSER' '-pPASS' DATABASE
В обоих случаях команда дала правильный ответ во втором аргументе функции exec.
Другой причиной может быть пароль со слишком особыми символами, который использовался на консоли без использования (поскольку вы используете mysqldump). Процесс также возвращает код ошибки 2. У меня есть эта проблема время от времени. Параметр обертки, по крайней мере, в кавычках/двойных кавычках помогает часто: вместо -u... -p... и т.д. Использование "-u..." "-p..." устраняет многие проблемы. Однако это не идеальное решение (если используется тот же тип кавычек).
Он также может быть проблемой, зависящей от ОС. Например, в MS Windows используются переменные, например %MYVAR%, которые, похоже, вообще не могут быть экранированы (по крайней мере некоторые источники, такие как PHP document упоминает это).