2015-04-15 57 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

你把所有這些命令到一個shell腳本?您應該將部分從'SELECT'移動到'exit'到一個單獨的文本文件中,然後像這樣啓動mysql:mysql --user = me --password = 00045344534 john_e56 pelya

+0

我嘗試了一個單獨的文件,但是錯誤1064(42000)在第4行:您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以在第一行使用'INTO OUTFILE'/home/john/mysqlchanges.txt' exit'使用正確的語法。 – John

+0

刪除';'在WHERE結尾,它會終止您的SQL命令和'INTO OUTFILE'變成單獨的無效命令 – pelya

回答

0

你得到了什麼錯誤?

我不確定INTO OUTFILE是如何工作的,但99%它需要寫入文件來告訴它寫入。在你的查詢中,輸出文件在根(/)分區中是正確的。我懷疑用戶mysql是否允許在那裏寫入。如果您使用的是* nix框,請在您的shell中創建文件

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

首先在您的shell中。然後進行測試,你可以做

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

,如果是沒有錯誤的原理,你可以修改你的查詢輸出到這個文件,Mutt將獲得該文件作爲附件:

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連接ID爲510644 服務器版本:5.5.42-cll MySQL社區服務器(GPL) 鍵入'help;'或'\ h'尋求幫助。輸入'\ c'清除當前的輸入語句。 的mysql> – John

+0

我想你說什麼,但我只是得到錯誤的mysql>退出 再見 /bin/1mysqlmod.sh:第2行:SELECT:找不到命令 /bin/1mysqlmod.sh:線路3:從:命令未找到 /bin/1mysqlmod.sh:第4行:語法錯誤附近的意外標記'(' /bin/1mysqlmod.sh:第4行:'WHERE update_time>(NOW() - INTERVAL 5 MINUTE);' – John

+0

請參閱更新我的答案部分 – Alexey

相關問題