2017년 1월 24일 화요일

MySQL or MariaDB FederatedX Storage Engine

MySQL 계열에서 DB Link 기능 같은걸 찾아 보다 찾은 Storage Engine 이다.
MySQL 은 Federated Engine 이 기본적으로 탑재 되어 있다. 그리고 X 는 MariaDB에서 사용하는 확장 판이다.
또한 타겟에서 끌고 올때 소스의 버퍼에 올리기 때문에 통으로나 데이터량이 많으면 소스에 스와핑이 생기거나 OOM 이 생길 수 있다.


/**
    MySQL or MariaDB FederatedX Storage Engine 
    ( like dblink of oracle)
*/

--
-- 01. Plugin Install
--

INSTALL PLUGIN federated SONAME 'ha_federatedx.so';

# my.cnf
federated # 이부분 추가

--
-- 02. Configure
--

connection=scheme://username:password@hostname:port/database/tablename
connection=scheme://username@hostname/database/tablename
connection=scheme://username:password@hostname/database/tablename
connection=scheme://username:password@hostname/database/tablename
ex)
connection=mysql://username:password@hostname:port/database/tablename



onnection="connection_one"
connection="connection_one/table_foo"

ex)
# 사용시 table name change 안됨 
create server 'server_one' foreign data wrapper 'mysql' options
  (HOST '127.0.0.1',
  DATABASE 'db1',
  USER 'root',
  PASSWORD '',
  PORT 3306,
  SOCKET '',
  OWNER 'root');

ex)

CREATE TABLE federatedx.t1 (
  `id` int(20) NOT NULL,
  `name` varchar(64) NOT NULL default ''
  )
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
CONNECTION='server_one';

# table name change 가능
CREATE TABLE test_table ENGINE=FEDERATED CONNECTION='mysql://root@127.0.0.1:9306/federatedx/test_federatedx';

--
-- 03. explain
-- ( 원격 테이블도 인덱스를 사용할수 있다.)

+------+-------------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
| id   | select_type | table      | type  | possible_keys | key     | key_len | ref   | rows | filtered | Extra |
+------+-------------+------------+-------+---------------+---------+---------+-------+------+----------+-------+
|    1 | SIMPLE      | ox_clients | const | PRIMARY       | PRIMARY | 3       | const |    1 |   100.00 |       |
+------+-------------+------------+-------+---------------+---------+---------+-------+------+----------+-------+

--
-- 99. 작업 절차
--

INSTALL PLUGIN federated SONAME 'ha_federatedx.so';

create database if not exists dblink;

grant all on dblink.* to `root`@`localhost`;

use dblink;

create server 'server_one' foreign data wrapper 'mysql' options
(
    HOST '127.0.0.1',
    DATABASE 'db1',
    USER 'root',
    PASSWORD '',
    PORT 3306,
    SOCKET '',
    OWNER 'root'
);

create table if not exists dblink.tbl_link_01
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
CONNECTION='server_one';

create table if not exists dblink.tbl_link_02
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
CONNECTION='mysql://root:aaaa@127.0.0.1:9306/federatedx/test_federatedx';

CREATE TABLE dblink.tbl_link_03
(
  id     int(20) NOT NULL auto_increment,
  name   varchar(32) NOT NULL default '',
  other  int(20) NOT NULL default '0',
  PRIMARY KEY  (id),
  KEY name (name),
  KEY other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://root@127.0.0.1:9306/federatedx/test_federatedx';


댓글 없음:

댓글 쓰기