MySQL 데이터베이스를 실행하는 RHEL 서버가 있습니다. mysqldump
백업 파일을 생성하기 위해 실행되는 Bash 스크립트가 있습니다 . Bash에서 직접 스크립트를 실행할 때 생성되는 백업 파일의 크기는 754259바이트입니다. cron을 통해 동일한 스크립트를 실행하면 크기는 20바이트에 불과합니다.
내가 아는 한 cron은 스크립트를 수동으로 실행하기 위해 로그인할 때 사용하는 것과 동일한 사용자 컨텍스트에서 실행됩니다. 하지만 크기 차이를 고려하면 꼭 그렇지는 않은 것 같습니다.
동일한 스크립트를 실행할 때 파일 크기가 다른 이유는 무엇입니까?
쉘 스크립트 내용:
backup_path=/var/custom/db_backups
configFile=/var/custom/auth.cnf
db_name=[db_name]
date=$(date +"%d-%b-%Y")
sudo /opt/rh/mysql55/root/usr/bin/mysqldump --defaults-extra-file=$configFile $db_name | gzip -9 > $backup_path/$db_name-$date.sql.gz
크론 편집:
sudo crontab -e
크론 파일 내용:
12 21 * * * /var/custom/maint_plan
그러면 매일 밤 오후 9시 13분에 스크립트가 실행됩니다.
답변1
이 mysqldump
명령은 아무것도 반환하지 않으며 파이프로 연결되어 gzip
빈 gzip 파일로 끝납니다. 바라보다:
$ echo -n "" | gzip -9 > test.gz
$ stat -c %s test.gz
20
그러면 20바이트 크기의 파일이 생성됩니다. 그래서 문제는 mysqldump
명령에 있습니다. 루트의 crontab이므로 스크립트는 루트 권한으로 실행됩니다. sudo
필요 없음. 그것을 사용하려면 필요하지 않습니다 sudo
.
/opt/rh/mysql55/root/usr/bin/mysqldump --defaults-extra-file=$configFile $db_name | gzip -9 > $backup_path/$db_name-$date.sql.gz
답변2
cron을 통해 실행되는 스크립트는 실패합니다. 20바이트는 빈 MySQL 덤프의 크기입니다.
답변3
cron은 스크립트 실행을 위한 환경이 매우 제한되어 있습니다. 필요한 모든 프로그램을 찾지 못할 수도 있습니다. 좋은 덤프를 얻은 셸의 환경 변수를 캡처하여 cron 스크립트로 전송합니다.