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.cnf和test_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服务器交互的脚本也应该使用非特权用户来执行。