MYSQL2012. 10. 12. 11:58

작성일 : 2012년 02월 16일 

작성자 : 김창현

제   목 : mysqldump을 이용하여 전체 데이터베이스시 일부 데이터베이스 제외시키기 

 

MYSQL 데이터 이전 시 많은 수의 DB 데이터를 이전하다 보면 --all-database를 통해 전체 DB데이터를 백업 받을 수가 있다. 그러나 신규 시스템 이전시에 전체 DB중 일부 DB는 제외하고 싶을 때가 있을 것이다. 그렇다고 일일이 DB를 DUMP하여 IMPORT 시키기에는 업무 효율성이 떨어질 것이다.

--all-database의 경우에는 시스템 데이터베이스인 mysql도 같이 DUMP가 되며, 일일이 에디터를 통해 제거하는 방법도 불편 하다.

시스템 데이터베이스외에 좀더 많은 DB에 대해 제외를 시키고자 한다면 정말 난감하다.

 

이를 해결하기 위해 리눅스의 파이프를 통해 해결해보자!!

 

표에 나와 있는 예제는 egrep을 이용하여 mysql|mysql.old라는 데이터베이스를 제외시키고 나머지 DB에 대해서 전체 DUMP를 한다.

mysql -uroot --password='' --batch --skip-column-names --execute='show databases' | egrep -v "mysql|mysql.old" | xargs mysqldump --password='' --databases -Q

 

mysql 유틸을 이용하여 SQL의 전체 데이터베이스를 확인 할 수 있는 show database를 활용하여 데이터베이스 모든 목록을 추출하고, 추출된 데이터베이스 내용을 파이프를 통해 egrep으로 전달하여 -v 옵션을 통해 제외하고 싶은 문자패턴들을 나열하고 제외된 데이터베이스 목록을 mysqldump로 넘겨 추려진 데이터베이스 목록에 대해서만 덤프를 받을 수가 있다. 추출된 목록을 넘기는 경우 한번에 받은 목록을 한번에 인자 처리 할 수 없는 관계로 xargs 명령어를 통해 라인단위로 인자를 넘겨 주었다.

'MYSQL' 카테고리의 다른 글

[MySQL] DB Schema 비교  (0) 2014.08.19
mysql 디비테이블 오래된자료 자동삭제  (0) 2012.07.31
mysql 백업하ㅂ  (0) 2012.06.22
Posted by 다오나무
영삼이의 IT정보2011. 10. 28. 05:09

SQL을 이용해서 데이터베이스를 생성할 때
데이터베이스를 생성하는 명령어는

CREATE DATABASE 데이터베이스이름

이와같이 테이블을 생성하는 명령어는

CREATE TABLE 테이블이름(칼럼1이름 설명, 칼럼2이름  설명, 칼럼3이름 설명 ...)

SQL은 대소문자를 구분하지 않지만, SQL 키워드를 대문자로 사용하면, DB 테이블과 칼럼의 이름을 구분하기 쉬움)
예) sitename 이라는 DB를 생성하고, users 테이블을 생성하자.

이때 실제로 'sitename'이라는 데이터베이스가 생성되었는지 확인해보도록 하겠다.
일반적인 경로인
C:\APM_SETUP\Server\MYSQL5\Data 에 가보면

sitename 이라는 데이터베이스가 생성된 것을 볼 수 있다.
다음단계로, 'sitename'이라는 데이터베이스 안에 
필드가 user_id, first_name, last_name, email, pass, registration_date 을 가진 테이블 'users'를 생성해보겠다.

이제, 만든 'users'테이블의 내용을 보기 위해서
먼저, sitename DB 안에 생성한 테이블이 무엇이 있는지 확인해보자.

SHOW TABLES;

'sitename' 데이터베이스 안에는 users'라는 테이블이 있음이 확인되었다.
이제, users 테이블을 확인해보자.
SHOW COLUMNS FROM users;

(뒷부분이 약간 잘리긴 했지만)
위와 같이 users 테이블이 확인되었다.
이제 'users' 테이블에 레코드를 입력해 보자.
-> 입력할 칼럼의 이름을 명기하는 방식의 쿼리를 이용한다.
INSERT INTO users
->(first_name, last_name, email, pass, registration_date)
VALUES('Larry', 'Ullman',
->'email@example.com',
->SHA1('mypass'), NOW());

이와같이 데이터를 입력했다.
이제 데이터를 검색하는방법은
SELECT * FROM 테이블이름

SQL의 기본은 여기까지.
헝 뭔가 포스팅을 밀린느낌.ㅠ.ㅠ

Posted by 다오나무