물리적으로 다른 서버의 디비의 테이블을 조회하고 싶은 경우가 있을때 , 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/테이블명';
'mysql' 카테고리의 다른 글
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements (1) | 2023.11.21 |
---|---|
phpMyAdmin 설치 방법 (2023년 9월) (0) | 2023.09.25 |
[mysql] order by 특정 값으로 정렬하기 (0) | 2023.09.08 |
mysql error 1267 (HY000): Illegal mix of collations 해결 방법 (0) | 2023.09.01 |
[Mysql] Ubuntu linux Mysql 설치 및 초기 설정 (0) | 2023.09.01 |