간단 설명
Federated란 MySQL에서 제공하는 엔진 중 하나이며, 오라클의 DB Link와 유사하다.
Federated 엔진을 사용하면 원격 서버의 데이터를 로컬 서버에서 데이터가 CRUD가 가능하다.
동작 방식
원격 서버와 로컬 서버에 동일한 컬럼을 가진 table을 각각 생성한다.
원격 서버와 로컬 서버에 테이블 정의가 담긴 .frm 파일이 저장되고
원격 서버에만 데이터 정보가 담긴 데이터 파일이 존재한다.
| 1. 로컬 서버에서 원격 테이블을 참조하는 쿼리를 수행 2. 쿼리가 MySQL 클라이언트 API를 통해 원격 서버로 전송 3. 원격 서버에서 쿼리를 수행하고 로컬 서버는 쿼리가 생성하는 모든 결과를 검색 |

사용 방법
1. 활성화 되어 있는 지 확인
SHOW ENGINES;

2. Federated 활성화
- 리눅스의 경우 my.cnf / 윈도우의 경우 my.ini 파일에 federated 를 추가
[mysqld]
federated
3. mysql restart 후 활성화 확인
systemctl restart mysqld
4. 원격 서버와 동일한 테이블 생성
* 원격 서버가 분리되어 있는 경우 로컬 서버 -> 원격 서버 접근 가능하도록 방화벽이 오픈되어 있어야 함
* CONNECTION = 'mysql://아이디:패스워드@IP 또는 Domain:PORT/DB명/원격TABLE명' 정보를 추가하여 테이블 생성
* 원격 서버의 테이블 컬럼이 변경되면 로컬 서버의 federated 테이블을 drop 후 재생성해야 함
-- 원격 서버에 아래와 같은 테이블이 있을 경우
create table test (
a number,
b varchar(10)
);
-- 로컬 서버에서는 connection 정보를 추가해서 생성
create table test (
a number,
b varchar(10)
) CONNECTION = 'mysql://아이디:패스워드@IP 또는 Domain:PORT/DB명/원격TABLE명'
5. 로컬 서버에서 연동 됐는 지 테스트
insert into test values (10, 'test');
select * from test;
주의점
로컬 서버에는 원격 서버의 index가 없으므로 로컬 서버에서 select 할 경우 시간이 더 걸릴 수도 있음
대용량 데이터가 있는 테이블의 경우에는 주의해서 사용해야 함
에러 발생 및 대처 방법
Incorrect datetime value: '2020-01-01 02:00:00' for column
-> 내가 경험한 경우에는 로컬 서버와 원격 서버의 DB에 설정된 시간이 달라 문제 발생
-> 아래와 같이 해결
만약 mysql에 접속해서 set time_zone='Asia/Seoul' 수행 시 아래 에러가 발생한다면
Unknown or incorrect time zone: 'Asia/Seoul'
DBMS에 서울 time_zone이 생성되어 있지 않아서 발생
아래 정리가 굉장히 잘 되어 있어서 '2번 방법' 참고
https://jwkim96.tistory.com/23
[MySQL] mysql server timezone 한국으로 설정하기.
timezone이란? (넘어가실 분들은 여기클릭) <미국의 timezone> 한국은 표준시(대한민국 표준시 - KST)를 하나의 시간대(timezone)만 사용하지만 미국처럼 영토가 넓은 국가들은 timezone이 여러개 있습니다.
jwkim96.tistory.com
설정이 완료되면 아래와 같이 설정 후 재부팅(영구적인 방법)
or 재부팅이 어려운 상황이면 set time_zone='Asia/Seoul' 로 설정(임시적인 방법. 재부팅하면 설정된 옵션이 날아가므로 위의 방법을 추천)
- 리눅스의 경우 my.cnf / 윈도우의 경우 my.ini 파일에 federated 를 추가
default_time_zone=Asia/Seoul
참고 자료
https://dev.mysql.com/doc/refman/5.7/en/federated-description.html
'RDBMS > MySQL' 카테고리의 다른 글
| MySQL FLUSH PRIVILEGES 동작 (0) | 2022.02.14 |
|---|---|
| MySQL bin log 삭제 방법 (0) | 2021.10.19 |
| MySQL SSL 설정 끄기. have_openssh, have_ssl DISABLED (0) | 2021.10.19 |
| MySQL 주기적으로 Replication 확인 방법 (0) | 2021.08.12 |
| [장애 대응] ERROR! MySQL Is Running But PID File Could Not Be Found (0) | 2021.08.10 |