首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在while循环中运行mysql命令

问在while循环中运行mysql命令
EN

Stack Overflow用户
提问于 2016-07-01 06:13:58
回答 2查看 1.7K关注 0票数 2

我有一个mysql数据库列表,我希望使用linux脚本从以"_abc“结尾的数据库导出两个表。然而,我不断地得到错误“意外结束的文件”。

这是我的脚本,其中DB_FILE是一个文本文件,其中包含以"_abc“结尾的数据库名称。

代码语言:javascript
复制
while read db_name;
do
    OUT_FILENAME="${db_name}_table.csv"
    mysql -u$MYSQLUSER -p$MYSQLPASS -h $MYSQLHOST $db_name << EOFMYSQL
    SELECT * FROM table_abc INTO OUTFILE '$OUT_FILENAME' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
    EOFMYSQL
done < $DB_FILE

rm -f $DB_FILE

如果我删除了3行MYSQL,那么脚本就不会出错。

另一个问题是,如果我有两个SELECT查询,我是否必须单独运行每个查询,即每个查询都包含在EOFMYSQL语句中,还是可以在一个EOFMYSQL块中同时执行这两个查询?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-01 07:54:24

我认为您必须在它前面有没有空格的EOFMYSQL:不要只缩进那一个。

代码语言:javascript
复制
while read db_name;
do
    OUT_FILENAME="${db_name}_table.csv"
    mysql -u$MYSQLUSER -p$MYSQLPASS -h $MYSQLHOST $db_name << EOFMYSQL
    SELECT * FROM table_abc INTO OUTFILE '$OUT_FILENAME' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
EOFMYSQL
done < $DB_FILE

rm -f $DB_FILE

在一些适当的文本编辑器中,它会很容易地显示出来,这里是notepad++:

右缩进:

​

​

错误的缩进:

​

​

票数 2
EN

Stack Overflow用户

发布于 2016-07-01 06:48:12

$OUT_FILENAME不会在单引号中展开。

我想您可以将查询放在一个数组中,如下所示:

代码语言:javascript
复制
MYQUERY=( SELECT \* FROM table_abc INTO OUTFILE "$OUT_FILENAME" FIELDS TERMINATED BY \",\" LINES TERMINATED BY \"\\n\"\; )

然后将mysql命令更改为:

代码语言:javascript
复制
mysql -u"$MYSQLUSER" -p"$MYSQLPASS" -h "$MYSQLHOST" -e "${MYQUERY[@]}" "$db_name"

Sidenotes

  1. 为了避免分词,我引用了所有的变量。
  2. 注意,我们希望在这里重新创建实际的查询。所以你需要转义那些在这里有特殊意义的字符,比如\*,\"等等。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38138268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档