mysql_fdw 확장을 사용하여 MySQL 데이터베이스 작업 - Amazon Aurora

mysql_fdw 확장을 사용하여 MySQL 데이터베이스 작업

Aurora PostgreSQL DB 클러스터에서 MySQL 호환 데이터베이스에 액세스하려면 mysql_fdw 확장을 설치하고 사용하면 됩니다. 이 외부 데이터 래퍼를 사용하면 RDS for MySQL, Aurora MySQL, MariaDB 및 기타 MySQL 호환 데이터베이스로 작업할 수 있습니다. Aurora PostgreSQL DB 클러스터에서 MySQL 데이터베이스로의 연결은 클라이언트 및 서버 구성에 따라 최선의 방식으로 암호화됩니다. 그러나 원하는 경우 암호화를 적용할 수 있습니다. 자세한 내용은 확장에서 전송 중 암호화 사용 단원을 참조하십시오.

mysql_fdw 확장은 Amazon Aurora PostgreSQL 버전 15.4, 14.9, 13.12, 12.16 이상에서 지원됩니다. RDS for PostgreSQL DB에서 MySQL 호환 데이터베이스 인스턴스의 테이블에 대한 선택, 삽입, 업데이트 및 삭제를 지원합니다.

mysql_fdw 확장을 사용하도록 Aurora PostgreSQL DB 설정

Aurora PostgreSQL DB 클러스터에서 mysql_fdw 확장을 설정하려면 DB 클러스터에서 확장을 로드한 다음 MySQL DB 인스턴스에 대한 연결 지점을 생성해야 합니다. 이 작업을 수행하려면 MySQL DB 인스턴스에 대한 다음과 같은 세부 정보가 필요합니다.

  • 호스트 이름 또는 엔드포인트. Aurora MySQL DB 클러스터의 경우 콘솔을 사용하여 엔드포인트를 찾을 수 있습니다. 연결 및 보안(Connectivity & security) 탭을 선택하고 '엔드포인트 및 포트(Endpoint and port)' 섹션을 살펴봅니다.

  • 포트 번호. MySQL의 기본 포트 번호는 3306입니다.

  • 데이터베이스 이름 DB 식별자입니다.

또한 MySQL 포트 3306의 액세스 제어 목록(ACL) 또는 보안 그룹에 대한 액세스를 제공해야 합니다. Aurora PostgreSQL DB 클러스터와 Aurora 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 데이터베이스 서버에 액세스하려면
  1. rds_superuser 역할이 있는 계정을 사용하여 PostgreSQL DB 인스턴스에 연결합니다. Aurora PostgreSQL DB 클러스터를 생성할 때 기본값을 수락한 경우 사용자 이름은 postgres이고 다음과 같이 psql 명령줄 도구를 사용하여 연결할 수 있습니다.

    psql --host=your-DB-instance.aws-region.rds.amazonaws.com --port=5432 --username=postgres –-password
  2. 다음과 같이 mysql_fdw 확장을 설치합니다.

    postgres=> CREATE EXTENSION mysql_fdw; CREATE EXTENSION

Aurora PostgreSQL DB 클러스터에 확장을 설치한 후 MySQL 데이터베이스에 대한 연결을 제공하는 외부 서버를 설정합니다.

외부 서버를 생성하려면

Aurora PostgreSQL DB 클러스터에서 작업을 수행합니다. 이러한 단계에서는 postgres와 같은 rds_superuser 권한이 있는 사용자로 연결되어 있다고 가정합니다.

  1. Aurora 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
  2. 적절한 사용자에게 외부 서버에 대한 액세스 권한을 부여합니다. 관리자가 아닌 사용자, 즉 rds_superuser 역할이 없는 사용자여야 합니다.

    postgres=> GRANT USAGE ON FOREIGN SERVER mysql-db to user1; GRANT

PostgreSQL 사용자는 외부 서버를 통해 MySQL 데이터베이스에 대한 자체 연결을 생성하고 관리합니다.

예: Aurora PostgreSQL에서 Aurora MySQL 데이터베이스로 작업

Aurora PostgreSQL DB 인스턴스에 간단한 테이블이 있다고 가정합니다. Aurora PostgreSQL 사용자는 해당 테이블에 대해 (SELECT), INSERT, UPDATE, DELETE 항목을 쿼리하려고 합니다. 앞의 절차에서 설명한 대로 RDS for PostgreSQL DB 인스턴스에 mysql_fdw 확장이 생성되었다고 가정합니다. rds_superuser 권한이 있는 사용자로 RDS for PostgreSQL DB 인스턴스에 연결한 후 다음 단계를 진행할 수 있습니다.

  1. Aurora PostgreSQL DB 인스턴스에서 외부 서버를 생성합니다.

    test=> CREATE SERVER mysqldb FOREIGN DATA WRAPPER mysql_fdw OPTIONS (host 'your-DB.aws-region.rds.amazonaws.com', port '3306'); CREATE SERVER
  2. rds_superuser 권한이 없는 사용자(예: user1)에게 사용 권한을 부여합니다.

    test=> GRANT USAGE ON FOREIGN SERVER mysqldb TO user1; GRANT
  3. user1으로 연결한 다음 MySQL 사용자에 대한 매핑을 생성합니다.

    test=> CREATE USER MAPPING FOR user1 SERVER mysqldb OPTIONS (username 'myuser', password 'mypassword'); CREATE USER MAPPING
  4. MySQL 테이블에 연결된 외부 테이블을 만듭니다.

    test=> CREATE FOREIGN TABLE mytab (a int, b text) SERVER mysqldb OPTIONS (dbname 'test', table_name ''); CREATE FOREIGN TABLE
  5. 외부 테이블에 대한 간단한 쿼리를 실행합니다.

    test=> SELECT * FROM mytab; a | b ---+------- 1 | apple (1 row)
  6. 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)

확장에서 전송 중 암호화 사용

Aurora 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

ALTER USER 'user'@'%' REQUIRE SSL;

GRANT USAGE ON *.* to 'user'@'%' REQUIRE SSL;

mysql_fdw 확장에 대한 자세한 내용은 mysql_fdw 설명서를 참조하세요.