2015-04-15 2 views
0

Я хочу отправить сообщение по команде MySQL, я написал следующий скрипт, но он не работает, где я ошибаюсь?как отправить вывод команды mysql

mysql --user=me --password=00045344534 john_e56 
SELECT table_schema,table_name,update_time 
FROM information_schema.tables 
WHERE update_time > (NOW() - INTERVAL 5 MINUTE); 
INTO OUTFILE '/mysqlchanges.txt' 
exit 
mutt -s "mysql changes" [email protected] -a /mysqlchanges.txt < /mail.txt 
+0

ли вы положили все эти команды в один скрипт? Вы должны переместить часть из «SELECT» в «exit» в отдельный текстовый файл и запустить mysql следующим образом: mysql --user = me --password = 00045344534 john_e56 <отдельный файл.txt – pelya

+0

Я пробовал отдельный файл, но ERROR 1064 (42000) в строке 4: У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «INTO OUTFILE» /home/john/mysqlchanges.txt « exit» в строке 1 – John

+0

Удалите ';' в конце WHERE, он завершает вашу Команда SQL и 'INTO OUTFILE' становятся отдельной недопустимой командой – pelya

ответ

0

Какая ошибка вы получаете?

Я не уверен, как работает INTO OUTFILE, но на 99% ему нужен доступ на запись к файлу, который вы говорите, чтобы писать. В вашем запросе выходной файл находится в корневом (/) разделе. Я сомневаюсь, что пользователь mysql запускается из позволяет писать там. Если вы находитесь в поле * nix, создайте файл в своем доме

touch /home/ubuntu/mysqlchanges.txt 
sudo chown mysql:mysql /home/ubuntu/mysqlchanges.txt 

в вашей оболочке сначала. Тогда для проверки вы можете сделать

su mysql 
echo "" > /home/ubuntu/mysqlchanges.txt 

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

mysql --user=me --password=00045344534 john_e56 
SELECT table_schema,table_name,update_time 
FROM information_schema.tables 
WHERE update_time > (NOW() - INTERVAL 5 MINUTE); 
INTO OUTFILE '/home/ubuntu/mysqlchanges.txt' 
exit 
mutt -s "mysql changes" [email protected] -a /home/ubuntu/mysqlchanges.txt < /mail.txt 

Предполагая, что ubuntu является ваш пользователь и mysql работает от имени пользователя mysql.

UPDATE

Если я понял ваш запрос правильно, вам просто нужно получить на выходе этого SQL запроса:

SELECT table_schema,table_name,update_time 
FROM information_schema.tables 
WHERE update_time > (NOW() - INTERVAL 5 MINUTE); 

на ваш почтовый ящик [email protected]

Если это не так важно сделайте это как прикрепление и просто текст в теле в порядке, затем посмотрите на эту команду bash:

mysql -u me -p00045344534 -e 'SELECT table_schema,table_name,update_time FROM information_schema.tables WHERE update_time > (NOW() - INTERVAL 5 MINUTE);' | mutt -s "mysql changes" [email protected] -- 

первым он запускает этот запрос с выходом на STDOUT, затем трубы к mutt

+0

root @ john [/ home/john] # 1mysqlmod.sh Чтение информации о таблице для заполнения таблицы и столбца имена Вы можете отключить эту функцию, чтобы получить быстрый запуск с помощью -A Добро пожаловать на монитор MySQL. Команды заканчиваются; или \ g. Ваш идентификатор соединения с MySQL - 510644 Версия сервера: 5.5.42-cll Сервер сообщества MySQL (GPL) Тип 'help;' или '\ h' для получения справки. Введите '\ c', чтобы очистить текущую инструкцию ввода. MySQL> – John

+0

Я попробовал то, что вы сказали, но я просто получить MySQL ошибка> Выход Bye /bin/1mysqlmod.sh: Строка 2: SELECT: команда не найдена /bin/1mysqlmod.sh: Строка 3: FROM: команды не найден /bin/1mysqlmod.sh: строка 4: синтаксическая ошибка около неожиданного токена '(' /bin/1mysqlmod.sh: строка 4:' WHERE update_time> (NOW() - INTERVAL 5 MINUTE);' – John

+0

см. обновление раздел моего ответа – Alexey

 Смежные вопросы

  • Нет связанных вопросов^_^