cron 作业文件:
46 13 * * * 根 /home/tmp/test_mysql.sh
脚本:
执行查询(){ 查询=“$1” res =`mysql --skip-column-names -e“$query”` 回显“$res” } res=`execute_query“显示数据库”` 回显$res
当 cron 作业成功执行脚本时出现的错误:
错误 1045(28000):拒绝用户“root”@“localhost”访问(使用密码:否)
我可以以 root 身份从命令行成功执行脚本,因为 mysql 的登录凭据保存在 /root/.my.cnf 中,出了什么问题?cronjob 是否以某种方式未读取 /root/.my.cnf?
答案1
你不应该依赖 MySQL 客户端来获取适当的 MySQL 配置文件,因为层叠的性质客户端如何读取这些文件。相反,你应该将my.cnf
和放在test_mysql.sh
里面/home/tmp
,并使用--defaults-extra-file
[关联]参数。
请注意,--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 服务器交互的运行脚本也应该由非特权用户执行。