我正在创建一个使用 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