这个bash脚本试图用mysql做什么?

bvhaajcl  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(313)

写followbash脚本的人已经离开了,我需要弄清楚他写的followbash脚本的含义。在运行一些需要运行mysql示例的测试用例之前,这个脚本在docker容器中执行。
我想这是关于启动一个mysql服务器的,但是我不太清楚这个脚本中每个语句的确切含义。

echo -n "Loading [+"
( echo "SHOW TABLES;" | mysql mysql 2>/dev/null 1>/dev/null ) || \
    run-mysqld 2>/dev/null 1>/dev/null &

while ! ( echo "SHOW TABLES;" | mysql mysql 2>/dev/null 1>/dev/null ) ; 
do
    echo -n +
    sleep 1
done
echo "] Done."

我必须弄清楚这一点,因为我们的bitbucket管道最近在运行这个脚本时遇到了阻塞和超时(以前还可以)。提前谢谢。

ckx4rj1h

ckx4rj1h1#

此序列尝试运行 SHOW TABLES 通过mysql,忽略任何输出。如果mysql失败(因为mysqld没有运行),它会启动mysqld在后台运行。

( echo "SHOW TABLES;" | mysql mysql 2>/dev/null 1>/dev/null ) || \
    run-mysqld 2>/dev/null 1>/dev/null &

代码的第二部分只是等待mysqld启动,这由以下代码发出退出0的信号:

( echo "SHOW TABLES;" | mysql mysql 2>/dev/null 1>/dev/null )

如果mysqld没有一次尝试,代码的第二部分将永远运行。看起来就是这样。
最简单的方法就是限制我们的睡眠时间:

max_sleep=15
sleep=0
while ! ( echo "SHOW TABLES;" | mysql mysql 2>/dev/null 1>/dev/null ) ; 
do
    echo -n +
    sleep 1
    ((sleep++ > max_sleep)) && { echo "Failed to start mysqld] Error."; exit 1; }
done
echo "] Done."
exit 0

相关问题