[mysql] MySQL / Amazon RDS 오류 : “SUPER 권한이 없습니다…”

Amazon EC2에서 RDS로 mysql 데이터베이스를 복사하려고합니다.

다음을 mysqldump사용하여 내 데이터베이스를 루트 폴더로 성공적으로 수행했습니다 .

root@ip-xx-xx-xx-xx:~# mysqldump my_database -u my_username -p > my_database.sql

그런 다음이 .sql 파일을 새 RDS 데이터베이스로 전송하려고했습니다.

root@ip-xx-xx-xx-xx:~# mysql my_database -u my_username -p -h
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql

불행히도 다음과 같은 오류 메시지가 나타납니다.

You do not have the SUPER privilege and binary logging is enabled
(you *might* want to use  the less safe log_bin_trust_function_creators variable)

GRANT SUPER..다양한 방법으로 시도했지만 그렇게하려고하면 오류가 발생합니다. 타이핑도 mysql > FLUSH privileges;작동하지 않습니다.

나는 mysql 초보자이므로 쉬운 질문에 대해 죄송합니다. 생각?



답변

http://getasysadmin.com/2011/06/amazon-rds-super-privileges/ , 당신은 설정해야 log_bin_trust_function_creators1로 AWS 콘솔 오류없이 덤프 파일을로드.

이러한 오류를 무시하고 나머지 덤프 파일을로드하려면 다음 -f옵션을 사용할 수 있습니다 .

mysql -f my_database -u my_username -p -h
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql

-f오류를보고하지만, 덤프 파일의 나머지 부분을 계속 처리합니다.


답변

  1. RDS 웹 콘솔을 엽니 다.
  2. “Parameter Groups”탭을 엽니 다.
  3. 새 매개 변수 그룹을 생성합니다. 대화 상자에서 MySQL 데이터베이스 버전과 호환되는 MySQL 제품군을 선택하고 이름을 지정한 다음 확인합니다. 방금 생성 한 파라미터 그룹을 선택하고 “Edit Parameters”를 실행합니다.
  4. ‘log_bin_trust_function_creators’매개 변수를 찾아 해당 값을 ‘1’로 설정합니다.
  5. 변경 사항을 저장하십시오.
  6. “인스턴스”탭을 엽니 다. MySQL 인스턴스를 확장하고 “Modify”라는 “인스턴스 작업”을 실행합니다.
  7. 방금 생성 한 파라미터 그룹을 선택하고 “Apply Immediately”를 활성화합니다.
  8. “계속”을 클릭하고 변경 사항을 확인합니다.
  9. “수정”작업이 완료 될 때까지 기다리십시오.
  10. 다시 “인스턴스”탭을 엽니 다. MySQL 인스턴스를 확장하고 “인스턴스 작업”탭을 확장하고 “재부팅”을 선택합니다.


답변

덤프 파일의 트리거 및 저장 프로 시저의 문제점은 이러한 정의에 DEFINER가 저장 프로 시저를 작성해야하는 사용자가 포함된다는 것입니다. 사용자가 RDS에 없을 가능성이 높으므로 오류가 발생합니다. 덤프 파일을로드하려면 sed 또는 Perl을 사용하여 DEFINER를 제거하고 가져 오기를 수행하는 사용자로 저장 프로 시저 / 트리거를 만들 수 있습니다.

perl -pe 's/\sDEFINER=`[^`]+`@`[^`]+`//' < mysqldump.sql > mysqldump.fixed.sql

이제 고정 된 덤프 파일을로드 할 수 있습니다.

mysql my_database -u my_username -p -h rds_host < mysqldump.fixed.sql

이전 답변에서 언급했듯이 DB 매개 변수를 설정해야합니다.

log_bin_trust_function_creators = 1


답변

나를 위해, 내 덤프 파일에는 SUPER 권한이 필요한 두 개의 명령 만있었습니다.

  • SET @@GLOBAL.gtid_purged
  • SET @@SESSION.SQL_LOG_BIN

에 따르면 mysqldump는 워드 프로세서 당신은 이것들을 함께 사용하지 않도록 설정할 수 있습니다 --set-gtid-purged=OFF.

그런 다음 man mysqldump를 살펴보십시오 .

덤프 된 서버의 일부 데이터 만 사용하여 새 복제 슬레이브를 배치하려는 경우 ON을 사용하십시오. 토폴로지 내에서 테이블을 복사하여 테이블을 복구하려는 경우 OFF를 사용하십시오. 분리되어 남아있을 복제 토폴로지간에 테이블을 복사하려는 경우 OFF를 사용하십시오.

그래서 --set-gtid-purged=OFFmysqldump명령 에 추가하기로 결정한 다음 결과 덤프 파일을 성공적으로 가져올 수있었습니다.


답변

AWS 설명서에 정의 된대로 이진 로깅은 기본적으로 활성화되어 있으므로 트리거, 절차 및 함수는 기본적으로 비활성화됩니다. 비활성화하면 기본적으로 DB가 더 안전 해지지 만 네트워크를 통해 적절하게 보안을 유지했다면 문제가되지 않습니다.

다음 단계를 수행하면 문제가 해결됩니다.
https://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/

또한 프로 시저를 만들 때 정의자를 사용하면 안됩니다. 간단한 sed 명령으로 제거 할 수 있습니다.


답변

편집 외에

log_bin_trust_function_creators = 1

덤프 파일에서 모든 DEFINER 를 제거해야 합니다. SQL 덤프 파일을 정리하는 데 도움이 될 수있는 SED 명령에 대한 다음 링크를 확인 하십시오.

https://www.percona.com/blog/2014/07/02/using-mysql-triggers-and-views-in-amazon-rds/#comment-10968243


답변

arun-r 응답을 사용한 후 문제가 해결되지 않으면 덤프 파일을 수정해야합니다. 간단하다.

덤프 파일에서 다음과 같은 줄을 찾을 수 있습니다.

DELIMITER ;;
CREATE DEFINER=`username_from_dumped_database`@`host_from_dumped_database` PROCEDURE `procedure_or_function_name`()
BEGIN

다음을 교체해야합니다.

  • username_from_dumped_database rds 데이터베이스의 사용자 이름으로.
  • host_from_dumped_databse 으로 %

이유는 모르겠지만이 트릭은 저에게 효과적이었습니다. 간단한 텍스트 편집기로 충분합니다.