在shell脚本中捕获mysql输出

时间:2011-04-02 17:01:00

标签: shell

我是shell脚本新手。我正在尝试编写一个shell脚本,我可以在从该文件读取后运行mysql命令。我必须在单独的文件中捕获sql命令的输出。以下是代码:

mysql -h ${DB_SERVER} -P ${DB_PORT} -u ${USER} -p${PASS} -f < createUsers.sql >> install.log

Shell脚本从用户那里获取一些输入。 当我运行shell脚本并且如果我指定了错误的密码时,错误会显示在控制台上但不会出现在日志文件中。

请建议我如何将错误重定向到日志文件。

3 个答案:

答案 0 :(得分:7)

在末尾添加2>&1以捕获stderr。标准输出是文件描述符1,标准错误是2,因此这会将stderr重定向到stdout 1的去向,即install.log。

mysql [options] < createUsers.sql >> install.log 2>&1

注意:重定向的顺序很重要。确保在 >>之后将其放在之前。

答案 1 :(得分:0)

在批处理文件中运行MySQL命令时,我无法使用:%logfile% 2>&1命令,因为它会记录 MySQL所做的所有,我最终得到了日志文件与我的备份文件大小相同(接近500mb)。不太有用。

相反,我使用了2>> %logfile%,它只会将错误记录到我的日志文件中。

set tempFile1=dropAndCreate.txt
echo DROP DATABASE IF EXISTS %testDatabase%; > %tempFile1%
echo CREATE DATABASE IF NOT EXISTS %testDatabase%; >> %tempFile1%
mysqldump -e -u %user% -p%pwd% %productionDatabase% > %backupFile% 2>> %logFile%
mysql -u %user% -p%pwd% < %tempFile1% 2>> %logFile%
mysqldump -u %user% -p%pwd% %productionDatabase% | mysql -u %user% -p%pwd% %testDatabase% 2>> %logFile%

答案 2 :(得分:-1)

 #!/bin/sh

./mysql -u<user_name> -p<password>  database_name  < db.sql  > output.txt

**#db.sql contains all mysql queries(input file),output is redirected to output.txt.
# # replace user name and password fields with appropriate name and password
# # this works provided your working directory and mysql directory are same otherwise provide required directories to    input #file and output file
# # otherwise it throws an error "no file or directory"
# #whatever db.sql output is ,it will be in output.txt**