크론 작업 파일:
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.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 서버와 상호 작용하는 스크립트 실행은 권한이 없는 사용자로도 수행해야 합니다.