16

我知道那exit code = 0意味着No error

我得到了exit code = 2。这是什么意思 ?

在哪里可以看到mysqldump退出代码的完整列表?

4

4 回答 4

41

取自 MySQL 5.1.59 中的 client/mysqldump.c:

#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 似乎代表一致性检查。某些 _alloc 调用也会返回 EX_EOM - “内存结束”?

于 2011-09-21T07:13:16.527 回答
14

由于权限问题无法完成转储时,经常出现退出代码2;例如,如果用户没有LOCK TABLES权限,或者提供的密码错误。

于 2012-10-17T10:28:54.293 回答
4

值得注意的是,如果您mysqldump在 php 函数中使用execshell_exec或者system作为命令,如果您没有将文件写入所选位置的权限,它将返回 02 退出代码。

在我的情况下命令:

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

从 php 调用时不起作用。在向 LOCATION 文件夹添加适当的写入权限后解决了该问题。

我通过检查调用命令时作为输出发送的内容来解决它:

myslqdump

之后:

mysqldump '-uUSER' '-pPASS' DATABASE

在这两种情况下,命令都在函数的第二个参数中给出了正确的响应exec

于 2017-03-01T11:56:02.057 回答
2

另一个原因可能是密码太特殊,在控制台上未转义使用(因为您使用mysqldump)。该过程也返回错误代码 2。我不时有这个问题。至少在引号/双引号中包装参数通常会有所帮助:相反-u... -p...,等等,使用"-u..." "-p..."消除了许多问题。然而,这不是一个完美的解决方案(如果使用相同类型的引号)。

它也可能是依赖于操作系统的问题。例如,MS Windows 使用变量,%MYVAR%似乎根本无法转义(至少像PHP 文档这样的一些来源提到了这一点)。

于 2017-02-28T05:27:16.500 回答