cronjob 执行 mysql 并被拒绝 root 访问

cronjob 执行 mysql 并被拒绝 root 访问

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 服务器交互的运行脚本也应该由非特权用户执行。

相关内容