[DB] MySQL Dump 관련 QnA

written by Inshane

퍼가실때 출처없이 가져가시면 미워함

 

1. MySQL Dump 기초

덤프 파일을 일반적인 텍스트 편집기로 읽어보면

수많은 Create 또는 Insert Query가 나열되어있는것을 알 수 있다.

A라는 테이블이 있다면 A테이블을 덤프시 그 A란 테이블을 쿼리형태로 만들어주는게 핵심이다.

dumpCEnA.sql에 테이블을 덤프할때의 사용법은 다음과 같다.

 

mysqldump -h 호스트 -u 계정 -p패스워드 –databases DB명 –tables 테이블명 > dumpCEnA.sql

 

덤프 뜬 dumpCEnA.sql을 특정 DB에 복구시킬때는 다음과 같다.

 

mysql -u 계정명 -p패스워드 DB명 < dumpCEnA.sql

 

참쉽죠?

 

 

2. 서론이 길면 재미없고 상황별로 덤프 뜨는법을 친절하게 나열하자면?

 

 

Q. 난 DB를 통째로 백업하고 싶은데?

 

A. mysqldump -h 호스트 -u 계정 -p패스워드 –databases DB명 > dumpCEnA.sql

테이블명 빼면 알아서 DB 통째로 백업한다. 

기본사항 3개 걸고 넘어가자면

1) –databases는 굳이 안넣어줘도 DB명으로 인식한다.

2) -h 옵션이 빠지는경우 localhost로 자동 인식한다.

3) -p패스워드는 중간에 공백넣지 말자. 떼어지면 패스워드로 인식안하고 DB명으로 인식한다.

 

 

Q. 기본 옵션으로 덤프뜨니까 쿼리가 한줄한줄씩 안나오고 뭉쳐서 나오는데 이거 어떻게 처리함?

 

A. mysqldump -u 계정 -p패스워드 DB명 > dumpCEnA.sql –extended-insert=FALSE

extended-insert 옵션이 기본상태가 TRUE인 경우는 뭉쳐서 하나로 처리합니다. 한줄씩 뗄떼는 FALSE로, 단 파일 사이즈가 커지는건 감수하셔야 함.

 

 

Q. 구조만 백업하고 싶습니다.

 

A. mysqldump -u 계정 -p패스워드 DB명 –no-data > dumpCEnA.sql

no-data 옵션을 사용하세요.

 

 

Q. XML로도 뺄수 있나요?

 

A. mysqldump -u 계정 -p패스워드 DB명 –xml > dumpCEnA.sql

xml 옵션을 사용하세요.

 

 

Q. 테이블내 특정 조건을 주고 특정 필드만 추출해서 덤프뜨고 싶은데 방법이 있나요?

 

A. 그냥은 방법이 없는걸로 알고 있어서, 다음과 같이 추출해서 처리해보았습니다.

(혹시나 관련 옵션이 있다면 댓글로 남겨주세요)

샘플은 CEnASample 테이블은 idx, userid, name, status라는 4개의 필드로 구성되어 있고

이중에서 idx(Primary Key)를 제외한 userid,name,status 값을 가져오되 status가 online 인 값만 가져오는 예시이다.

 

mysql -u 계정 -p패스워드 DB명 -e “select CONCAT(‘insert into CEnASample (userid,name,status) values (\”,userid,’\’,\”,name,’\’,\”,status,’\’);’) from CEnASample where status=’online'” > dumpCEnAStep1.sql

 

아래와 같이 좀 번거롭게 한단계 더 넣어준다.

grep -v ‘CONCAT’ dumpCEnAStep1.sql > dumpCEnAStep.sql

 

]]>

도큐멘트, 미분류 에 올린 글

댓글 남기기