我需要根据 MySQL 数据库检查和自动修复的输出生成报告。
但不想每次都得到完整的报告:仅在需要修复的情况下
计划任务(cron)运行mysqlcheck,
我希望通过电子邮件获得最终需要修复、修复成功、修复失败的信息……
但每次都不想收到完整的报告:仅修复
我像这样运行 mysqlcheck:
mysqlcheck --user=myuser --password=mypwd -c --auto-repair dbname > ouput.log
在博客上发现,修复时 mysqlcheck 输出可能如下所示
Repairing tables
dbname.table1
warning : Number of rows changed from 3 to 1
status : OK
dbname.table2
warning : Number of rows changed from 5454 to 5455
status : OK
dbname.table3
warning : Number of rows changed from 471859 to 471860
status : OK
由于我找不到任何关于确切输出的官方文档,我需要帮助来构建一个通过处理 mysqlcheck 的输出生成的报告文本文件。
也许一些正则表达式魔术师可以制作一份报告,提供已修复表的名称、故障通知等。
这是指 Ubuntu 官方存储库中提供的 mysql 服务器
mysql-server 5.7.25-0ubuntu0.18.04.2
答案1
这个简单的脚本正在mysql检查结果并检查输出“修理桌子”。因为只有当表损坏时才会出现此字符串。
如果存在,那么它会向所需的地址发送电子邮件。
#!/bin/bash
result=`mysqlcheck --user=myuser --password=mypass --auto-repair dbname;`
if [[ $result == *"Repairing tables"* ]]; then
echo $result | mailx -s 'email subject' [email protected]
fi
答案2
--silent
模式
运行时mysqlcheck
传递参数-s
或--silent
和仅打印错误消息。
像这样修改您的命令:
mysqlcheck --user=myuser --password=mypwd -c --auto-repair --silent dbname
无需将输出重定向到工作文件并对其进行解析。您需要cron
设置才能发送电子邮件。摘自此问答:如何设置 Cron 发送电子邮件?
MAILTO="[email protected]"
* * * * * mysqlcheck --user=myuser --password=mypwd -c --auto-repair --silent dbname
答案3
我认为最好的办法是这样设置:
- 在
crontab -e
计划中执行 bashscript,例如:
- * * * * /bin/bash /root/custom-mysqlrepair.sh
- 使用类似下面的方法创建这样的脚本:
#!/bin/bash
#hint: adding user and password to .my.cnf should remove the need for user and password in this command
OUTPUT=$((mysqlcheck --user=myuser --password=mypwd -c --auto-repair dbname) 2>&1)
OUTPUT_NO_NEWLINES=`$OUTPUT | tr '\n'`
if [[ $string == *"Number of rows changed from"* ]]; then
echo $OUTPUT
fi
- 使脚本可执行并将其放在 /root/
现在会发生什么:
- cron运行脚本
- 脚本尝试运行你的命令并将输出保存到变量
- 如果变量包含你想要的单词,则打印整个输出
- crontab 应该捕获输出到 MAILTO 输出中并正常发送电子邮件
请注意,这仍然是未经检验的理论,但应该可以让你开始。