mysql_fdw 확장을 사용하여 MySQL 데이터베이스 작업
RDS for PostgreSQL DB 인스턴스에서 MySQL 호환 데이터베이스에 액세스하려면 mysql_fdw
확장을 설치하고 사용하면 됩니다. 이 외부 데이터 래퍼를 사용하면 RDS for MySQL, Aurora MySQL, MariaDB 및 기타 MySQL 호환 데이터베이스로 작업할 수 있습니다. RDS for PostgreSQL DB 인스턴스에서 MySQL 데이터베이스로의 연결은 클라이언트 및 서버 구성에 따라 최선의 방식으로 암호화됩니다. 그러나 원하는 경우 암호화를 적용할 수 있습니다. 자세한 내용은 확장에서 전송 중 암호화 사용 단원을 참조하십시오.
mysql_fdw
확장은 Amazon RDS for PostgreSQL 버전 14.2, 13.6 이상에서 지원됩니다. RDS for PostgreSQL DB에서 MySQL 호환 데이터베이스 인스턴스의 테이블에 대한 선택, 삽입, 업데이트 및 삭제를 지원합니다.
주제
mysql_fdw 확장을 사용하도록 RDS for PostgreSQL DB 설정
RDS for PostgreSQL DB 인스턴스에서 mysql_fdw
확장을 설정하려면 DB 인스턴스에서 확장을 로드한 다음 MySQL DB 인스턴스에 대한 연결 지점을 생성해야 합니다. 이 작업을 수행하려면 MySQL DB 인스턴스에 대한 다음과 같은 세부 정보가 필요합니다.
호스트 이름 또는 엔드포인트. RDS for MySQL DB 인스턴스의 경우 콘솔을 사용하여 엔드포인트를 찾을 수 있습니다. 연결 및 보안(Connectivity & security) 탭을 선택하고 '엔드포인트 및 포트(Endpoint and port)' 섹션을 살펴봅니다.
포트 번호. MySQL의 기본 포트 번호는 3306입니다.
데이터베이스 이름 DB 식별자입니다.
또한 MySQL 포트 3306의 액세스 제어 목록(ACL) 또는 보안 그룹에 대한 액세스를 제공해야 합니다. RDS for PostgreSQL DB 인스턴스와 RDS for MySQL DB 인스턴스에 포트 3306에 대한 액세스 권한이 있어야 합니다. 액세스가 올바르게 구성되지 않은 경우 MySQL 호환 테이블에 연결하려고 하면 다음과 비슷한 오류 메시지가 표시됩니다.
ERROR: failed to connect to MySQL: Can't connect to MySQL server on 'hostname
.aws-region
.rds.amazonaws.com:3306' (110)
다음 절차에서는 rds_superuser
계정으로 외부 서버를 생성합니다. 그런 다음 특정 사용자에게 외부 서버에 대한 액세스 권한을 부여합니다. 그러면 이러한 사용자가 MySQL DB 인스턴스로 작업하기 위해 적절한 MySQL 사용자 계정에 대한 자체 매핑을 생성합니다.
mysql_fdw로 MySQL 데이터베이스 서버에 액세스하려면
rds_superuser
역할이 있는 계정을 사용하여 PostgreSQL DB 인스턴스에 연결합니다. RDS for PostgreSQL DB 인스턴스를 생성할 때 기본값을 수락한 경우 사용자 이름은postgres
이고 다음과 같이psql
명령줄 도구를 사용하여 연결할 수 있습니다.psql --host=
your-DB-instance
.aws-region
.rds.amazonaws.com --port=5432 --username=postgres –-password다음과 같이
mysql_fdw
확장을 설치합니다.postgres=>
CREATE EXTENSION mysql_fdw;
CREATE EXTENSION
RDS for PostgreSQL DB 인스턴스에 확장을 설치한 후 MySQL 데이터베이스에 대한 연결을 제공하는 외부 서버를 설정합니다.
외부 서버를 생성하려면
RDS for PostgreSQL DB 인스턴스에서 작업을 수행합니다. 이러한 단계에서는 postgres
와 같은 rds_superuser
권한이 있는 사용자로 연결되어 있다고 가정합니다.
RDS for PostgreSQL DB 인스턴스에서 외부 서버를 생성합니다.
postgres=>
CREATE SERVER
mysql-db
FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'db-name.111122223333
.aws-region
.rds.amazonaws.com', port '3306');CREATE SERVER
적절한 사용자에게 외부 서버에 대한 액세스 권한을 부여합니다. 관리자가 아닌 사용자, 즉
rds_superuser
역할이 없는 사용자여야 합니다.postgres=>
GRANT USAGE ON FOREIGN SERVER
mysql-db
touser1
;GRANT
PostgreSQL 사용자는 외부 서버를 통해 MySQL 데이터베이스에 대한 자체 연결을 생성하고 관리합니다.
예: RDS for PostgreSQL에서 RDS for MySQL 데이터베이스로 작업
RDS for PostgreSQL DB 인스턴스에 간단한 테이블이 있다고 가정합니다. RDS for PostgreSQL 사용자는 해당 테이블에 대해 (SELECT
), INSERT
, UPDATE
, DELETE
항목을 쿼리하려고 합니다. 앞의 절차에서 설명한 대로 RDS for PostgreSQL DB 인스턴스에 mysql_fdw
확장이 생성되었다고 가정합니다. rds_superuser
권한이 있는 사용자로 RDS for PostgreSQL DB 인스턴스에 연결한 후 다음 단계를 진행할 수 있습니다.
RDS for PostgreSQL DB 인스턴스에서 외부 서버를 생성합니다.
test=>
CREATE SERVER
mysqldb
FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'your-DB
.aws-region
.rds.amazonaws.com', port '3306');CREATE SERVER
rds_superuser
권한이 없는 사용자(예:user1
)에게 사용 권한을 부여합니다.test=>
GRANT USAGE ON FOREIGN SERVER mysqldb TO user1;
GRANT
user1
으로 연결한 다음 MySQL 사용자에 대한 매핑을 생성합니다.test=>
CREATE USER MAPPING FOR
user1
SERVER mysqldb OPTIONS (username 'myuser
', password 'mypassword
');CREATE USER MAPPING
MySQL 테이블에 연결된 외부 테이블을 만듭니다.
test=>
CREATE FOREIGN TABLE
mytab
(a int, b text) SERVER mysqldb OPTIONS (dbname 'test', table_name '');CREATE FOREIGN TABLE
외부 테이블에 대한 간단한 쿼리를 실행합니다.
test=>
SELECT * FROM mytab;
a | b ---+------- 1 | apple (1 row)
MySQL 테이블에서 데이터를 추가, 변경 및 제거할 수 있습니다. 예를 들면 다음과 같습니다.
test=>
INSERT INTO mytab values (2, 'mango');
INSERT 0 1
SELECT
쿼리를 다시 실행하여 결과를 확인합니다.test=>
SELECT * FROM mytab ORDER BY 1;
a | b ---+------- 1 | apple 2 | mango (2 rows)
확장에서 전송 중 암호화 사용
RDS for PostgreSQL에서 MySQL에 대한 연결은 기본적으로 전송 중 암호화(TLS/SSL)를 사용합니다. 그러나 클라이언트와 서버 구성이 다를 경우 연결이 암호화되지 않은 상태로 폴백됩니다. RDS for MySQL 사용자 계정에서 REQUIRE SSL
옵션을 지정하여 나가는 모든 연결에 대해 암호화를 적용할 수 있습니다. 이와 동일한 접근 방식이 MariaDB 및 Aurora MySQL 사용자 계정에서도 작동합니다.
REQUIRE SSL
로 구성된 MySQL 사용자 계정의 경우 보안 연결을 설정할 수 없으면 연결 시도가 실패합니다.
기존 MySQL 데이터베이스 사용자 계정에 암호화를 적용하려면 ALTER USER
명령을 사용할 수 있습니다. 구문은 다음 표에 나온 대로 MySQL 버전에 따라 다릅니다. 자세한 내용은 MySQL 참조 매뉴얼의 ALTER USER
MySQL 5.7, MySQL 8.0 | MySQL 5.6 |
---|---|
|
|
mysql_fdw
확장에 대한 자세한 내용은 mysql_fdw