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, также следует выполнять от имени непривилегированного пользователя.

Связанный контент