Amazon RDS for MySQL 또는 MariaDB에서 mysqldump를 사용할 때 수신한 오류를 해결하려면 어떻게 해야 합니까?
최종 업데이트 날짜: 2020년 8월 19일
간략한 설명
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_File 및 Exec_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 권한이 필요합니다."
이 오류는 다음 문제 중 하나 이상이 있음을 가리킵니다.
- 대상 RDS DB 인스턴스에 이진 로그가 활성화([백업 보존 기간] > 0)되어 있으며, mysqldump 파일이 트리거, 뷰, 함수 또는 이벤트와 같은 객체를 포함합니다. 자세한 내용은 Amazon RDS MySQL 인스턴스에서 자동 백업 또는 복제를 활성화할 때 ERROR 1227이 발생한 경우 이 문제를 해결하려면 어떻게 해야 합니까?를 참조하십시오.
- 가져온 mysqldump 파일이 RDS DB 인스턴스에 존재하지 않는 DEFINER 속성 사용자로 객체를 생성하려고 시도했거나 사용자가 필요한 SUPER 사용자 권한을 가지고 있지 않은 속성 사용자를 생성하려고 시도했습니다. 자세한 내용은 mysqldump를 사용하여 Amazon RDS for MySQL인스턴스로 데이터를 가져올 때 정의자 오류를 해결하려면 어떻게 해야 합니까?를 참조하십시오.
- 오류 메시지에서 참조된 라인에 대한 명령에 RDS DB 인스턴스에서 제공되지 않는 SUPER 권한이 필요합니다.
연결 분실 또는 중단 오류
mysqldump를 사용하여 데이터를 가져올 때 다음과 유사한 오류가 발생할 수 있습니다.
"mysqldump: 오류 2013: 테이블을 덤핑할 때 쿼리하는 동안 mysql 서버에 대한 연결이 끊겼습니다."
--또는--
"mysqldump: db에 대해 취소된 연결 XXXXXX: 'db_name' 사용자: 'master_user' 호스트: 'XXXXXXX'(통신 패킷 쓰기 제한 시간 있음)"
이 오류의 원인과 해결 방법에 대한 자세한 내용은 Amazon RDS MySQL DB 인스턴스에 연결할 때 발생하는 "MySQL server has gone away(MySQL 서버 사라짐)" 오류를 해결하려면 어떻게 해야 합니까?를 참조하십시오.