Oracle 과 MSSQL에 있는 DB Link 서비스를 MySQL에서 지원하는 FEDERATED 엔진을 이용하여 구현하는 방법 입니다.


1. 설치되어 있는 엔진 확인

  - CentOS에서 yum 으로 설치했을때 기본적으로 사용 가능한 엔지들의 목록 입니다.

2. 엔진을 사용할 수 있도록 설치

 

3. FEDERATED 엔진의 설치여부 확인

  - FEDERATED 엔진이 목록에 표시되지만 사용 가능하지 않은 상태 입니다.


4. 엔진 사용 가능 하도록 my.cnf 수정

  - [mysqld] 하위에  federated 항목을 추가 합니다.


5. 엔진의 상태를 확인 합니다.

 - FEDERATED 엔진의 Support 상태가 YES 로 변경 되었습니다.


----------------------------- FEDERATED 엔진을 사용하여 테이블을 생성하여 원격지 테이블과 연결 -------------------------

1. 원격지에 테이블을 생성 합니다.

- 실제 데이터가 입력되는 테이블 입니다.

- 데이터 폴더에는 .frm(구조) / .ibd(데이터) 파일이 생성 됩니다.

CREATE TABLE `cityholic_db`.`cart_product` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '아이디',

  `users_id` bigint(20) unsigned NOT NULL COMMENT '고객아이디',

  `product_id` bigint(20) NOT NULL COMMENT '상품아이디',

  `option_code` varchar(50) NOT NULL COMMENT '상품옵션코드',

  `quantity` int(11) NOT NULL DEFAULT '0' COMMENT '상품 개수',

  PRIMARY KEY (`users_id`,`product_id`,`option_code `),

  UNIQUE KEY `id_UNIQUE` (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='카트에 담긴 상품';


◈ 만약 원격지 DB의 비밀번호에 특수문자'@' 를 사용하는 경우 2번 방식으로는 테이블을 생성할 수 없으니

     2번을 제외하고 3번 항목부터 진행해 주시면 됩니다.


2. 로컬에 테이블을 생성 합니다.

 - 원격지의 테이블을 참조하기 위한 테이블 입니다

 - 데이터 폴더에는 .frm(구조) 파일만 생성 됩니다.

CREATE TABLE `cityholic_db`.`cart_product` (

  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '아이디',

  `users_id` bigint(20) unsigned NOT NULL COMMENT '고객아이디',

  `product_id` bigint(20) NOT NULL COMMENT '상품아이디',

  `option_code` varchar(50) NOT NULL COMMENT '상품옵션코드',

  `quantity` int(11) NOT NULL DEFAULT '0' COMMENT '상품 개수',

  PRIMARY KEY (`users_id`,`product_id`,`option_code `),

  UNIQUE KEY `id_UNIQUE` (`id`)

) ENGINE=FEDERATED DEFAULT CHARSET=utf8 COMMENT='카트에 담긴 상품'

CONNECTION='mysql://root:dldusrn1@10.3.0.27:3306/cityholic_db/cart_product';

   - CONNECTION 옵션의 구성 = 'mysql://[계정]:[비밀번호]@[서버ip]:[port]/[원격지DB명]/[원격지 테이블명]'

   - Pass 에서 특수문자 '@' 를 사용하는 경우 아래와 같이 테이블 생성시 오류가 발생합니다.

     



3. 테이블 생성시 사용할 SERVER 개체를 생성 합니다.

1
2
3
CREATE SERVER [서버명]
FOREIGN DATA WRAPPER mysql
OPTIONS (USER 'root', PASSWORD 'XXXX@XXXX', HOST '192.168.197.128', PORT 3306, DATABASE 'db_link_test');
cs

      - 생성된 서버 정보를 조회합니다.

1
SELECT * FROM mysql.servers;
cs


4. 생성된 서버로 테이블을 생성 합니다.

- 로컬에 생성하는 테이블과 원격지 테이블이 동일하다면 CONNECTION 옵션에서 테이블명은 생략 가능합니다.

1
2
3
4
5
6
7
8
9
10
11
CREATE TABLE `cityholic_db`.`cart_product` (
  `id`             bigint(20)     NOT NULL AUTO_INCREMENT COMMENT '아이디',
  `users_id`     bigint(20)     unsigned NOT NULL COMMENT '고객아이디',
  `product_id`     bigint(20)     NOT NULL COMMENT '상품아이디',
  `option_code` varchar(50NOT NULL COMMENT '상품옵션코드',
  `quantity`     int(11)     NOT NULL DEFAULT '0' COMMENT '상품 개수',
 
  PRIMARY KEY (`users_id`,`product_id`,`option_code `),
  UNIQUE KEY `id_UNIQUE` (`id`)
ENGINE=FEDERATED DEFAULT CHARSET=utf8 COMMENT='카트에 담긴 상품'
CONNECTION='[서버명]/cart_product';
cs


>> . 이상 모든 설정을 완료 했다면 로컬에서 원격지의 Table을 로컬 테이블 처럼 사용 가능합니다. select, insert, update, delete 모두 가능 합니다.


+ Recent posts