gpt4 book ai didi

mysql - Bash mysql错误处理锁定表

转载 作者:太空宇宙 更新时间:2023-11-04 12:41:59 25 4
gpt4 key购买 nike

我有一个 shell 脚本,它经常使用一些参数调用。它应该构建一个查询并执行该语句。如果发生错误,它应该将参数分开写入一个文件中,以便可以通过再次调用该脚本来进行错误处理。

一切正常但是

问题是,我捕获了连接被拒绝的错误等,但是如果由于表被锁定而无法执行该语句,我不想​​等待超时。

我的代码:

...
mysql -u ${username} -p${password} -h ${database} -P ${port} --connect-timeout=1 --skip-reconnect -e "$NQUERY"
mysqlstatus=$?
if [ $mysqlstatus -ne 0 ]; then
echo "[ERROR:QUERY COULD NOT BE EXECUTED:$mysqlstatus: QUERY WRITTEN TO LOG]" >> ${GENLOG}
#echo ${NQUERY} >> ${FQUER}
for i in "$@"; do
ARGS="$ARGS $i|"
done
echo "${ARGS}" >> ${ARGLOG}
else
echo "[OK] $NQUERY" >> ${GENLOG}
fi
...

但是当一个表被锁定时,执行不会被取消并且它会永远运行..

它不是我在 mysql 服务器上设置 Max_statement_time_set 或任何东西的解决方案,因为我不是唯一使用数据库的人

最佳答案

可以配合mysql使用timeout命令

timeout 3 mysql -u ...

这将等待 3 秒让 mysql 命令返回,如果命令运行时间超过 3 秒超时将返回退出状态 124 到 shell。如果你没有超时,你可以使用类似这样的作业控制。

#background the process
mysql -u ... &

#get pid of background process
bg_pid=$!

sleep 3

#check if your pid is still running
#using string matching incase pid was re assigned
if [[ $(ps -p $bg_pid -o args --no-headers) =~ "mysql" ]]
then
echo "running to long"
else
echo "OK"
fi

关于mysql - Bash mysql错误处理锁定表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39894458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com