我有一个mysql数据库列表,我希望使用linux脚本从以"_abc“结尾的数据库导出两个表。然而,我不断地得到错误“意外结束的文件”。
这是我的脚本,其中DB_FILE是一个文本文件,其中包含以"_abc“结尾的数据库名称。
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块中同时执行这两个查询?
发布于 2016-07-01 07:54:24
我认为您必须在它前面有没有空格的EOFMYSQL:不要只缩进那一个。
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++:
右缩进:

错误的缩进:

发布于 2016-07-01 06:48:12
$OUT_FILENAME不会在单引号中展开。
我想您可以将查询放在一个数组中,如下所示:
MYQUERY=( SELECT \* FROM table_abc INTO OUTFILE "$OUT_FILENAME" FIELDS TERMINATED BY \",\" LINES TERMINATED BY \"\\n\"\; )然后将mysql命令更改为:
mysql -u"$MYSQLUSER" -p"$MYSQLPASS" -h "$MYSQLHOST" -e "${MYQUERY[@]}" "$db_name"Sidenotes
\*,\"等等。https://stackoverflow.com/questions/38138268
复制相似问题