DBDBDEEP

mysql엔진을 사용하는 mysql, mariadb 들의 백업은 mysqldump 유틸리티를 사용한다.
Oracle에서 사용하는 expdp, impdp와 비교하면 일부 기능은 없지만 매우 직관적이며 덤프를 sql파일로 생성하므로
작업자가 열어보면 이해하기가 상대적으로 매우 쉽다.
아래는 사용방법이 다.
 

#mysqldump 익스포트 받기    

mysqldump -u유저명 -p -h서버ip --single-transaction --skip-add-drop-table  --databases testdb --tables tb_emp > tb_emp.sql

*추가 옵션 설명 및 참고
--single-transaction 옵션을 넣지 않으면 Lock을 유발하므로 반드시 넣어준다.
통계 관련오류 skip하려면 --column-statistics=0 추가를 고려
--no-create-info : 데이터만 덤프 --create 생성문이 빠짐
--no-data : 데이터를 제외하고 구조만 덤프
--master-data=2 : replication 설정 시 바이너리 포지션 숫자를 알아야 할 때 필요
--routines : 프로시저나 펑션등을 포함 시 추가
 

#만약 특정 테이블의 특정조건만 익스포트 하고 싶다면?

mysqldump -uroot -p --single-transaction -P3306 --databases testdb --tables tb_test --where="seqno BETWEEN '5263703858' AND '5272397972'" > tb_test.sql

 
 

#뷰테이블 생성구문 확인방법

select concat('CREATE VIEW ', TABLE_SCHEMA ,'.',TABLE_NAME, ' AS ',VIEW_DEFINITION ,';') from information_schema.views order by 1;

 

#루틴(프로시저, 펑션)만 익스포트

mysqldump -uroot -h서버ip -P33306 --routines --no-create-info --no-data --no-create-db --skip-opt --single-transaction -p --databases test  > prc_01.sql

 

#디파이너 제거방법(리눅스 os에서)

sed -i -e 's/DEFINER=`testuser`@`%`/ /g' proc_*.sql

 

#mysql DB에 임포트

mysql -u유저명 -p암호 -h서버ip  -P3306 < tb_emp.sql

위와 같이 sql파일을 임포트시도할 수 있으나 로그가 남지 않는다.(다만 에러 시에는 출력되고 중지됨)
*sql 파일 내에 use db가 있는지 사전에 확인!
-----
*추가 또 다른 방법: 임포트 되는 과정을 보고 싶다면 직접 DB에 접속 후 sql 파일을 실행한다.

use DB명;
source tb_emp.sql

 

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band