archivo de trabajo cron:
46 13 * * * raíz /home/tmp/test_mysql.sh
guion:
ejecutar la solicitud(){ consulta="$1" res=`mysql --skip-column-names -e "$consulta"` eco "$res" } res=`execute_query "mostrar bases de datos"` eco $res
Error que obtuve cuando el trabajo cron ejecuta el script correctamente:
ERROR 1045 (28000): Acceso denegado para el usuario 'root'@'localhost' (usando contraseña: NO)
Puedo ejecutar el script exitosamente desde la línea de comando como root porque las credenciales de inicio de sesión para mysql están guardadas en /root/.my.cnf. ¿Qué pasa? ¿cronjob de alguna manera no lee /root/.my.cnf?
Respuesta1
No debe confiar en el cliente MySQL para seleccionar el archivo de configuración MySQL apropiado debido a lanaturaleza en cascadade cómo el cliente está leyendo esos archivos. En su lugar, deberías poner tanto tu my.cnf
como test_mysql.sh
dentro /home/tmp
y usar --defaults-extra-file
[enlace] parámetro en su secuencia de comandos.
Tome nota, las --defaults-extra-file
necesidades deben ser lasprimeroargumento de su comando mysql, de lo contrario no 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
no es un muy buen lugar para colocar cosas (permisos, etc.) y debe evitarse.
La ejecución de scripts que interactúan con un servidor MySQL también debe realizarse con un usuario sin privilegios.