在bash脚本中输出MySQL进程

时间:2013-11-12 20:08:31

标签: mysql bash import

在这里寻求bash专家的帮助。

我想要做的事情可能非常简单,但我在谷歌中找不到任何明确解释该怎么做的事情。脚本中还有很多其他内容,但这是我需要帮助的块:

 # import the extracted sql into mysql
   for sql_file in $(find -maxdepth 1 -type f -iname "*$1*.sql" | sort); do
       echo "Importing: $sql_file"

       if mysql -u [USER] -p[PASSWORD] -h [HOST] $db < $sql_file
       then
           echo "Database $sql_file imported successfully. $db has been updated"
       else
           echo "ERROR: Database importing $sql_file into $db"
       fi
   done

如果你不知道,我基本上是尝试将多个db.sql文件导入循环中的给定目标。我想要做的是添加mysql命令的输出以显示在此步骤可能生成的任何MySql错误。此输出将直接在此行之后:

echo "ERROR: Database importing $sql_file into $db"

如果导入在此步骤失败,我希望输出类似的内容,但不退出脚本:

 MySQL Import Failed: [Output what mysql would output to command line right here.]

这会通知执行导入的人,究竟出了什么问题,以便他们可以告诉开发人员他们遇到了什么。

我不知道这是否太模糊,但任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

如何生成单个日志和错误文件如下:

for sql_file in $(find -maxdepth 1 -type f -iname "*$1*.sql" | sort); do
    echo "Importing: $sql_file"

    log=$sql_file.log
    err=$sql_file.err
    if mysql -u [USER] -p[PASSWORD] -h [HOST] $db < $sql_file > $log 2> $err
    then
        echo "Database $sql_file imported successfully. $db has been updated"
    else
        echo "ERROR: Database importing $sql_file into $db"
        echo "<<<<<" 
        cat $err
        echo ">>>>>"
    fi
done

这样您就可以跟踪每个脚本的处理过程。对于您的原始问题,只需生成错误文件就足够了。如果需要,您甚至可以在cat后删除它。