접두사가 붙은 파일까지 자동 DB 백업을위한 cronjob


12

최신 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에서 자동으로 삭제 하고 싶습니다 .

답변:


15

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

나는 대답을 준비하고 있었지만 당신은 나를 이겼습니다 : P
Ramesh

2
@Ramesh, 변경을 위해 다른 사람을 이겼다 니 다행입니다. 일반적으로 게시하고 다른 사람이 이미 비슷한 답을 가지고 있습니다.
Graeme

아주 좋아요 사용을 위해 변경하는 유일한 것은 db 액세스 세부 정보를 .my.cnf 파일에 넣는 것입니다.
Johann Dyck

4

위의 정보를 사용하여 백업 속도를 늦춘 실제로 큰 테이블 중 하나를 실제로 잘라내는 사소한 업데이트를 하나 더 제공하려고했습니다.

잘하면 이것은 다른 누군가를 돕습니다.

위의 정보를 사용하여 다음 내용으로 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 배포판에서 지원하는 경우 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 데이터베이스를 백업하고 백업을 압축합니다.


1

@Graeme의 답변에 추가하려면 cron 작업에서 '%'문자를 이스케이프 처리해야 할 수도 있으므로 다음과 같이 보일 수도 있습니다.

 mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +\%F)_full_myDB.sql
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.