db/mysql

mysqldump 옵션 스키마, 데이터만 백업

C/H 2010. 10. 22. 08:30

mysqldump --help 

# 테이블 자료만 압축으로 백업 
mysqldump -u user -p --opt --extended-insert -t -q database | gzip 〉 database.sql.gz 
mysqldump -u user -p --opt --extended-insert -t -q database table | gzip 〉 database.sql.gz 

# 압축자료를 그대로 복원 
gunzip 〈 database.sql.gz | mysql -u user -p database 
# 압축자료를 그대로 강제 복원 
gunzip 〈 database.sql.gz | mysql -u user -p -f database

주의: 만약, --quick 이나 --opt 없이 덤프하면 메모리가 많이 소모되어 큰 데이터베이스의 경우 문제가 발생할 수 있다.

mysqldump -u user -p --add-locks database 〉 database.sql 
# 테이블의 덤프하기전에 해당 테이블을 잠그고 덤프한 후에 테이블을 풀어준다. 
mysqldump -u user -p -c database 〉 database.sql 
# -c, --complte-insert 
# INSERT 구문에서 필드명을 포함한 전체를 덤프 

mysqldmp -u user -p -f database 〉 database.sql 
# -f, --force # 덤프 중 에러가 있어도 계속 진행
mysqldump -u user -p -h hostname database 〉 database.sql 
# -h, --host=host # 특정 호스트의 MySQL 에서 데이터 덤프 
mysqldump -u user -p -t database 〉 database.sql 
# -t, --no-create-info # 테이블 생성 정보는 덤프하지 않음(데이터만 덤프) 
mysqldump -u user -p -d database 〉 database.sql 
# -d, --no-data # 테이블 스키마만 덤프 
mysql -u user -p -q database 〉 database.sql 
# -q, --quick # 버퍼를 사용하지 않고 바로 표준출력으로 보낸다.
# AUTO_INCREMENT 초기화 
mysqldump -u root -p -h hostname --opt database -d --single-transaction | sed 's/ AUTO_INCREMENT=[0-9]*\b//' > filename.sql
참고 :
--quick : C API의 mysql_use_result() 함수를 사용하므로 속도가 빠르다.
--add-drop-table : 덤프 결과에서 create table 앞에 drop table 절을 추가합니다.
--add-locks : 덤프하기 전에 LOCK table을 이용하여 테이블을 잠그고 덤프후 UNLOCK table을 실행합니다.
--extended-insert : insert 문 하나에서 모든 레코드를 삽입하는 insert 문을 생성합니다.

※ --opt : 위에 나온 옵션을 동시에 사용한 것과 같은 결과를 가져옵니다.

--no-date or -d : 테이블의 스키마만 덤프합니다.
--no-create-info or -t : create table을 출력하지 않고 데이터만 덤프합니다.
--opt 옵션을 주어서 백업하면 나중에 원복을 할때 기존 DB와 TABLE, DATA를 삭제하고 백업한 내용으로 Update를 합니다.
--ignore-table=database.table : 특정테이블을 제외하고 백업한다.

★ --opt 옵션과 -d or -t는 같이 사용할 수 있습니다.


--skip-triggers : Trigger 제외

 

 


 

 

#2012.05.23 backup.sh 
USER="userid"  #mysql, userid equal 
PASS="mysqlpassowrd" 
SOURCE_DIR="/home/$USER/www" 
TARGET_DIR="/home/$USER/backup/" 
TARGET_FILE="back.$(date +%Y%m%d%H).tar.bz2" 
TARGET_SQL="back.$(date +%Y%m%d%H).sql" 
mkdir $TARGET_DIR  

##### sql dump backup 
mysqldump -u$USER -p$PASS -d -q --opt --ignore-table mysql.* | bzip2 -9 > $TARGET_DIR$TARGET_SQL.all.scheme.bz2 
mysqldump -u$USER -p$PASS -t -q --opt --ignore-table mysql.* | bzip2 -9 > $TARGET_DIR$TARGET_SQL.all.data.bz2 find $TARGET_DIR -mtime +10 -print -exec rm -rf {} \;  

##### user file backup 
EXCLUDE="--exclude cache --exclude cash_back --exclude logs" 
mkdir $TARGET_DIR 
tar cvjf $TARGET_DIR$TARGET_FILE $SOURCE_DIR $EXCLUDE
# 백업 
mysqldump -uuserid -p -d -q --opt pickup | bzip2 -9 > back.2012060811.sql.database.scheme.bz2 
mysqldump -uuserid -p -t -q --opt pickup | bzip2 -9 > back.2012060811.sql.database.data.bz2  

# 복원 
bunzip2 < back.2012060811.sql.database.scheme.bz2 | mysql -uuserid -p -f database 
bunzip2 < back.2012060811.sql.database.data.bz2 | mysql -uuserid -p -f database  
tar xzOf back.2012060811.sql.database.data.bz2 | mysql -uuserid -p -f database 
mysql -uuserid -p -f database < backup.sql

 

 

반응형