mysqldump 是否返回状态?

mysqldump 是否返回状态?

我正在创建一个使用 mysqldump 实用程序备份 mysql db 的脚本。我正在 shell“sh”中编写此脚本。我想在脚本中捕获 mysqldump 的输出状态(即 mysqldump 命令是否失败或成功),以便我可以报告脚本是否成功。

  • mysqldump 是否返回输出状态?

  • 有人可以告诉我如何做到这一点吗?

答案1

mysqldump 返回

0 for Success
1 for Warning
2 for Not Found

它还会将扩展的错误消息打印到 stderr,例如

mysqldump: Got error: 1049: Unknown database 'dbname' when selecting the database

您可以像这样检查返回的值

mysqldump -u DBuser -pDBpassword database >database.sql 2>database.err 
if [ "$?" -eq 0 ]
then
    echo "Success"
else
    echo "Mysqldump encountered a problem look in database.err for information"
fi

答案2

转储完成后,检查 $? shell 变量。如果它是 0 - 一切正常。否则 - 错误。

# mysqldump -u aaa -d msf>/dev/null
mysqldump: Got error: 1045: Access denied for user 'aaa'@'localhost' (using password: YES) when trying to connect
# echo $?
2

答案3

警告阅读该问题的人:有时 mysqldump 即使出现错误也会给出退出代码 0。

例如,这就是我今天看到的:

I have no name!@backup-mysql-manual-20hvd-pp6m2:/$     mysqldump       --host="${MYSQL_HOST}"       --port="${MYSQL_PORT}"       --user="${MYSQL_USER}"       --password="${MYSQL_PASSWORD}"       --all-databases > /tmp/a.sql 
mysqldump: Error: 'Access denied; you need (at least one of) the PROCESS privilege(s) for this operation' when trying to dump tablespaces
I have no name!@backup-mysql-manual-20hvd-pp6m2:/$ echo $?
0

相关内容