MySQL에 FEDERATED engine 추가
원본 링크 : http://blog.weirdx.io/post/3503
데이터베이스 엔진 설정
FEDERATED 스토리지 엔진을 사용하면 리플리케이션이나 클러스터 기술을 이용하지 않고도 원격의 MySQL 데이터베이스에 접근할 수 있다. 서비스 운영을 위해 여러 데이터베이스를 사용하는데, 한 데이터베이스의 데이터를 다른 데이터베이스들이 참조하여 사용할 때 활용할 수 있다. Oracle의 DBLink와 유사한 기능이라고 한다.
FEDERATED 엔진은 MySQL에 기본으로 설정되어 있지 않기 때문에 이를 사용하기 위해서는 별도의 작업이 필요하다. 검색을 해보면 처음에 설치할 때 부터 –with-federated-storage-engine 옵션을 주어야 한다는 등의 이야기 등이 있지만, 실제로는 재설치를 하거나 할 필요는 없다.
mysql 에 root 로 접속해서 아래 명령어를 입력한다.
install plugin federated soname 'ha_federated.so'
실제로 DB에 접속해서 해보면 아래와 같이 추가된다.
mysql> show engines; +-------------+---------+------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +-------------+---------+------------------------------------------------------------+--------------+------+------------+ | DAMO_MYISAM | YES | DAmo storage engine | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | MyISAM | YES | Default engine as of MySQL 3.23 with great performance | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | DAMO_INNODB | YES | DAmo storage engine | YES | NO | NO | +-------------+---------+------------------------------------------------------------+--------------+------+------------+ 7 rows in set (0.00 sec) mysql> install plugin federated soname 'ha_federated.so'; Query OK, 0 rows affected, 1 warning (0.03 sec) mysql> show engines; +-------------+---------+------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +-------------+---------+------------------------------------------------------------+--------------+------+------------+ | DAMO_MYISAM | YES | DAmo storage engine | NO | NO | NO | | FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL | | CSV | YES | CSV storage engine | NO | NO | NO | | MyISAM | YES | Default engine as of MySQL 3.23 with great performance | NO | NO | NO | | InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | | DAMO_INNODB | YES | DAmo storage engine | YES | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | +-------------+---------+------------------------------------------------------------+--------------+------+------------+ 8 rows in set (0.01 sec)
이제 show engine 을 해보면 목록에서 FEDERATED Engine 이 나타나지만 꺼져있는 상태이다.
/etc/my.cnf 를 열어 [mysqld] 아래에 federated 라는 단어를 추가한다.
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 federated # 이부분 추가
MySQL을 다시 실행시킨 후 다시 show engines 를 하면 FEDERATED Engine 이 사용가능하게 된 것을 확인할 수 있다.
테이블 작업
- 원본 테이블 예제
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='카트에 담긴 상품';
- 대상 테이블 생성
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';
사용시 주의점
- 반드시 #원본테이블 처럼, 대상이 되는 테이블이 먼저 존재해야 한다.
- Transaction은 지원되지 않는다.
- #원본테이블의 데이터를 제외한 필드명/타입/구조 등의 변경 사항은 #FEDERATED 된 테이블에 적용이 되지 않기 때문에, 수동으로 변경해 주어야 한다.
- Query Cache는 이용할 수 없다.
- !!!!! 중요 !!!!! SHOW CREATE TABLE #FEDERATED된 테이블; 입력시 #원본테이블로의 접속정보가 고스란히 노출 되므로, 주의가 요구된다.
참조링크
로그인하면 댓글을 남길 수 있습니다.