MySQL - 이전 백업을 덮어쓰지 않고 백업 [닫기]

MySQL - 이전 백업을 덮어쓰지 않고 백업 [닫기]

이전 백업을 덮어쓰지 않고 어떻게 이 백업을 만들 수 있나요? 이것은 내가 만든 crontab입니다.

* 2 * * *  /opt/bitnami/mysql/bin/mysqldump -u root -password--databases BDname>~/Backup/DBname

답변1

날짜가 표시된 덤프 파일을 간단히 작성할 수 있습니다.

* 2 * * *  /opt/bitnami/mysql/bin/mysqldump -u root -password--databases BDname >"$HOME/Backup/DBname_$(date +\%F).sql"

date +%F날짜가 양식에 생성됩니다 YYYY-MM-DD. 백슬래시는 %crontab 항목에서 %특별한 의미를 갖기 때문에 이스케이프 처리 해야 합니다 .

생성된 덤프 파일 이름오늘할 것이다 DBname_2017-10-06.sql.

dump 명령을 자체 스크립트에 넣고 예약하면 보다 관리하기 쉬운 작업을 얻을 수 있습니다. 이 crontab 항목은 어떤 일이 발생할 때의 경계 사례입니다.약간크론 작업에는 너무 "간단하지 않습니다".

나는 대화형 쉘을 제외한 모든 곳에서 홈 디렉토리 대신 이것을 사용하는 경향이 있습니다 $HOME. 주로 이것이 변수로 작동하지 않고 스크립트나 여기에서와 같이 crontab에서 더 설명적이기 때문입니다. 예시 보기~~$HOME큰따옴표 안에서 물결표(~)가 확장되지 않는 이유는 무엇입니까?


이전 데이터베이스 백업도 정리해야 하는 경우 다음 질문에 대한 답변을 참조하세요.X일이 지난 파일 삭제

이 작업은 별도의 cron 작업으로 수행할 수도 있고, 두 작업(백업 + 정리)을 하나의 스크립트로 결합하고 해당 스크립트를 예약할 수도 있습니다(제가 하는 작업).

답변2

데이터베이스 백업과 관련된 모든 단계를 관리하는 스크립트를 작성하면 백업 이름에 데이터 타임스탬프를 적용할 수 있고, 오래된 백업을 삭제하여 공간 사용량을 최소로 유지하고 로그 활동을 수행할 수 있습니다. 당신이 해야 할 일은 백업 스크립트를 호출하는 것뿐입니다. 그렇지 않으면 실행하려는 각 명령에 대해 crontap에 다른 줄을 입력해야 할 수도 있습니다. 보다 효율적인 접근 방식은 간단한 스크립트를 사용하는 것입니다.

[thebtm@server Backup] cat db_backup.sh
#!/bin/bash                                                                                                                                                                                                                                                                                                                                                                                                                                                      
BASE="~/Backup";                                                                                                                                                                                                                         
YESTERDAY=`TZ=$ENV{'TZ'}+30 date '+%Y%m%d'`                                                                                                                                                                                                  
echo "****************"                                                                                                                                                                                                                      
date                                                                                                                                                                                                                                         
echo Backing up Database
#find $BASE/DB/ -mtime +30 -type f -delete
/usr/bin/mysqldump -u root --password=password --routines dbname | bzip2 --best -c > $BASE/DB/dbname.$YESTERDAY.bz2
echo Done
date

그런 다음 스크립트를 실행하도록 crontab을 설정하십시오.

# MySQL database backups for <dbname>
15 1 * * * ~/Backup/db_backup.sh >> ~/Backup/logs/db_backup.log 2>&1

관련 정보