arquivo de tarefa cron:
46 13 * * * raiz /home/tmp/test_mysql.sh
roteiro:
execute_query(){ consulta="$1" res=`mysql --skip-column-names -e "$query"` eco "$ res" } res=`execute_query "mostrar bancos de dados"` ecoar $res
erro que recebi quando o cron job executa o script com sucesso:
ERRO 1045 (28000): Acesso negado ao usuário 'root'@'localhost' (usando senha: NO)
Posso executar o script com sucesso na linha de comando como root porque as credenciais de login do mysql estão salvas em /root/.my.cnf, o que há de errado? o cronjob de alguma forma não está lendo /root/.my.cnf?
Responder1
Você não deve confiar no cliente MySQL para obter o arquivo de configuração MySQL apropriado por causa donatureza em cascatade como o cliente está lendo esses arquivos. Em vez disso, você deve colocar seu my.cnf
e test_mysql.sh
dentro /home/tmp
e usar --defaults-extra-file
[link] parâmetro em seu script.
Tome nota, as --defaults-extra-file
necessidades devem ser asprimeiroargumento do seu comando mysql, caso contrário não funcionará.
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
não é um lugar muito bom para colocar coisas (permissões, etc.) e deve ser evitado.
A execução de scripts que interagem com um servidor MySQL também deve ser realizada com um usuário não privilegiado.