2015-05-04 44 views
1

我有它运行一个MySQL查询脚本,是这样的:壳MySQL查询结果保存到一个文件

#!/bin/sh 

user="root" 
pwd="test" 
database="mydb" 
command="long... 
     long... query in 
     multiple lines" 

mysql -u $user -p$pwd << EOF 
use $database; 
$command 
EOF 

这个查询做了备份,从表到另一个。是否可以将查询结果保存在文件中而不使用mysql INTO OUTFILE?我只想知道查询失败或成功。

如果成功像1 row(s) affected或者如果它失败Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ...

更新

解决方案1:()作为命令的链条,所以包装他们在一个变量获得这些命令的结果。然后只需将该变量的结果输出到文件中。

output=$(mysql -u $user -p$pwd << EOF 
use $database; 
$command 
EOF 
) 
echo "$output" >> /events/mysql.log 

解决方案2:使用三通作为系统命令来发送命令到一个文件的结果,但是这需要从crontab中完成的,这样的:

*/1 * * * * root sh /events/mysql.sh |tee -a /events/mysql.log 

http://forums.mysql.com/read.php?10,391070,391983#msg-391983

我的工作液:

user="root" 
pwd="root12345" 
database="mydb" 
command="long ...long query" 

mysql -u $user -p$pwd <<EOF>> /events/mysql.log 2>&1 
use $database; 
$command; 
EOF 
+0

使用如果输出中存在'affected',则匹配正则表达式。 –

+0

该消息不仅仅是'mysql'命令的标准输出吗?使用'done> output.log'不适用于这个吗? –

+0

@EtanReisner是的,它是来自mysql命令的stantard输出。如何在这种情况下使用完成? – Alpha2k

回答

2

这应该工作:

output=$(mysql -u $user -p$pwd << EOF 
use $database; 
$command 
EOF 
) 
echo "$output" >> outfile 
+0

哦,是的,作品也是:D – Alpha2k

0

使用MySQL tee命令发送输出更容易。

为了得到记录过程开始,只需要使用tee命令,

三通/tmp/my.out;

#!/bin/sh 

user="root" 
pwd="test" 
database="mydb" 
$pathToFile = "/tmp/my.out" 
command="long... 
     long... query in 
     multiple lines" 

mysql -u $user -p$pwd << EOF 
tee $pathToFile 
use $database; 
$command 
EOF 

编辑 由于三通据报道,内部没有脚本的工作,你也可以运行该脚本时,直接用T恤日志输出。

mysql_bash.sh > >(tee -a script.log) 
+0

TEE不工作,文件中没有输出 – Alpha2k

1

处理错误消息的正确方法是通过标准错误。使用2>&1来捕获错误。

因此,添加到您的脚本的末尾:

>> install.log 2>&1

1

你也可以做这样的:

#!/bin/sh 

    user="root" 
    pwd="test" 
    database="mydb" 
    command="long... 
    long... query in 
    multiple lines" 
    mysql -u$user -p$pwd -D$database -e "$command" > file 
相关问题