cronjob이 mysql을 실행하고 루트 액세스가 거부되었습니다.

cronjob이 mysql을 실행하고 루트 액세스가 거부되었습니다.

크론 작업 파일:

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' 사용자에 대한 액세스가 거부되었습니다(비밀번호 사용: NO).

mysql의 로그인 자격 증명이 /root/.my.cnf에 저장되어 있으므로 명령줄에서 루트로 스크립트를 성공적으로 실행할 수 있습니다. 무엇이 잘못되었나요? cronjob이 어떻게든 /root/.my.cnf를 읽지 못합니까?

답변1

적절한 MySQL 구성 파일을 선택하기 위해 MySQL 클라이언트에 의존해서는 안 됩니다.계단식 자연클라이언트가 해당 파일을 읽는 방법에 대해 설명합니다. 대신에 my.cnftest_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 서버와 상호 작용하는 스크립트 실행은 권한이 없는 사용자로도 수행해야 합니다.

관련 정보