저는 최신 Linux Mint를 사용하고 있습니다. 데이터베이스 백업을 위한 특별한 cronjob을 생성할 수 있는지 알고 싶습니다.
내 /etc/cronjob
파일에는 다음 코드가 있습니다.
# Minute Hour Day of Month Month Day of Week Command
# (0-59) (0-23) (1-31) (1-12 or Jan-Dec) (0-6 or Sun-Sat)
30 4 * * 1-6 /home/users/backup.sh
내 것에는 /home/users/backup.sh
다음이 있습니다.
mysqldump -uroot -p MyDatabase > /home/users/backup_MyDB/full_myDB.sql
대신, 우리가 가지고 있는 날짜를 기반으로 날짜와 같은 것을 동적으로 추가하고 full_myDB.sql
싶습니다 .2014-04-04_full_myDB.sql
SQL 백업 파일이일주일 이상나는 cronjob이 할 수 있기를 바랍니다삭제자동으로.
답변1
GNU date
(Linux Mint의 기본값)를 사용하면 다음을 수행할 수 있습니다.
mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +%F)_full_myDB.sql
1주일이 지난 파일을 삭제하려면:
find /home/users/backup_MyDB -type f -mtime +7 -exec rm {} +
일반적으로 제거하기 전에 제거할 내용을 확인하는 것이 현명하지만(적어도 스크립트를 테스트할 때) 이렇게 하려면 다음을 수행하면 됩니다.
find /home/users/backup_MyDB -type f -mtime +7
답변2
위의 정보를 사용하여 백업 속도를 저하시키는 매우 큰 테이블 중 하나를 실제로 자르는 또 다른 소규모 업데이트를 제공하고 싶었습니다.
이것이 다른 사람들에게 도움이 되기를 바랍니다.
위의 정보를 사용하여 다음 내용으로 mysqlbackup.sh라는 기본 쉘 스크립트를 만들었습니다.
#!/bin/sh
find /data/var/backups/mysql/dumps -type f -mtime +3 -exec rm {} +
mysql -e "truncate table sitename_prod.cache_table"
mysqldump sitename_prod > /data/var/backups/mysql/dumps/$(date +%F)_full_sitename_prod.sql
다음을 실행하세요.chmod +x mysqlbackup.sh
나는 또한 이것을 crontab -e에 넣었습니다.
# MYSQL Dump and retention for 3 days
30 22 * * * bash /root/bin/mysqldump.sh > /dev/null 2>&1
답변3
오래되었다는 것을 알고 있지만 위의 답변을 사용하고 파일 압축 지침을 추가했습니다. 다른 사람들도 이것이 유용하다고 생각하기를 바랍니다.
1) 약간의 조사 끝에 7-zip이 최고의 압축기인 것 같습니다. Linux 배포판이 이를 지원하는 경우 적절한 설치 프로그램을 사용할 수 있습니다.
sudo apt-get install p7zip-full
또는 더 편안하다면 tar.gz를 사용할 수 있습니다.
/home/users/backup.sh
2) 그런 다음 다음과 같은 내용 으로 스크립트를 만듭니다 .
#!/bin/sh
find /home/users/backup_MyDB -type f -mtime +7 -exec rm {} +
mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +%F)_full_myDB.sql
7z a /home/users/backup_MyDB/$(date +%F)_full_myDB.7z /home/users/backup_MyDB/*.sql
rm -f /home/users/backup_MyDB/*.sql
스크립트는 7일보다 오래된 파일을 찾아서 삭제한 다음 SQL 덤프를 수행하고 디렉터리에 있는 모든 .sql 파일을 7-zip으로 압축한 다음 디렉터리에 있는 모든 .sql을 삭제합니다(필요한 경우 선택적으로 mysql을 추가합니다). 이전 답변에서 언급한 대로 덤프 전 명령)
chmod +x /home/users/backup.sh
3) 실행 가능하도록 만들었습니다 .
3.1) 스크립트가 예상대로 작동하는지 테스트해야 합니다.
4) 작업을 프로그래밍합니다.crontab -e
# Minute Hour Day of Month Month Day of Week Command
# (0-59) (0-23) (1-31) (1-12 or Jan-Dec) (0-6 or Sun-Sat)
30 4 * * 1-6 /home/users/backup.sh >> /dev/null 2>&1
그게 다야. 매일(일요일 제외) 오전 4시 30분에 MySQL 데이터베이스를 백업하고 백업을 압축합니다.
답변4
@Graeme의 답변에 추가하려면 cron 작업에서 '%' 문자를 이스케이프해야 할 수도 있으므로 다음과 같이 표시될 수 있다는 점에 주목할 가치가 있습니다.
mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +\%F)_full_myDB.sql