티스토리 뷰

EtC

[EtC] mysql_fdw 설치

freecatz 2025. 12. 26. 18:06
728x90

 

개인 서버에 기존에는 MySQL을 주로 사용하였지만, PostgreSQL을 추가로 설치 하였다.

 

그러던 중에 기존 데이터의 이관을 고민 하다가 mysql_fdw 를 이용하기 위해 설치 하는 과정을 기록하게 되었다.

 

MySQL 9, PostgreSQL 17 서버는 이미 구성이 되어 있고, 두 데이터베이스에서 기본적으로 사용할 준비가 되어 있는 상태라 가정 하고 시작 한다.

 

* 참고 : 본인의 경우와 같이 서버에 돈을 많이 쓸 수 없어 MySQL, PostgreSQL 이 하나의 서버에서 동작중이라면 MySQL 에서 사용자 계정 생성시 localhost 에서 접근 가능한 계정을 생성 하는 것을 추천 한다.

 

 

MySQL 에서 테스트용 테이블을 생성 한다. 이미 기존에 테이블이 있다면 아래의 참고 사항만 확인 후 다음 단계로 진행 한다.

CREATE TABLE IF NOT EXISTS TB_TEST (
      IDX INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT ' 테스트용 고유 순번'
    , MSG VARCHAR(100) NOT NULL COMMENT ' 테스트용 메세지'
) DEFAULT CHARSET=UTF8 COMMENT='테스트용 테이블';

 

* 참고 : mysql_fdw 를 이용하여 insert 를 실행 하기 위해서는 테이블 생성시 PRIMARY KEY 가 설정 되어있어야 한다고 한다.

 

 

PostgreSQL 서버에 필요한 패키지를 설치 한다.

 

root@database:~# apt-cache search postgresql-17-mysql-fdw
postgresql-17-mysql-fdw - Postgres 17 Foreign Data Wrapper for MySQL
postgresql-17-mysql-fdw-dbgsym - debug symbols for postgresql-17-mysql-fdw
root@database:~# apt install postgresql-17-mysql-fdw

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
... 중략...
Processing triggers for postgresql-common (287.pgdg12+1) ...
Building PostgreSQL dictionaries from installed myspell/hunspell packages...
Removing obsolete dictionary files:

root@database:~#  service postgresql restart

root@database:~# su - postgres

 

 

 

이제 PostgreSQL 로 넘어 와서 아래의 내용들을 실행 한다.

 

postgres@database:~$ psql

psql (17.7 (Debian 17.7-3.pgdg12+1))
도움말을 보려면 "help"를 입력하십시오.

postgres=# create extension mysql_fdw;
CREATE EXTENSION
postgres=# create server mysql9 foreign data wrapper mysql_fdw options ( host 'localhost', port '3306' );

postgres=# create user mapping for developer server mysql9 options ( username 'tester', password 'test!@#$' );

postgres=# create schema if not exists mysql9;

postgres=# import foreign schema developer from server mysql9 into mysql9;

postgres=# insert into mysql9."TB_TEST"( "MSG" ) values ( 'TEST');

 

 

이제 다시 MySQL 로 와서 데이터가 insert 되었는지 확인 한다. 물론, PostgreSQL 에서 쿼리를 실행 하여 확인 하여도 된다.

 

mysql> select * from TB_TEST;
+-----+------+
| IDX | MSG  |
+-----+------+
|   1   | TEST  |
+-----+------+
1 row in set (0.007 sec)

mysql> 

 

PostgreSQL 에서 MySQL의 테이블에 데이터를 정상적으로 insert 하였다.

 

 

PostgreSQL 의 FDW(Foreign Data Wrapper) 를 이용하기 위해서는 약간의 제약 사항이 있기는 하지만, PostgreSQL 외 이기종간의 데이터베이스를 외부 솔루션 없이 연결 하여 사용 할 수 있다는 것과 속도가 느린 Open Query 를 이용 하는 dblink 보다 속도가 빠르고, 이기종 데이터베이스의 테이블에 join 을 걸어 사용 할 수 있다는 것도 매우 좋다고 본다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함