如何通过电子邮件发送mysql命令的输出

时间:2015-04-15 16:37:32

标签: mysql mutt

我想通过电子邮件发送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" me123@mail.com -a /mysqlchanges.txt < /mail.txt

1 个答案:

答案 0 :(得分:0)

你得到什么错误?

我不确定INTO OUTFILE是如何工作的,但是99%它需要对您要写入的文件进行写访问。在您的查询中,输出文件位于根(/)分区中。我怀疑用户mysql是从允许写入那里运行的。如果你在* nix框中,请在家中创建一个文件

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" me123@mail.com -a /home/ubuntu/mysqlchanges.txt < /mail.txt

假设ubuntu是您的用户,而mysql代表mysql用户运行。

<强>更新

如果我理解您的请求是正确的,您只需要接收此SQL查询的输出:

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

到您的邮箱me123@mail.com

如果将它作为附件并不是至关重要的,只需要正文中的纯文本就可以了,那么请看一下这个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" me123@mail.com --

首先启动该查询并输出到STDOUT,然后将其传递给mutt