cronjob正在执行mysql并且获取根访问被拒绝

cron作业文件:

 46 13 * * * root /home/tmp/test_mysql.sh

脚本:

 execute_query(){
    查询= “$ 1”
      res =`mysql --skip-column-names -e“$ query”`
    回声“$ res”
 }

 res =`execute_query“show databases”`
 echo $ res

错误我从cron作业成功执行脚本时得到:

错误1045(28000):访问拒绝用户'root'@'localhost'(使用密码:否)

我可以从命令行以root身份成功执行脚本,因为mysql的login证书保存在/root/.my.cnf中有什么问题? cronjob莫名其妙不读/root/.my.cnf?

您不应该依靠MySQL客户端来获取适当的MySQLconfiguration文件,因为客户端如何读取这些文件的级联性质 。 相反,您应该将my.cnftest_mysql.sh放在/home/tmp并在脚本中使用--defaults-extra-file [ link ]参数。

请注意,– --defaults-extra-file需要是你的mysql命令的第一个参数,否则它将不起作用。

 execute_query(){ query="$1" res=`mysql --defaults-extra-file=/home/tmp/my.cnf --skip-column-names -e "$query"` echo "$res" } res=`execute_query "show databases"` echo $res 

/root不是一个很好的地方(权限等),应该避免。

运行与MySQL服务器交互的脚本也应该使用非特权用户来执行。