내용으로 건너뛰기

mysqldump를 사용하여 Amazon RDS for MySQL DB 인스턴스로 데이터를 가져올 때 1227 및 정의자 오류를 해결하려면 어떻게 해야 합니까?

2분 분량
0

mysqldump를 사용하여 Amazon Relational Database Service(Amazon RDS) for MySQL DB 인스턴스로 데이터를 가져오면 1227 또는 정의자 오류가 발생합니다.

해결 방법

데이터베이스 이벤트 및 변경 사항을 살펴보려면 바이너리 로그를 검토하십시오. 자세한 내용은 MySQL 웹 사이트의 바이너리 로그를 참조하십시오.

오류 1227

바이너리 로깅을 활성화하고 mysqldump 파일에 저장된 객체(예: 트리거, 뷰, 함수 또는 이벤트)가 포함된 경우 다음 오류가 발생할 수 있습니다.

"Error: 1227 SQLSTATE: 42000 (ER_SPECIFIC_ACCESS_DENIED_ERROR) Access denied; you need (at least one of) the %s privilege(s) for this operation."

이 오류를 해결하려면 다음 단계를 완료하십시오.

  1. DB 인스턴스용으로 생성한 사용자 지정 DB 파라미터 그룹에서 log_bin_trust_function_creators 파라미터True로 설정합니다.
  2. 인스턴스에 대해 파일을 실행하기 전에 덤프 파일에서 **SET @ @SESSION .SQL_LOG_BIN= 0;**과 같은 명령줄을 제거합니다.

정의자 오류

정의자 오류는 MySQL이 대상 데이터베이스에 존재하지 않는 데이터베이스 사용자로 객체를 생성하려고 할 때 발생합니다. 또는 Amazon RDS에 슈퍼 사용자 권한이 없으므로 MySQL이 로컬 호스트에 대한 사용자를 생성하려고 할 때 정의자가 발생합니다. 다음과 유사한 오류가 발생할 수 있습니다.
"Definer error: example: /*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER customer_update AFTER UPDATE ON `customer` FOR EACH ROW" error message."

이 오류를 해결하려면 다음 작업을 수행하십시오.

DEFINER 줄 제거

DEFINER 줄을 찾아 삭제합니다.

/*!50017 DEFINER=`root`@`localhost`*/

출력 예시:

/*!50003 CREATE*/ /*!50003 TRIGGER customer_update AFTER UPDATE ON `customer` FOR EACH ROW

DEFINER 사용자 이름 변경

root의 이름을 masteruser로, localhost의 이름을 %host로 변경합니다.

/*!50017 DEFINER=`masteruser`@`%host`*/

출력 예시:

/*!50003 CREATE*/ /*!50017 DEFINER=`masteruser`@`%`*/ /*!50003 TRIGGER customer_update AFTER UPDATE ON `customer` FOR EACH ROW

참고: %를 모든 호스트의 와일드카드로 사용할 수 있습니다.

DEFINER 옵션을 제거한 후 덤프 파일을 생성하거나 다시 생성

MySQL 덤프 유틸리티에는 DEFINER를 제거하는 옵션이 포함되어 있지 않습니다. 일부 MySQL 클라이언트 유틸리티는 논리적 백업을 생성할 때 DEFINER를 무시하는 옵션을 제공하지만, 이 기능은 기본적으로 사용할 수 없습니다. DEFINER를 무시하는 옵션이 있는지 확인하려면 원하는 MySQL 클라이언트의 설명서를 참조하십시오. MySQL 명령줄 클라이언트는 DEFINER를 제외할 수 없습니다. 그러나 타사 도구와 함께 클라이언트를 사용하여 DEFINER를 제거하거나 사용자 이름 및 호스트를 찾아 바꿀 수 있습니다.

Linux, macOS 또는 Windows Subsystem for Linux(WSL)에서 DEFINER 줄을 찾아 삭제하려면 다음 명령을 실행합니다.

sed -i -e 's/DEFINER=`root`@`localhost`//g' dump.sql

Linux, macOS 또는 WSL에서 사용자 이름과 호스트를 찾아 바꾸려면 다음 명령을 실행합니다.

sed -i -e 's/DEFINER=`root`@`localhost`/DEFINER=`masteruser`@`%`/g' dump.sql

참고: masteruser를 Amazon RDS 기본 사용자의 이름으로 바꾸십시오.

관련 정보

Amazon RDS for MySQL

복제를 사용하여 MySQL DB 인스턴스에서 데이터 내보내기