繁体   English   中英

从bash中的mysql获取count val的最简单方法

[英]Easiest way to get count val from mysql in bash

也许我应该使用python或perl,但我什么都不知道。

我有4条语句,我想检查是否有超过一个小时的错误。 我的用户已安装,因此我不需要输入mysql用户/密码。 该语句在mysql_webapp_error_check.sh中

#!/bin/bash
mysql testdb -e "select count(*) from tbl where last_error_date < DATE_SUB(NOW(), INTERVAL 1  HOUR);"

我如何使它给我返回值(count(*))而不是打印到屏幕上?

然后,我将编写一个if语句,并输出到stdout / err,以供cron通过电子邮件发送给我(否则,我希望脚本保持沉默,因此除非有问题,否则不会发送任何电子邮件)

搜索相同的-s完全适合我。

#!/bin/bash
result=`mysql testdb -s -e "select count(*) from tbl where last_error_date < DATE_SUB(NOW(), INTERVAL 1  HOUR);"`
echo result = .$result.

PS .:在我的mysql Ver 14.14 Distrib 5.1.49中,还有一个--batch参数,该参数“写字段时不进行转换。与--batch一起使用”,因此此处有些不合时宜,但应在此处提及。

在bash中,您使用$()语法。

#!/bin/bash
ret=$(mysql testdb -e "select count(*) from tbl where last_error_date < DATE_SUB(NOW(), INTERVAL 1  HOUR);")
if [[ "$ret" > 0 ]];then
   echo "there is count"
else
   echo "no count"
fi

我通常这样做:

 var=`mysql -e "SELECT COUNT(*) FROM ...\G" | awk '/COUNT/{print $2}/'`
#!/bin/bash
echo show databases\; | mysql -u root | (while read x; do
  echo "$x"
  y="$x"
done
echo "$y"
)

就我而言,我只是使用grep -v从MySQL的返回中排除行打印count(*)

所以我得到这样的计数器:

db_name="NAME_DB";
db_user="USER_DB";
db_pwd="PWD_DB";
counter=`mysql -u${db_user} -p${db_pwd} ${db_name} -e "SELECT count(*) FROM my_table WHERE something = '1';" | grep -v "count"`;
echo "Count for request: $counter";

我以这种方式将它用于某些Wordpress东西,从wp-config.php文件读取数据库信息:

wp_db_infos="wp-config.php";
wp_db=`cat ${wp_db_infos} | grep "DB_NAME" | awk -F ', ' '{print $2}' | awk -F "'" '{print $2}'`;
wp_user=`cat ${wp_db_infos} | grep "DB_USER" | awk -F ', ' '{print $2}' | awk -F "'" '{print $2}'`;
wp_pwd=`cat ${wp_db_infos} | grep "DB_PASSWORD" | awk -F ', ' '{print $2}' | awk -F "'" '{print $2}'`;
img_to_update=`mysql -u${wp_user} -p${wp_pwd} ${wp_db} -e "SELECT count(*) FROM wp_offres WHERE maj_img = '1';" | grep -v "count"`;
local count=$(mysql -u root --disable-column-names --batch --execute "SELECT COUNT(*) FROM mysql.user WHERE user = '$DstDbName'")
    if [[ "$count" > 0 ]]
    then
    fi          

--batch-清除无边框的输出--disable-column-names-仅打印具有值的行

没有疯狂的AWK使用:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM