MySQL 또는 MariaDB용 Amazon RDS에서 mysqldump를 사용할 때 발생한 오류를 해결하려면 어떻게 해야 하나요?

4분 분량
0

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

간략한 설명

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

  • Couldn't execute FLUSH TABLES WITH READ LOCK 오류
  • Max_allowed_packet 오류
  • SUPER 권한 및 DEFINER 오류
  • 연결 끊김 또는 연결 중단 오류

해결 방법

Couldn't execute FLUSH TABLES WITH READ LOCK 오류

mysqldump와 함께 --master-data 옵션을 사용하여 데이터를 내보낼 때 다음과 비슷한 오류가 발생할 수 있습니다.

"mysqldump: Couldn't execute 'FLUSH TABLES WITH READ LOCK': Access denied for user 'user'@'%' (using password: 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를 가져옵니다. 이렇게 하면 SHOW SLAVE STATUS를 실행하여 정확한 로그 위치를 얻을 수 있습니다. 복제본을 중지하면 binlog 위치가 변경되지 않는 것으로 확인되기 때문입니다. 다음 단계에 따라 이 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를 사용하여 데이터를 내보낼 때 다음과 비슷한 오류가 발생할 수 있습니다.

"Error 2020: Got packet bigger than 'max_allowed_packet' bytes when dumping table `tb_name` at row: XX"

이 오류는 mysqldump 명령이 RDS DB 인스턴스에 설정된 max_allowed_packet 파라미터의 값보다 큰 패킷을 요청할 때 발생합니다. 자세한 내용을 보려면 패킷이 너무 큼에 대한 MySQL 설명서를 참조하세요.

max_allowed_packet 오류를 해결하려면 max_allowed_packet의 글로벌 값을 늘리거나 mysqldump에서 해당 세션(전체 데이터베이스에 대한 전역 아님)에 대해 max_allowed_packet을 구성합니다. 예를 들어 다음과 같이 명령을 수정할 수 있습니다.

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

SUPER 권한 및 DEFINER 오류

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

"ERROR 1227 (42000) at line XX: Access denied; you need (at least one of) the SUPER privilege(s) for this operation"

이 오류는 다음 문제 중 하나 이상을 나타냅니다.

연결 끊김 또는 연결 중단 오류

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

"mysqldump: error 2013: lost connection to mysql server during query when dumping table"

--또는--

"mysqldump: Aborted connection XXXXXX to db: 'db_name' user: 'master_user' host: 'XXXXXXX' (Got timeout writing communication packets)"

이 오류의 원인과 해결 방법에 대한 자세한 내용을 보려면 Amazon RDS MySQL DB 인스턴스에 연결할 때 “MySQL server has gone away”라는 오류를 해결하려면 어떻게 해야 하나요?를 참조하세요.


관련 정보

mysqldump에 대한 MySQL 설명서

Amazon RDS for MySQL DB 인스턴스의 함수, 절차, 트리거를 활성화하려면 어떻게 해야 하나요?

댓글 없음