我有一个运行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
答案 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)