-. FEDERATED 엔진이란

FEDERATED 스토리지 엔진을 사용하면 리플리케이션이나 클러스터 기술을 이용하지 않고도 원격의 MySQL 데이터베이스에 접근할 수 있음
서비스 운영을 위해 여러 데이타베이스를 사용하는데, 한 데이터베이스의 데이터를 다른 데이터베이스들이 참조하여 사용할 때 활용할 수 있음
Oracle의 DBLink와 유사한 기능
출처: http://hyunki1019.tistory.com/67 [Louis.Kim 의 제 3막]
 

-. FEDERATED 엔진 특징

1) select, insert, delete, update, truncate 지원(insert on duplicated key update 는 지원하지 않음)
2) DDL 지원 X => remote db에서 ddl 수행해도 local db에선 수행 안됨
3) 인덱스 지원 
4) 트랜잭션 지원(federated => 트랜잭션 지원 x), ,row-level lock 지원
 
 

-. 설치방법

=>DB 커맨드로 플러그인 설치
* ha_federated.so 설치 시 트랜잭션 / savepoints 미지원 엔진
* ha_federatedx.so 설치 시 트랜잭션 / savepoints 지원 엔진
 
mysql> install soname 'ha_federated.so';
Query OK, 0 rows affected (0.03 sec)
 
mysql> show engines;
+--------------------+---------+--------------------------------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                                          | Transactions | XA   | Savepoints |
+--------------------+---------+--------------------------------------------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | YES     | Federated MySQL storage engine                                                                   | NO           | NO   | NO         |
+--------------------+---------+--------------------------------------------------------------------------------------------------+--------------+------+------------+
 
 
mysql> install soname 'ha_federatedx.so';
Query OK, 0 rows affected (0.00 sec)
 
mysql> show engines;
+--------------------+---------+--------------------------------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                                          | Transactions | XA   | Savepoints |
+--------------------+---------+--------------------------------------------------------------------------------------------------+--------------+------+------------+
| FEDERATED          | YES     | FederatedX pluggable storage engine                                                              | YES          | NO   | YES        |
+--------------------+---------+--------------------------------------------------------------------------------------------------+--------------+------+------------+
 
 

 

-. FEDERATED ENGINE TABLE 생성방법

 
1) URL을 이용한 FEDERATED table 생성(원격지의 형식과 동일하게 생성)
 
CREATE TABLE fed_test.`test123` (
`incre_test` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`incre_cd` VARCHAR(30) NULL DEFAULT NULL,
`incre_nm` VARCHAR(30) NULL DEFAULT NULL,
PRIMARY KEY (`incre_test`)
)engine=federated default charset=utf8 
connection='mysql://root:이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다.:1111/test/testdb' COLLATE='utf8_general_ci';
 
 => 11.111.111.111:111 DB서버에 root/test123@ 으로 접속하여
 test 스키마의 testdb 테이블 정보를 가져오겠다는 의미
 
* connect 구문 
mysql://원격지접속ID:패스워드@원격지DB의IP:포트/DB명/테이블명'
 
**반드시 해당 테이블에 필요한 작업에 대한 권한이 모두 부여가 완료된 뒤 생성해야 함.
서버 생성 후에는 해당 계정에 권한 부여해도 적용되지 않음.
 

 

-. Row-level lock 실습 예제

1. 실습 환경
 
1) remote db table 생성
 
CREATE TABLE fed_test_remote.`test` (
`incre_test` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`incre_cd` VARCHAR(30) NULL DEFAULT NULL,
`incre_nm` VARCHAR(30) NULL DEFAULT NULL,
PRIMARY KEY (`incre_test`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=15
;
 
 
2) local db table 생성
 
SQL > CREATE TABLE fed_test_local.`test` (
`incre_test` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`incre_cd` VARCHAR(30) NULL DEFAULT NULL,
`incre_nm` VARCHAR(30) NULL DEFAULT NULL,
PRIMARY KEY (`incre_test`)
)
COLLATE='utf8_general_ci'
ENGINE=federated
connection='mysql://root:이 이메일 주소가 스팸봇으로부터 보호됩니다. 확인하려면 자바스크립트 활성화가 필요합니다.:1111/fed_test_remote/test' COLLATE='utf8_general_ci';
;
 
3) 데이터 입력
 
 
2. 시나리오

실행 순서

local

remote

1

begin

 

2

 

begin

3

update fed_test_local.test123

set incre_nm='BBBBBBBBBBB'

where incre_cd='ddd'

 

4

 

update fed_test_remote.test123

set incre_nm='FFFFFF'

where incre_cd='ddd'

5

commit

 

6

 

commit

 
4번 실행 후 상황(remote에서 조회)
 
--> 정상적으로 row level lock 지원함을 확인