shell将MySQL查询结果保存到文件

时间:2015-05-04 12:42:51

标签: linux shell

我有一个运行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:使用tee作为系统命令将命令结果发送到文件中,但这需要从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

4 个答案:

答案 0 :(得分:2)

这应该有效:

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

答案 1 :(得分:1)

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

所以,将它添加到脚本的末尾:

>> install.log 2>&1

答案 2 :(得分: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

答案 3 :(得分:0)

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

要启动日志记录过程,只需使用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

修改 据报道,虽然tee在脚本内部不起作用,但您也可以在运行脚本时直接使用Tee记录输出。

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