mysqldump 백업
- 어느곳이든 상관없지만
- 기본 /backup 폴더의 경로에 지정하기로 함.
1. db_account.txt 준비
- host user password dbName customDir port 순서로 입력
ex)
localhost pdsql [password] myProject1 myproject1 3306
localhost pdsql [password] myProject2 myproject2 3306
2. backup.sh 준비
#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
path="/backup"
dumpDir="$path/dump"
mkdir -p "$dumpDir"
now=$(date '+%Y%m%d')
while IFS= read -r line || [ -n "$line" ]; do
[ -z "$line" ] && continue
subArr=($line)
host="${subArr[0]}"
user="${subArr[1]}"
pass="${subArr[2]}"
db="${subArr[3]}"
outDir="${subArr[4]}"
port="${subArr[5]}"
dir="$dumpDir/$db"
mkdir -p "$dir"
outfile="$dir/${db}_${now}.sql"
errfile="$dir/${db}_error.log"
if ! /usr/bin/mysqldump -h "$host" -u"$user" -p"$pass" -P "$port" "$db" > "$outfile" 2>>"$errfile" ; then
echo "$(date '+%Y-%m-%d %H:%M:%S') Backup failed for $db" >> "$errfile"
fi
find "$dir" -type f -ctime +30 -delete
find "$dir" -name "*_error.log" -ctime +30 -delete
done < "$path/db_account.txt"
exit 0
3. 권한설정
chmod +x /backup/backup.sh
dos2unix /backup/backup.sh # (필요 시)
4. 크론탭 등록
- crontab -e 로 등록
- 실무에서는 백업 실패 시 원인 파악이 안 되면 최악이기 때문에 다음처럼 로그를 남기는 것이 안전함.
0 3 * * * /backup/backup.sh >> /backup/cron.log 2>&1
- >> /backup/cron.log → 표준 출력(성공 메시지) 로그 파일에 추가 저장
- >> 는 append (추가) 를 의미함.
- 스크립트 실행 중 echo, 결과 출력, 정상 로그는
- /backup/cron.log 파일에 계속 누적됨.
기존 로그는 지우지 않고 계속 이어서 저장됨.
2>&1 → 표준 에러(stderr)을 표준 출력(stdout)과 동일한 곳으로 보내기
평소:
- stdout → 정상 출력
- stderr → 오류 메시지
근데 cron에서는 stderr가 따로 처리되면 로그가 분산되기 때문에
이를 같은 파일로 합치는 것이 운영에서 필수임.
'Tech Archive > Linux' 카테고리의 다른 글
| [Linux] rsync 사용하여 원격 파일, 디렉토리 복사하기 (0) | 2021.07.20 |
|---|