mysql 데이터베이스 백업 스크립트
mysqldump를 사용하여 데이터베이스를 매일 백업하는 쉘스크립트를 작성하였다.
mysqldump 사용법
mysqldump는 DB에서 원하는 DB만, table만 백업 할 수 있고, 전체 DB를 백업 할 수 있다.
(1) 전체 백업
mysqldump -u계정이름 -p -A > all.sql
(2) 특정 DB 백업
mysqldump -u계정이름 -p 특정DB명 > 특정DB명.sql
(3) 특정 DB에 특정 테이블 백업
mysqldump -u계정이름 -p 특정DB명 특정table명 > 특정DB명.특정table.sql
복원법
mysql -u [userId] -p [password] [DB명] < 특정DB(특정table).sql
- DB 백업 스크립트 작성
# vi /root/dbbackup.sh
mysqldump를 이용하여 디비나 테이블을 백업하고 백업한 파일은 gzip을 이용하여 압축하여 백업 폴더에 저장한다.
- db 계정정보를 스트립트 안에 명시하는 경우
(스크립트에 명시적으로 계정정보를 입력하는 것은 보안상 위험 있음. 사용 예시로만 참고할 것)
#!/bin/bash
DB_BACKUP="/home/dbbackup/"
DB_USER="username"
DB_PASSWD="passwd"
db="dbname"
table="tablename"
# Remove backups older than 3 days
find $DB_BACKUP -ctime +3 -exec rm -f {} \;
# 데이터베이스를 모두 백업할경우
mysqldump --user=$DB_USER --password=$DB_PASSWD -A | gzip > "$DB_BACKUP/mysqldump-$db-$(date +%Y-%m-%d).gz";
# 데이터베이스를 백업할경우
mysqldump --user=$DB_USER --password=$DB_PASSWD $db | gzip > "$DB_BACKUP/mysqldump-$db-$(date +%Y-%m-%d).gz";
# 데이터베이스의 특정 테이블을 백업할경우
mysqldump --user=$DB_USER --password=$DB_PASSWD $db $table | gzip > "$DB_BACKUP/mysqldump-$db-$table-$(date +%Y-%m-%d).gz";
- db 계정정보를 my.cnt에 명시하는 경우
my.cnt
[mysqldump]
user=사용자이름
password=암호
스크립트
#!/bin/bash
DB_BACKUP="/home/dbbackup/"
db="dbname"
table="tablename"
# Remove backups older than 3 days
find $DB_BACKUP -ctime +3 -exec rm -f {} \;
# 데이터베이스를 모두 백업할경우
mysqldump -A | gzip > "$DB_BACKUP/mysqldump-$db-$(date +%Y-%m-%d).gz";
# 데이터베이스를 백업할경우
mysqldump $db | gzip > "$DB_BACKUP/mysqldump-$db-$(date +%Y-%m-%d).gz";
# 데이터베이스의 특정 테이블을 백업할경우
mysqldump $db $table | gzip > "$DB_BACKUP/mysqldump-$db-$table-$(date +%Y-%m-%d).gz";
/root/dbbackup.sh 를 실행하여 정상적으로 스크립트가 작동하는지 확인한다.
# 데이터베이스를 모두 백업할경우
/opt/bitnami/mysql/bin/mysqldumpmysqldump --user=$DB_USER --password=$DB_PASSWD -A | gzip > "$DB_BACKUP/mysqldump-$db-$(date +%Y-%m-%d).gz";
정상적으로 스크립트가 실행이 되면 보안을 위해 root만 수정하고 실행할수 있도록 권한 설정
chmod 700 /root/dbbackup.sh
- 크론택에 작업 등록
#crontab -e
00 04 * * * /root/dbbackup.sh