사용자 도구

사이트 도구


kb:mysqlbackup

MySQL Backup

MySQL 백업

mysqldump 사용 예제

뭐, 매뉴얼 페이지 보면 다 나올 내용이다만, 옵션이 워낙 많아서… 간단히 정리해놓는 게 좋을 듯 하다.

데이터베이스의 테이블만 dump 받기

mysqldump -u USERNAME -p DATABASE_NAME TABLE_NAME > SQL.sql 

데이터베이스의 모든 테이블 dump 받기

mysqldump -u USERNAME -p DATABASE_NAME > SQL.sql 

데이터베이스에서 하나의 테이블 스키마만 dump 받기

mysqldump -u USERNAME -p -d DATABASE_NAME TABLE_NAME > SCHEMA_SQL.sql

데이터베이스에서 모든 테이블의 스키마만 dump 받기

mysqldump -u USERNAME -p -d DATABASE_NAME > SCHEMA_SQL.sql 

여러 데이터베이스 dump 받기

mysqldump -u USERNAME -p --databases DATABASE1 DATABASE2 DATABASE3

데이터베이스의 모든 테이블을 압축해서 dump 받기

mysqldump -u USERNAME -p DATABASE_NAME | gzip > SQL.gz 

데이터베이스의 하나의 테이블을 압축해서 dump 받기

mysqldump -u USERNAME -p DATABASE_NAME TABLE_NAME | gzip > SQL.gz 

압축해서 덤프받은 파일을 데이터베이스에 집어넣기

gunzip < comp_section.gz | mysql -u USERNAME -p DATABASE_NAME

원격 호스트의 데이터베이스를 압축해서 dump 받기

mysqldump -h HOSTNAME -u USERNAME -p DATABASE_NAME | gzip > comp.sql.gz

고려해볼만한 mysqldump 옵션들

옵션 내용
–add-drop-table CREATE TABLE TABLENAME 문 앞에다가 DROP TABLE IF EXISTS TABLENAME 문을 집어넣는다. 즉 덤프 받은 데이터베이스를 좀 더 쉽게 데이터베이스에다 집어넣을 수 있게 만들어준다.
-q 또는 –quick 쿼리를 버퍼링하지 않고, 다이렉트로 출력한다.
–add-locks INSERT 문 앞 뒤로 락을 걸어준다.
–e 또는 –extended-insert 다행(multiline) INSERT 문을 사용하여 좀 더 작고 빠른 INSERT 문을 생성한다.
-l 또는 –lock-tables 백업용 읽기를 위해 모든 테이블에 락을 건다.
–opt –add-drop-table –add-locks –all –extended-insert –quick –lock-tables 플래그를 모두 설정한 것과 같다.

mysqldump + crontab

다음과 같은 명령어를 크론탭에다 넣으면, 매시간마다 BACKUP_2003_12_15_06 과 같은 이름의 백업 파일이 생성된다. (크론탭 안에서 바로 할 수도 있는데, FreeBSD에서는 왠지 제대로 안 되어서 스크립트로 빼냈다.)

backup_database

/usr/local/mysql/bin/mysqldump -u USERNAME -p PASSWORD --all-databases > /db_backup/BACKUP_`date +%Y_%m_%d_%H`

crontab -e

0 6 * * * /root/backup_database

kb/mysqlbackup.txt · 마지막으로 수정됨: 2014/11/08 17:09 (바깥 편집)