최신 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에서 자동으로 삭제 하고 싶습니다 .
답변
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
답변
위의 정보를 사용하여 백업 속도를 늦춘 실제로 큰 테이블 중 하나를 실제로 잘라내는 사소한 업데이트를 하나 더 제공하려고했습니다.
잘하면 이것은 다른 누군가를 돕습니다.
위의 정보를 사용하여 다음 내용으로 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
답변
나는 그것이 오래되었다는 것을 알고 있지만 위의 답변을 사용하고 파일 압축 명령을 추가했습니다. 다른 누군가가 이것을 유용하게 사용하기를 바랍니다.
1) 약간의 7-zip을 연구하는 것이 가장 좋은 압축기 인 것 같습니다. Linux 배포판에서 지원하는 경우 apt 설치 관리자를 사용할 수 있습니다.
sudo apt-get install p7zip-full
또는 tar.gz를 더 편안하게 사용할 수 있습니다.
2) 그런 다음 /home/users/backup.sh
내용 을 사용하여 스크립트를 만듭니다 .
#!/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을 삭제합니다 ( BTW, 필요한 경우 이전 답변에서 언급 한 것처럼 덤프 전에 mysql 명령을 선택적으로 추가 할 수 있습니다)
3) 우리는 chmod +x /home/users/backup.sh
그렇게 할 수 있도록 실행합니다.
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 데이터베이스를 백업하고 백업을 압축합니다.
답변
@Graeme의 답변에 추가하려면 cron 작업에서 ‘%’문자를 이스케이프 처리해야 할 수도 있으므로 다음과 같이 보일 수도 있습니다.
mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +\%F)_full_myDB.sql