2015-05-04 5 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 ...

Update

Решение 1:() действуют как цепи команд, так что упаковка их в переменной получает результат этих команд , Затем просто выведите результат этой переменной в файл.

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

Решение 2: использование тройник в качестве системной команды, чтобы отправить результат команды в файл, но это должно быть сделано из кронтаба, как это:

*/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. Как это сделать в этом случае? – Alpha2k

ответ

2

Это должно работать:

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

О, да, тоже работает: D – Alpha2k

0

Проще использовать команду MySQL 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 

EDIT Поскольку тройник, как сообщается, не работает внутри скрипта, вы можете также войти вывод с помощью тройника непосредственно при запуске скрипта.

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

TEE не работает, ничего не выводит в файл – Alpha2k

1

Правильный способ обработки ошибок-сообщений к сквозному STDERR. Используйте 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 
Смежные вопросы