MariaDB/MySQL mysqldump 옵션정리

Posted 2016. 3. 19. 22:05

MyriaDB는 태생이 MySQL이라서 아직까지는 mysql명령어를 그대로 사용한다.


테스트를 위한 database 및 user를 생성합니다.


-- utf8옵션으로 데이터베이스를 생성합니다.

create database org_db default character set utf8 collate utf8_general_ci;

create database target_db default character set utf8 collate utf8_general_ci;


-- 사용자를 생성합니다.

create user 'test_user'@'%' identified by 'test_password';


-- 사용자에게 생성한 DB 접근권한을 부여합니다. 모든 권한을 다 줍니다. 세부권한에 대한 옵션은 별도 참조

-- 참고로 권한을 제거하는 명령어는 revoke 입니다.

grant all privileges on org_db.* to 'test_user'@'%';

grant all privileges on target_db.* to 'test_user'@'%';

flush privileges;


참고 : http://durst.tistory.com/183


테스트를 위한 org_db에 테이블도 몇개 만들고 데이터를 넣어둡니다.

use org_db;

create table t1( id varchar(10), nm varchar(20), reg_dttm datetime );

insert into t1 values ('a1', '테스트', now() ),('a4', '테스트4', now() ),('a2', '테스트2', now() ),('a3', '테스트3', now() );


create table t2( id varchar(10), nm varchar(20), reg_dttm datetime );

insert into t2 values ('a1', '테스트', now() ),('a4', '테스트4', now() ),('a2', '테스트2', now() ),('a3', '테스트3', now() );


create table t3( id varchar(10), nm varchar(20), reg_dttm datetime );

insert into t3 values ('a1', '테스트', now() ),('a4', '테스트4', now() ),('a2', '테스트2', now() ),('a3', '테스트3', now() );


이제 mysqldump 를 사용해 봅니다.

--org_db 전체를 dump합니다.

mysqldump -h 192.168.0.245 -u test_user -ptest_password org_db > org_db_all.sql

-- password는 -p옵션뒤에 바로 붙입니다. 띄어쓸경우 비밀번호가 아닌 database명으로 인식합니다.


-- 데이터 없이 구조만 가져오고 싶을때는 no-data 옵션을 사용

mysqldump -h 192.168.0.245 -u test_user -ptest_password org_db --no-data > org_db_all_structure.sql


-- org_db에 있는 특정테이블만 dump 합니다.

mysqldump -h 192.168.0.245 -u test_user -ptest_password org_db t1 t2 > org_db_t1_t2.sql


--add-drop-database,  --add-drop-table  은 drop database, drop table 구문을 사용하지 않습니다.

--no-create-db, --no-create-info 는 위의 옵션과 함께 사용하는데, create database, create table 구문을 사용하지 않습니다.

   다만 no-create-info를 사용할 경우 view는 dump를 받을수 없게 되니 유의.

--skip-add-locks --single-transaction --skip-lock-tables 는 dump 시 lock을 걸지 않고 실시합니다.

 운영중인 db에서  dump를 하고자 할때 사용합니다.


참고 : http://intomysql.blogspot.kr/2010/12/mysqldump.html


dump 받은 데이터가 utf-8이 아니라면 utf-8로 변환합니다.

mysql\ iconv -f latin1(source db 인코딩) -t UTF-8(target db 인코딩) dump.sql > newdump.sql


참고 : http://appletree.or.kr


테이블이나 데이터를 동일 host의 접근가능한 database에 복사하려고 하는 경우엔 굳이 dump를 받지 않고 create&select, insert&select를 해도 됩니다.

참고 : http://ra2kstar.tistory.com/109








Data Export & Backup in Console

Posted 2012. 4. 5. 16:23


 MySQL용 GUI Tool을 사용하다보면 어느순간 기본명령어를 잊게 된다.

윈도우 상에서만 작업한다면, 그리고 항상 내가 작업하다 PC에서만 작업한다면 문제가 없겠지만 그렇지 않은 경우, 예를 들어 ssh만으로만 연결되어 작업한다던가, 콘솔앞에서 작업해야 하는 등의 경우에 직면하면 당황하게 마련이다.

1. Data Export.

GUI Tool에서 결과에서 마우스 오픈쪽 클릭한후 Export를 누르던 행위에 해당한다.

mysql > SELECT * FROM USERS
        -> INTO OUTFILE '/tmp/user_data.txt';


간단하다. 하지만 결과로 나온 데이터를 확인하는 차원이 아닌 엑셀에나 기타 다른 곳에서 활용해야 하는 경우 위의 결과는 쓸모가 없어진다. 그럴 경우는 다음의 옵션등을 주어서 결과를 받아야 한다.

 mysql > SELECT * FROM USERS
         -> INTO OUTFILE '/tmp/user_data.txt'
         -> FIELDS TERMINATED BY ',' 
         -> ENCLOSED BY '"'
         -> LINES TERMINATED BY '\r\n';

엑셀에서 가져다 쓸데 많이 사용하는 csv 파일의 경우 위와 같이 export하면 그대로 문제 없이 사용가능하다.

한가지 덧붙이자면 INTO OUTFILE 의 경로를 '/tmp/' 로 정한것은 디렉토리 권한에 제약받지 않고 파일을 생성할수 있기 때문이다.
root로 로그인 했다 할지라도 /root/ 디렉토리 밑으로 파일을 지정하게 되면 파일을 생성할수 없다는(정확히는 파일이 없다는) 오류메시지를 보게되는데, 알다시피 mysql 은 mysql 계정으로 실행되기 때문이다.


2. Dump

dump 는 주로 데이터를 백업하거나 이관할때 사용하게 된다. dump는 mysqldump라는 명령어로 쉘상에서 수행하게 된다.
mysqldump의 옵션은 매우 다양하다. 자세한 설명은 http://dev.mysql.com/doc 또는 http://mysqlkorea.com/  을 참고하면 된다.

# mysqldump -u root -p DB_USER > mydatabase.sql 


서로 다른 호스트로 데이터베이스를 옮기거나 복사하려는 경우, 원격으로 그 데이터베이스에 접속이 가능하다면 다음과 같이 별도의 dump파일을 생성하지 않고 한번에 복사할수 있다.

# mysqldump -u root -p DB_USER [table_name]|  mysql -h  192.168.0.xxx DB_USER

원격에 있는 서버에는 데이터베이스를 미리 만들어 주어야 한다.

CREATE DATABASE DB_USER CHARACTER SET utf8 COLLATE utf8_general_ci

character SET의 경우 환경에 맞게 변경해서 데이터베이스를 생성하면 된다.


아무리 쉬운 명령어라도 자주 사용하지 않으면 까먹기 마련. 

참고사이트 : http://www.tutorialspoint.com/mysql/mysql-database-export.htm


머리가 나쁘면 몸이 고생한다지만 몸이 편하려고 하면 머리도 나빠지는 법...




mysqldump를 사용하다 데이터 없이 구조만 받아오고 싶은데 매번 전체 데이터까지 통으로 받아오다 보니 옵션을 몰라 찾아봤다.

참고 주소 :  http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html

 정말로 많은 옵션이 존재한다. 

데이터가 필요없으므로 이중에서 한가지만 사용하면 됨.

~]# mysqldump -u [username]  -p [databasename] --no-data > backup.sql

 이와 같이 하면 해당 databasename 에 해당하는 모든 테이블의 구조만 받아올수 있다.

'DBMS > MySQL' 카테고리의 다른 글

Data Export & Backup in Console  (0) 2012.04.05
Replication에서 SKIP시키기  (0) 2012.03.16
MySQL 계정관리  (0) 2011.11.28
MySQL5.5 Replication 시작시 추가입력사항  (0) 2011.10.05
MySQL Tunning시 사용되는 명령어 몇개...  (0) 2011.10.03