Я знаю, что 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 упоминает это).