-
mysql 데이터베이스 백업 스크립트프로그래밍/DB 2020. 5. 2. 17:20728x90반응형
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 를 실행하여 정상적으로 스크립트가 작동하는지 확인한다.
위와 같이 스크립트를 실행하면 정상적으로 되는데 crontab에서 실행할때는 아래와 같이 오류가 발생할 수 있다.cat /home/bitnami/backup_db.logdbbackup.sh: line 8: ./mysqldump: No such file or directory이럴 경우 which로 mysqldump 명령어의 전체 경로를 확인하여 스크립트에 명시해주면 된다.$ which mysqldump/opt/bitnami/mysql/bin/mysqldump아래와 같이 해주면 된다.# 데이터베이스를 모두 백업할경우
/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
매일 새벽 4시마다 디비 백업을 하도록 크론택을 등록하고 작업 완료.728x90반응형'프로그래밍 > DB' 카테고리의 다른 글
postgresql 테이블에 칼럼 추가 + 커멘트 달기 (0) 2020.08.14 postgresql 테이블 사이즈 확인하기 (2) 2020.07.18 psycopg2.OperationalError: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/tmp/.s.PGSQL.5432"? (0) 2020.03.27 sed로 " 안의 , 제거하기 (1) 2020.01.08 postgreSQL 사용법 - 테이블 업데이트 (0) 2019.09.28