Amazon RDS for MySQL 또는 MariaDB에서 mysqldump를 사용할 때 수신한 오류를 해결하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 8월 19일

MySQL 또는 MariaDB를 실행하는 Amazon RDS(Amazon Relational Database Service) DB 인스턴스를 사용 중입니다. mysqldump를 사용하여 데이터를 가져오거나 내보낼 때 오류가 발생했습니다. 이 오류를 해결하려면 어떻게 해야 합니까?

간략한 설명

mysqldump를 사용할 때는 다음과 같은 오류가 발생할 수 있습니다.

  • FLUSH TABLES WITH READ LOCK을 실행할 수 없음 오류
  • Max_allowed_packet 오류
  • SUPER 권한 및 DEFINER 오류
  • 연결 분실 또는 중단 오류

해결 방법

FLUSH TABLES WITH READ LOCK을 실행할 수 없음 오류

mysqldump에 [--master-data] 옵션을 사용하여 데이터를 내보낼 때 다음과 유사한 오류가 반환될 수 있습니다.

"mysqldump: 'FLUSH TABLES WITH READ LOCK'을 실행할 수 없음: 'user'@'%' 사용자에 대한 액세스가 거부됨(암호 사용: YES)(1045)"

[--master-data] 옵션은 [FLUSH TABLES WITH READ LOCK]을 획득합니다. 이를 위해서는 Amazon RDS 마스터 사용자에게 없는 [SUPER] 권한이 필요하며 Amazon RDS는 [GLOBAL READ LOCK]을 지원하지 않습니다. MySQL이 로그 정보를 얻기 위해 [CHANGE MASTER TO] 문을 실행할 때 이진 로그 파일 이름 및 위치(좌표)가 mysqldump 파일에 기록됩니다. 자세한 내용은 ER_ACCESS_DENIED_ERROR에 대한 MySQL 설명서를 참조하십시오.

이 오류를 해결하려면 [-master-data] 옵션을 제거합니다. 이 옵션을 제거하면 mysqldump에 정확한 로그 위치가 제공되지 않습니다. 이 문제를 해결하려면 애플리케이션이 중지되었을 때 mysqldump를 가져오거나 Amazon RDS 읽기 전용 복제본에서 mysqldump를 가져옵니다. 복제본을 중지하면 binlog 위치가 변경되지 않는다는 것을 확인하므로 SHOW SLAVE STATUS를 실행하여 정확한 로그 위치를 가져올 수 있습니다. 다음 단계에 따라 이 RDS DB 인스턴스의 Amazon RDS MySQL 읽기 전용 복제본에서 mysqldump를 생성합니다.

1.    이진 로그 보존에 대한 값을 설정합니다.

2.    읽기 전용 복제본에 다음 명령을 실행하여 복제를 중지합니다.

CALL mysql.rds_stop_replication;

3.    읽기 전용 복제본에서 --master-data=2 없이 mysqldump를 가져옵니다.

4.    복제본에서 SHOW SLAVE STATUS를 실행하고 Master_Log_FileExec_Master_Log_Pos를 캡처합니다.

5.    애플리케이션에 대한 복제본을 사용하는 경우, 다음과 같은 저장된 프로시저를 사용하여 다시 복제를 시작합니다.

CALL mysql.rds_start_replication;

애플리케이션에 대한 복제본을 사용하지 않는 경우 이를 삭제할 수 있습니다.

Max_allowed_packet 오류

mysqldump를 사용하여 데이터를 내보낼 때 다음과 유사한 오류가 발생할 수 있습니다.

"오류 2020: 행 XX에서 테이블 `tb_name`을 덤핑할 때 패킷이 'max_allowed_packet'바이트보다 커짐"

mysqldump 명령이 RDS DB 인스턴스에 대해 설정된 max_allowed_packet 파라미터의 값보다 큰 패킷을 요청할 때 이 오류가 발생할 수 있습니다. 자세한 내용은 MySQL 설명서의 Packet Too Large를 참조하십시오.

max_allowed_packet 오류를 해결하려면 max_allowed_packet에 대한 전역 값을 늘리거나, 전체 데이터베이스에 전역으로 설정하는 대신 해당 세션에 대해 mysqldump의 max_allowed_packet을 구성합니다 예를 들어, 다음과 유사하게 명령을 수정할 수 있습니다.

$ mysqldump --max_allowed_packet=1G ......

SUPER 권한 및 DEFINER 오류

mysqldump를 사용하여 데이터를 MySQL 또는 MariaDB를 실행하는 RDS DB 인스턴스로 가져올 때 다음과 유사한 오류가 발생할 수 있습니다.

"행 XX에서 오류 1227(42000): 액세스가 거부되었습니다. 이 작업에 대해 하나 이상의 SUPER 권한이 필요합니다."

이 오류는 다음 문제 중 하나 이상이 있음을 가리킵니다.

연결 분실 또는 중단 오류

mysqldump를 사용하여 데이터를 가져올 때 다음과 유사한 오류가 발생할 수 있습니다.

"mysqldump: 오류 2013: 테이블을 덤핑할 때 쿼리하는 동안 mysql 서버에 대한 연결이 끊겼습니다."

--또는--

"mysqldump: db에 대해 취소된 연결 XXXXXX: 'db_name' 사용자: 'master_user' 호스트: 'XXXXXXX'(통신 패킷 쓰기 제한 시간 있음)"

이 오류의 원인과 해결 방법에 대한 자세한 내용은 Amazon RDS MySQL DB 인스턴스에 연결할 때 발생하는 "MySQL server has gone away(MySQL 서버 사라짐)" 오류를 해결하려면 어떻게 해야 합니까?를 참조하십시오.


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


결제 또는 기술 지원이 필요합니까?