Source DB 및 Target DB 접속 설정
    • PDF

    Source DB 및 Target DB 접속 설정

    • PDF

    기사 요약

    마이그레이션 전에 Source DB와 Target DB의 설정을 확인하고 데이터베이스 연결을 위한 접속 정보를 설정합니다. 다음 중 마이그레이션하려는 상황에 알맞은 경우를 선택하여 설정 방법을 확인해 주십시오.

    사전 준비

    Source DB와 Target DB를 연결하기 전에 다음 사전 작업을 차례대로 실행해 주십시오.

    1. 네이버 클라우드 플랫폼 콘솔에서 Source DB가 생성된 VPC에 Target DB를 생성해 주십시오.

      • Target DB는 Source DB와 DBMS 종류가 같아야 합니다.
      • Source DB와 Major 버전이 동일한 DBMS 버전이 권장됩니다.
      • Target DB 생성 방법에 대한 자세한 내용은 Cloud DB for MySQL 시작을 참고해 주십시오.
    2. Source DB 복제를 위해, Source DB의 바이너리 로그 설정을 확인해 주십시오.

      • 필수 사항: 바이너리 로그 활성화
        • log_bin의 값이 ON으로 표시되는지 확인
        • server_id 값 지정
      • 권고 사항: 바이너리 로그 보관 기간을 5일 이상으로 설정
        • 설정 변수 expire_logs_days 또는 binlog_expire_logs_seconds의 값 설정
        • 바이너리 로그 보관 기간이 마이그레이션 진행 시간보다 짧을 경우 복제 진행 시 아래와 같은 에러 메시지가 출력됩니다. 이 경우 Source DB 설정 변경 이후 마이그레이션 삭제 및 재생성이 필요합니다.
          Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'
    3. Source DB의 Character Set/Collation 및 Definer 계정을 점검해 주십시오.

      • Cloud DB for MySQL은 [utf8, utf8mb4, euckr] Character Set에 대해서만 지원합니다. Source DB상에 이 외의 설정으로 되어 있다면 변경 후 진행해 주시기 바랍니다.
      • Source DB에서 사용하는 Collation이 Target DB에서도 지원하는지 확인해 주시기 바랍니다.
        ex) 8.0 이전 버전에서는 utf8mb4_0900_ai_ci가 지원되지 않습니다.
      • Source DB 상에서 사용 중인 Definer 계정은 계정명과 허용 호스트명이 동일하게 Cloud DB for MySQL에 등록되어 있어야 마이그레이션 진행이 가능합니다.
      • Source DB Character Set 점검 쿼리
      SELECT character_set_name
      FROM information_schema.TABLES T, information_schema.COLLATION_CHARACTER_SET_APPLICABILITY CCSA
      WHERE CCSA.collation_name = T.table_collation AND TABLE_SCHEMA NOT IN ( 'information_schema', 'mysql', 'performance_schema', 'sys' ) AND CCSA.character_set_name NOT IN ( 'utf8', 'utf8mb3', 'utf8mb4', 'euckr' );
      
      SELECT DEFAULT_CHARACTER_SET_NAME
      FROM information_schema.SCHEMATA T
      WHERE SCHEMA_NAME NOT IN ( 'information_schema', 'mysql', 'performance_schema', 'sys' ) AND DEFAULT_CHARACTER_SET_NAME NOT IN ( 'utf8', 'utf8mb3', 'utf8mb4', 'euckr');
      
      • Source DB Collation 점검 쿼리
      SELECT DISTINCT (table_collation) as table_collate FROM information_schema.TABLES WHERE TABLE_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys'); 
      SELECT DISTINCT (COLLATION_CONNECTION) as table_collate FROM information_schema.views WHERE TABLE_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys'); 
      SELECT DISTINCT (COLLATION_CONNECTION) as table_collate FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys'); 
      SELECT DISTINCT (DATABASE_COLLATION) as table_collate FROM information_schema.ROUTINES WHERE ROUTINE_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys'); 
      SELECT DISTINCT (COLLATION_CONNECTION) as table_collate FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys');
      SELECT DISTINCT (DATABASE_COLLATION) as table_collate FROM information_schema.TRIGGERS WHERE TRIGGER_SCHEMA NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys');
      SELECT DISTINCT (DEFAULT_COLLATION_NAME) as table_collate FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('information_schema', 'mysql', 'performance_schema', 'sys');
      
      • Source DB Definer 계정 점검 쿼리
      SELECT DEFINER FROM information_schema.ROUTINES
      WHERE ROUTINE_SCHEMA NOT IN ( 'information_schema', 'mysql', 'performance_schema', 'sys' ) AND SECURITY_TYPE = 'DEFINER';
      
      SELECT DEFINER FROM information_schema.VIEWS
      WHERE table_schema NOT IN ( 'information_schema', 'mysql', 'performance_schema', 'sys' ) AND SECURITY_TYPE = 'DEFINER' ;
      
    4. (MySQL 5.7 에서 8.0 으로 mysqldump 방식 이용하는 경우) sql_mode 를 점검해 주십시오.

      • MySQL 5.7 버전 및 MariaDB 10.1.7 이상 버전에서 Default 값으로 지원하는 sql_mode='NO_AUTO_CREATE_USER' 설정은 MySQL 8.0 버전부터는 지원하지 않습니다.
      • 아래 점검은 mysqldump 방식으로 진행시 필요합니다. mydumper 방식을 통해 마이그레이션 진행시 sql_mode 는 Target DB 설정을 따라가므로 별도 점검이 필요치 않습니다.
      • Source DB에 해당 설정이 적용되어 있다면 아래 내용을 참고하여 조치 후 마이그레이션 진행이 필요합니다.
      • sql_mode 설정 점검 쿼리
      SELECT ROUTINE_SCHEMA, ROUTINE_NAME, SQL_MODE
      FROM information_schema.routines
      WHERE ROUTINE_SCHEMA NOT IN ('sys','mysql');
      
      SELECT TRIGGER_SCHEMA, TRIGGER_NAME, sql_mode
      FROM information_schema.triggers
      WHERE TRIGGER_SCHEMA NOT IN ('sys','mysql');
      
      SELECT @@sql_mode ; 
      
      • sql_mode 호환성 이슈 조치 방법
       - Source DB > [DB Config 관리] 에서 sql_mode='NO_AUTO_CREATE_USER'  제거 설정
       - Source DB > Procedure, Function, Trigger 를 삭제 후 재생성  
       1. Procedure, Function, Trigger 에 대해서만 drop 및 create 구문이 생성된 sql 파일 생성
          $ mysqldump -u {사용자명} -p -h {Source DB 호스트명} --set-gtid-purged=OFF --routines --triggers  --no-create-info --no-data --no-create-db --add-drop-trigger {사용자 DB} > backup.sql
       2. backup.sql 파일내 NO_AUTO_CREATE_USER 구문 모두 제거
          ex) SET sql_mode = 'STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'  => SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'
       3. 적용하기
          $ mysql -u {사용자명} -p -h {Source DB 호스트명} {사용자 DB} < backup.sql          
      

    같은 VPC 안에서 마이그레이션

    Source DB가 네이버 클라우드 플랫폼 내 VPC에 존재하고, Target DB를 같은 VPC에 생성하는 경우에 접속 정보를 설정하는 방법을 설명합니다.
    다음 절차를 차례대로 실행해 주십시오.

    1. Target DB 접속 설정

    Target DB에서 Source DB로 접속할 수 있도록 Target DB 서버에 적용된 ACG의 Outbound 규칙을 설정합니다.

    참고

    여기에서는 접속 설정에 필요한 내용만 설명합니다. ACG 설정에 관한 자세한 내용은 Server 사용 가이드의 ACG를 참고해 주십시오.

    ACG 규칙을 설정하는 방법은 다음과 같습니다.

    1. Target DB의 상세 정보에서 Target DB 서버에 적용된 ACG를 확인해 주십시오.
    2. ACG 항목의 i-dms-window을 클릭하여 ACG 화면으로 이동해 주십시오.
    3. Target DB에 적용된 ACG를 클릭한 후 [ACG 설정] 버튼을 클릭해 주십시오.
    4. [Outbound] 탭을 클릭해 주십시오.
    5. 다음 규칙을 입력한 후 [추가] 버튼을 클릭해 주십시오.
      • 프로토콜: TCP 선택
      • 목적지: Source DB가 생성된 서브넷의 IP 주소 범위 입력(<예시> 10.0.0.0/24)
      • 허용 포트: Source DB 접속 포트 입력
    6. [적용] 버튼을 클릭해 주십시오.

    2. Source DB 접속 설정

    Source DB의 접속 정보를 설정해야 합니다. Source DB에 적용된 ACG 규칙과 ACL을 설정해 주십시오.

    Source DB 서버 ACG 설정

    • Source DB 서버의 방화벽(ACG)을 설정하여 Target DB에서 접속할 수 있도록 설정해야 합니다. 다음 트래픽을 허용하도록 Source DB 서버에 적용된 ACG의 Inbound 규칙을 수정해 주십시오.(ACG 참고)
      • 프로토콜: TCP
      • 접근 소스: Target DB가 생성된 서브넷의 IP 주소 범위(<예시> 10.0.0.0/24)
      • 허용 포트: Target DB 접속 포트

    • 아래와 같은 경우 Source DB에 Outbound를 설정해주십시오.
      • Source DB가 ACG가 아닌 NACL 정책을 사용하는 네이버 클라우드 플랫폼 서버
      • 네이버 클라우드 플랫폼 서버가 아닐 경우
    참고
    • ACG는 stateful을 따르기 때문에 outbound를 별도로 설정하지 않아도 가능합니다.
    • Network ACL은 stateless를 따르기 때문에 outbound를 설정해야 합니다.

    Source DB 계정 생성 및 ACL 설정

    Source DB와 Target DB를 연결하기 위해 다음과 같은 계정을 생성하고 ACL에 추가해 주십시오.(DB User 관리 참고)

    Private Subnet / Public Subnet 내 Target DB로 마이그레이션

    Source DB와 Target DB의 도메인이 다르고, Target DB를 Private Subnet에 생성하는 경우에 접속 정보를 설정하는 방법을 설명합니다.
    Target DB가 Public Subnet으로 생성된 경우에도 아래 방법으로 진행이 가능합니다.
    다음 절차를 차례대로 실행해 주십시오.

    1. Target DB 접속 설정

    Target DB의 접속 정보를 설정합니다. 다음 절차를 차례대로 진행해 주십시오.

    1. NAT Gateway 생성

    Target DB 서버와 연결할 NAT Gateway를 생성합니다.

    참고

    여기에서는 접속 설정에 필요한 내용만 설명합니다. NAT Gateway 생성에 관한 자세한 내용은 VPC 사용 가이드의 NAT Gateway 생성을 참고해 주십시오.

    NAT Gateway를 생성하는 방법은 다음과 같습니다.

    1. 네이버 클라우드 플랫폼 콘솔에서 Services > Networking > VPC 메뉴를 차례대로 클릭해 주십시오.
    2. NAT Gateway 메뉴를 클릭해 주십시오.
    3. [NAT Gateway 생성] 버튼을 클릭해 주십시오.
    4. NAT Gateway 이름을 입력한 후, Target DB가 생성된 VPCZone을 선택해 주십시오.
    5. [생성] 버튼을 클릭해 주십시오.
    6. 생성한 NAT Gateway의 IP주소를 확인해 주십시오.

    2. Route Table 연결

    Route Table을 생성하고 라우팅 규칙에 NAT Gateway를 추가합니다. Target DB가 존재하는 서브넷에 Route Table을 적용합니다.

    참고

    여기에서는 접속 설정에 필요한 내용만 설명합니다. Route Table에 관한 자세한 내용은 VPC 사용 가이드의 Route Table을 참고해 주십시오.

    Route Table을 적용하는 방법은 다음과 같습니다.

    1. 네이버 클라우드 플랫폼 콘솔에서 Services > Networking > VPC 메뉴를 차례대로 클릭해 주십시오.
    2. Route Table 메뉴를 클릭해 주십시오.
    3. [Route Table 생성] 버튼을 클릭해 주십시오.
    4. Route Table 이름을 입력하고 VPCSubnet 지원 유형을 선택해 주십시오.
      • VPC: Target DB가 생성된 VPC 선택
      • Subnet 지원 유형:
        • Target DB 가 Private Subnet인 경우 사설 선택
        • Target DB 가 Public Subnet인 경우 공인 선택
    5. [생성] 버튼을 클릭해 주십시오.
    6. 생성한 Route Table을 클릭하고 [Route 설정] 버튼을 클릭해 주십시오.
    7. 다음 정보를 입력하고 [생성] 버튼을 클릭해 주십시오.
      • Destination: Source DB에 할당된 Public 도메인의 IP 주소 입력(<예시> 101.101.220.90/32)
      • Target Type: NATGW 선택
      • Target Name: 1. NAT Gateway 생성에서 생성한 NAT Gateway 선택
    8. [확인] 버튼을 클릭해 주십시오.
    9. Route Table을 클릭하고 [연관 Subnet 설정] 버튼을 클릭해 주십시오.
    10. Subnet 이름에서 Target DB가 생성된 서브넷을 선택하고 [생성] 버튼을 클릭해 주십시오.
    11. [확인] 버튼을 클릭해 주십시오.

    3. Target DB 서버 ACG 설정

    Target DB에서 Source DB로 접속할 수 있도록 Target DB 서버에 적용된 ACG의 Outbound 규칙을 설정합니다.

    참고

    여기에서는 접속 설정에 필요한 내용만 설명합니다. ACG 설정에 관한 자세한 내용은 Server 사용 가이드의 ACG를 참조해 주십시오.

    ACG 규칙을 설정하는 방법은 다음과 같습니다.

    1. Target DB의 상세 정보에서 Target DB 서버에 적용된 ACG를 확인해 주십시오.
    2. ACG 항목의 i-dms-window을 클릭하여 ACG 화면으로 이동해 주십시오.
    3. Target DB에 적용된 ACG를 클릭한 후 [ACG 설정] 버튼을 클릭해 주십시오.
    4. [Outbound] 탭을 클릭해 주십시오.
    5. 다음 규칙을 입력한 후 [추가] 버튼을 클릭해 주십시오.
      • 프로토콜: TCP 선택
      • 목적지: Source DB의 Public 도메인 IP 주소 입력(<예시> 101.101.220.90/32)
      • 허용 포트: Source DB 접속 포트 입력
    6. [적용] 버튼을 클릭해 주십시오.

    2. Source DB 접속 설정

    Source DB의 접속 정보를 설정해야 합니다. Source DB에 적용된 ACG 규칙과 ACL을 설정해 주십시오.

    Source DB 서버 ACG 설정

    • Source DB 서버의 방화벽(ACG)을 설정하여 Target DB에서 접속할 수 있도록 설정해야 합니다. 다음 트래픽을 허용하도록 Source DB 서버에 적용된 ACG의 Inbound 규칙을 수정해 주십시오.
      • 프로토콜: TCP
      • 접근 소스: 1. NAT Gateway 생성에서 생성한 NAT Gateway의 IP 주소
      • 허용 포트: Target DB 접속 포트

    • 아래와 같은 경우 Source DB에 Outbound를 설정해주십시오.
      • Source DB가 ACG가 아닌 NACL 정책을 사용하는 네이버 클라우드 플랫폼 서버
      • 네이버 클라우드 플랫폼 서버가 아닐 경우
    참고
    • ACG는 stateful을 따르기 때문에 outbound를 별도로 설정하지 않아도 가능합니다.
    • Network ACL은 stateless를 따르기 때문에 outbound를 설정해야 합니다.

    Source DB 계정 생성 및 ACL 설정

    Source DB와 Target DB를 연결하기 위해 다음과 같은 계정을 생성하고 ACL에 추가해 주십시오.

    마이그레이션을 위해 필요한 최소 권한 항목

    • Source DB가 GTID 모드인 경우 아래 명령을 실행해 주십시오.

    백업 방식 : mysqldump 선택할 경우

    Target DB 가 8.0.32 버전 미만인 경우

    GRANT PROCESS, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '[사용자명]'@'[HOST IP]';
    GRANT SELECT ON mysql.* TO '[사용자명]'@'[HOST IP]';
    GRANT SELECT, SHOW VIEW, LOCK TABLES, TRIGGER ON [사용자 DB].* TO '[사용자명]'@'[HOST IP]';
    

    Target DB 가 8.0.32 버전 이상인 경우

    GRANT {RELOAD|FLUSH_TABLES}, PROCESS, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '[사용자명]'@'[HOST IP]';
    GRANT SELECT ON mysql.* TO '[사용자명]'@'[HOST IP]';
    GRANT SELECT, SHOW VIEW, LOCK TABLES, TRIGGER ON [사용자 DB].* TO '[사용자명]'@'[HOST IP]';
    
    • Source DB가 GTID 모드가 아닌 경우 아래 명령을 실행해 주십시오.
    GRANT RELOAD, PROCESS , SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '[사용자명]'@'[HOST IP]';
    GRANT SELECT ON mysql.* TO '[사용자명]'@'[HOST IP]';
    GRANT SELECT, SHOW VIEW, TRIGGER ON [사용자 DB].* TO '[사용자명]'@'[HOST IP]';
    
    참고
    • GTID 모드가 아닌 경우 Source DB 유저에 대하여 [RELOAD] 권한이 필요하며, 정책상 이를 부여 받지 못할 경우 Source DB를 GTID 모드로 변경 후 마이그레이션 진행해주시기 바랍니다.
    • AWS RDS 환경에서 마이그레이션 진행을 원하시는 경우 권한 정책상 GTID 모드로 변경 후 마이그레이션 진행이 필요합니다.
    • MySQL 8.0.20 버전 이후 Routine Dump 를 위해서는 [SHOW_ROUTINE] 권한이 필요합니다.
    • Target DB 버전 8.0.32 이후부터는 Source DB가 GTID 모드인 경우에 대해서도 [RELOAD] 혹은 [FLUSH_TABLES] 권한이 추가로 필요합니다. 정책상 이를 부여 받지 못한 경우 Target DB 버전 8.0.32 미만에서 수행해주시기 바랍니다.
    • 시스템 테이블 권한 [Y] 설정이 필요합니다.

    백업 방식 : mydumper 선택할 경우

    GRANT BACKUP_ADMIN, {RELOAD|FLUSH_TABLES}, PROCESS, SHOW DATABASES, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '[사용자명]'@'[HOST IP]';
    GRANT SELECT ON mysql.* TO '[사용자명]'@'[HOST IP]';
    GRANT SELECT ON sys.* TO '[사용자명]'@'[HOST IP]';
    GRANT SELECT, SHOW VIEW, LOCK TABLES, TRIGGER ON [사용자 DB].* TO '[사용자명]'@'[HOST IP]';
    
    참고
    • mydumper 사용을 위서는 Source DB 사용자 계정에 BACKUP_ADMIN, {RELOAD|FLUSH_TABLES} 권한이 필요합니다. 해당 권한 확인 후 필요시 고객문의를 통해 요청 바랍니다.
    • 시스템 테이블 권한 [Y] 설정이 필요합니다.

    이 문서가 도움이 되었습니까?

    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.