DB/MYSQL MariaDB2018. 2. 9. 14:09

**** MYSQLDUMP VARIABLES ***************************************************
Variables (--variable-name=value)
and boolean options {FALSE|TRUE}  Value (after reading options)
--------------------------------- -----------------------------
all                               TRUE
all-databases                     FALSE
add-drop-database                 FALSE
add-drop-table                    TRUE
add-locks                         TRUE
allow-keywords                    FALSE
character-sets-dir                (No default value)
comments                          TRUE
compatible                        (No default value)
compact                           FALSE
complete-insert                   FALSE
compress                          FALSE
create-options                    TRUE
databases                         FALSE
debug-info                        FALSE
default-character-set             utf8
delayed-insert                    FALSE
delete-master-logs                FALSE
disable-keys                      TRUE
extended-insert                   TRUE
fields-terminated-by              (No default value)
fields-enclosed-by                (No default value)
fields-optionally-enclosed-by     (No default value)
fields-escaped-by                 (No default value)
first-slave                       FALSE
flush-logs                        FALSE
flush-privileges                  FALSE
force                             FALSE
hex-blob                          FALSE
host                              (No default value)
insert-ignore                     FALSE
lines-terminated-by               (No default value)
lock-all-tables                   FALSE
lock-tables                       TRUE
log-error                         (No default value)
master-data                       0
max_allowed_packet                25165824
net_buffer_length                 1047551
no-autocommit                     FALSE
no-create-db                      FALSE
no-create-info                    FALSE
no-data                           FALSE
order-by-primary                  FALSE
port                              3306
quick                             TRUE
quote-names                       TRUE
routines                          FALSE
set-charset                       TRUE
shared-memory-base-name           (No default value)
single-transaction                FALSE
socket                            (No default value)
ssl                               FALSE
ssl-ca                            (No default value)
ssl-capath                        (No default value)
ssl-cert                          (No default value)
ssl-cipher                        (No default value)
ssl-key                           (No default value)
ssl-verify-server-cert            FALSE
tab                               (No default value)
triggers                          TRUE
tz-utc                            TRUE
user                              (No default value)
verbose                           FALSE
where                             (No default value)
************************************************************************************

나에겐 자주 있는 경우이지만, 대체적으로 남들은 하지 않는
DB 이전 작업을 해야할 때가 있다. 

그런데 만약 덤프 때 옵션을 어리벙하게 주면,
옮기고자 하는 데이터의 사이즈가 Giga Byte 단위를 넘어설 경우
하루 줄창 걸려도 될똥 말똥이다. 
뒌장 맞을 --;;

그래서 어케 하자고?

뭐, 역시 빠르고 명확하지만, 전혀 비주얼하지 않은 
수작업이 필요하지 않겄어?   /(-0-)/

그럴 때 필요한 것이 바로 mysqldump 다.

mysqldump --help 라고 치면 모든 OPTION들의 설명이 나와있겠지만,
그래도 아래 3가지 옵션은 알아 두는 것이 좋을 것 같다.

일단, 맨 위의 값들은 mysqldump가 사용하는 변수의 목록이다.
즉, 아무런 값도 치지 않고 (아! 물론  데이터 베이스는 선택해야 한다.)
명령어를 입력하면, 위의 값들을 바탕으로 결과가 만들어진다는 것이지.

그렇지만, 역시나 속도가 생명인 IT의 건아들은 
뭔가 오밀조밀하게 만져서 조금더 빠르게 덤프를 뜨고 싶을 것이다.


**** 속도가 관건인 분에게 아래의 OPTION들을 권하오~~

--no-autocommit=1 : 일단 autocommit을 끄고, 
                           1개의 테이블 입력이 완료될 때 까지
                           기다렸다가 commit을 수행 한다. 요거이 좋다!!!
                           대신 뻑나면, 다시 첨부터~~~ 우어!!!

--single-transaction=1 : 작업 후에 변경 된 데이터의 내역을 다시 적용하지 않는다.
                                 즉, 중간에 값이 바뀌질 않는다면 가능하다는 말씀.

--extended-insert=1 : 요거이 관건인데, 쓸데 없이 INSERT 구문이 늘어나는 것을 
                             막아준다. 가령 
                            ->  INSERT INTO `A` VALUES (1,10),(2,20);
                             이러면 될 것을 , 
                            -> INSERT INTO `A` VALUES (1,10); 
                            -> INSERT INTO `A` VALUES (2,20);
                             으로 늘려준다. 이러면 하루 온 종일 도는 거다 --;;


그럼 덤프 방법을 보자.
리눅스건 윈도우 커맨드건 간에 어차피 양식은 같다.
(아래의 대문자는 당신이 넣어야 할 내용들이다.)

@@@@ 덤프 할 때 @@@@
c:\>mysqldump -hHOST_NAME -uMY_ID -pMY_PASSWORD --databases DB_NAME --tables TABLES_OF_DB_NAME --no-autocommit=1 --single-transaction=1 --extended-insert=1 > c:\DUMP_FILE.sql


요러면, 아무것도 모르고 그냥 뽑아내는 방식보다,
(지가 무슨 고급 승용차인줄 아는지 거의가 풀 옵션이다 --;;)
사이즈가 1/4 정도로 확 줄고,
속도는 광속을 뽐내게 된다.

즉, 관건은, 
덤프의 시간이 아니라 RESTORE의 시간인데,
개인적인 체감 속도로 판단하자면, 
진짜 시간이 1/10 정도는 감소하는 것 같다눙... -0-/

@@@@ 복원 할 때 @@@@
c:\>mysql -hHOST_NAME -uMY_ID -pMY_PASSWORD --database DB_NAME < c:\DUMP_FILE.sql
 

뭐 기타 옵션들도 많지만, 
간단한 DB 하나 잡고서 한 가지씩 테스트 해본다면
대충 감은 잡을 수 있을 것이다.
 


출처: http://blackbull.tistory.com/8 [음머어's 까망별]

Posted by 무소유v