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(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='[서버명]/cart_product'; | cs |
>> . 이상 모든 설정을 완료 했다면 로컬에서 원격지의 Table을 로컬 테이블 처럼 사용 가능합니다. select, insert, update, delete 모두 가능 합니다.
'Database & Data > MYSQL' 카테고리의 다른 글
MySQL Scheduler(Agent) 설정 방법 (0) | 2020.08.29 |
---|---|
MySQL 대량 ROW 조회 결과 파일 저장 및 불러오기 (0) | 2020.08.26 |
MySQL / MariaDB Slow Query Log 활성화 및 로그를 테이블에 기록 (0) | 2020.07.07 |
MySQL Index 정보 조회 (key column 을 한줄로 표시) (0) | 2020.07.07 |
MySQL 복원 (0) | 2020.02.22 |