mysql

MYSQL FEDERATED 사용방법 (다른 서버 디비의 테이블 조회, 연결)

은둔한량 2024. 8. 7. 17:55
반응형

물리적으로 다른 서버의 디비의 테이블을 조회하고 싶은 경우가 있을때 , federated 라는 엔진을 이용하면 조회하고 싶은 테이블과 똑같은 테이블을 생성하고 디비를 연결시키는 방법이 있다.

같은 서버일 경우 데이터베이스명만 테이블앞에 .(쩜)을 찍어서 사용하면 되는데 물리적으로 다른 서버일 경우에는 참 난감했다. 그런데 federated 라는 기능이 있다는것을 검색해보고 처음 알았다. 우와....!!

1. federated 가 지원되는지 확인

show engines;

show engines로 확인을 하면 지원되지 않는다.

 

2.  mysql.cnf 에 설정

리눅스 일 경우 /etc/mysql/  밑에  mysql.cnf  파일을 찾아본다.

윈도우일 경우에는 한참을 찾다가 보니  C:\ProgramData\MySQL\MySQL Server 8.1
저는 8.1을 설치를 해서 저 폴더 안에 my.ini 파일을 관리자 권한으로 열고 수정을 해줬다.

 

[mysqld]
federated

 

* 꼭 mysqld 밑에 넣어야 한다. 아니면 적용이 되지 않는다.

저렇게 추가를 하고 mysql 재기동

윈도우 일 경우 service 에서 다시 시작을 했다.

 

리눅스 일 경우 service mysql restart

다시 show engines로 확인하면 아래돠 같이 지원에 YES 가 딱하니 뜬다.. 이제 준비 완료..!!

3. 테이블 가져오기

가져오고자 하는 테이블의 create 쿼리문을 그대로 복사 후

ENGINE=FEDERATED 으로 변경하고 맨 끝에 connection 만 붙여준다.

CREATE TABLE 테이블 (

  컬럼.....
 
) ENGINE=FEDERATED DEFAULT CHARSET=latin1 
CONNECTION='mysql://아이디:패스워드@ip:port/DB명/연결테이블명';

이렇게 생성하면 가져오고자하는 테이블이 딱하니 데이터베이스에 들어와 있다. ^^

 

주의 사항


원본 디비에서 조회하는 쿼리를 그래도 사용 가능

수정 / 삭제 / 추가는 안되고 오로지 조회 용도로만 사용 가능

 

 

 

패스워드에 @가 들어간 경우 (나머지는 그냥 실행 혹은 \ 를 앞에 붙이면 됨) 는 계속 포맷이 맞지 않다고 아래와 같은 에러가 발생한다.

Can’t create federated table. The data source connection string ‘mysql://~~’ is not in the correct format

 

따라서 아래와 같이 커넥션 정보를 미리 입력 후 사용해도 된다.

CREATE SERVER sampleConnection
FOREIGN DATA WRAPPER mysql
OPTIONS (
USER '아이디',
PASSWORD '패스워드',
HOST 'ip',
PORT port,
DATABASE 'DB명');

 

CREATE TABLE 테이블명 (
  컬럼...
) ENGINE=FEDERATED DEFAULT CHARSET=latin1 
CONNECTION='sampleConnection/테이블명';

 

 

반응형