我正在尝试编写bash脚本以从2GB的 mysql 数据库中获取转储。然后,我将删除该数据库,并使用mysql dump从bash脚本还原此数据库。我将从远程计算机启动此脚本。因此,我需要一种方法来确定转储恢复过程是否在远程计算机中完成以执行下一个命令。由于我在网上找不到任何东西,因此尝试查看生成的数据库大小是否等于所需的数据库大小。即使这样,我也无法做到,因为我使用以下脚本来获取数据库大小:
size=$(mysql -u root -ppass -D tpcw -e "SELECT sum(round(((data_length + index_length) / 1024 / 1024 / 1024), 2)) as 'Size in GB' FROM information_schema.TABLES WHERE table_schema = 'tpcw'")
以及当我尝试运行此脚本时:
size=$(mysql -u root -ppass -D tpcw -e "SELECT sum(round(((data_length + index_length) / 1024 / 1024 / 1024), 2)) as 'Size in GB' FROM information_schema.TABLES WHERE table_schema = 'tpcw'")
echo $size
if [ "$size" == "Size in GB 2.47" ] ; then
echo "match"
break
else
echo "does not match"
fi
它返回“不匹配”。这是因为查询重新调整的字符串显示为
以GB为单位的大小
2.47
当我使用以下命令打印时:
echo "$size"
但它的打印方式如下:
GB 2.47中的大小
当我使用以下命令打印时:
echo $size
我不知道怎么了。
答案 0 :(得分:1)
您可以在测试字符串中嵌入换行符:
if [ "$size" = "Size in GB"$'\n'"2.47" ] ; then
我不知道怎么了。
size
变量中包含换行符。当你做
echo "$size"
它被执行为:
echo $'Size in GB\n2.47'
打印出换行符,保留空格,并且echo仅有一个参数。
当您这样做:
echo $size
然后使用4个参数执行echo:
echo 'Size' 'in' 'GB' '2.47'
然后echo将它们打印成空格。参数拆分是在空格,换行符和制表符(对于默认IFS)上完成的。
如何使用转储文件检查数据库是否已成功还原?
还原数据库时只需检查mysql退出状态。
if ! mysql -u root -ppass <dump.file; then
echo "Och no, restoring the database failed!"
fi
或
mysql -u root -ppass <dump.file
ret=$?
if (($ret != 0)); then
echo "Och no, restoring the database failed with exit status $ret!"
fi