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


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