MySQL / Amazon RDS 오류 : "SUPER 권한이 없습니다…"


98

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 초보자이므로 쉬운 질문에 대해 죄송합니다. 생각?


9
GRANT SUPERRDS에서는 할 수 없습니다 . RDS는 SUPER 권한을 얻을 수있는 방법을 제공하지 않습니다.
ceejayoz

덤프를 만들고 복원하는 데 동일한 MySQL 사용자 이름을 사용합니다 (덤프의 연결 및 DEFINER 키워드 용). log_bin_trust_function_creators를 변경하는 것은 바람직한 솔루션이 아닙니다. 최악의 경우는 -f 매개 변수를 사용하는 것입니다
ad4s

제 경우에는 sql파일 CREATE FUNCTION에 권한있는 사용자가 필요한 진술이 있습니다. 참조
회계사 م jul.

답변:


63

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오류를보고하지만, 덤프 파일의 나머지 부분을 계속 처리합니다.


안녕하세요 @Ross, 감사합니다. 불행히도 사용 -f은 도움이되지 않았습니다. 같은 오류가 발생했습니다. 귀하의 링크를 사용하여 RDS Cli 도구 구문에 문제가 있습니다. : 나는 다음과 같은 오류 얻을 권한 변경 갈 때, 의미rds-modify-db-parameter-group: Malformed input-Unrecognized option: -–parameters=name=log_bin_trust_function_creators, Usage: rds-modify-db-parameter-group DBParameterGroupName --parameters "name=value, value=value, method=value" [ --parameters "name=value, value=value, method=value" ...] [General Options]
팀 피터슨

위의 오류를 제공하는 내 명령은 다음과 같습니다. ./rds-modify-db-parameter-group mygroup -–parameters "name=log_bin_trust_function_creators, value=on, method=immediate" –I="accesskeyxxxxxx" –S="secretkeyxxxxxxxx"인용문 또는 이중 대시 문제 여야한다는 것을 알고 있지만 이러한 유형의 변경 사항은 지금까지 작동하지 않습니다. ugh!
팀 피터슨 jul

4
-f옵션은 오류를 없애지 않고 파일에서 문제가되지 않는 SQL 문을 처리 할 수 ​​있도록합니다. 내가 읽은 바에 따르면 RDS는 덤프 파일의 저장 프로 시저를 질식시키고 있습니다. 저장 프로 시저없이 덤프 파일을 만들어서로드되는지 확인하십시오.mysqldump --routines=0 --triggers=0 --events=0 my_database -u my_username -p
Ross Smith II

2
-@ Ross, 훌륭합니다. 제 데이터베이스가 거기에 있습니다. 와우 성가신 문제입니다. AWS가 이에 대해 뭔가를해야한다고 생각합니다.
팀 피터슨

최소한 -f옵션으로 모든 데이터를로드 할 수 있습니다 . 두 번째 단계는 루틴 / stred proc 등 만 별도로 덤프하는 것일 수 있습니다.
Kaymaz

134
  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 인스턴스를 확장하고 "인스턴스 작업"탭을 확장하고 "재부팅"을 선택합니다.

> 포인트 9의 역할은 ... 이전에 정의 된 파라미터 그룹을 사용하도록 인스턴스를 조정합니다. 자세한 내용은 Daniel Ferbers의 원본 블로그 게시물을 참조하십시오. techtavern.wordpress.com/2013/06/17/…
AndrewL

이로 인해 RDS Mysql 복제가 중지됩니까?
Ramratan Gupta

안녕하세요 @ arun-r, 설명 한 단계를 거치지 만 경우에 따라 'log_bin_trust_function_creators'매개 변수를 사용할 수 없습니다. 최신 AWS RDS에서 뭔가 변경된 것 같습니다. 지금 어떻게 할 수 있습니까? 감사합니다.
Pawan Developers

@RamratanGupta이 중지 실 거예요
룬-R

1
@ arun-r 귀하의 응답에 감사드립니다. 내 문제를 해결했습니다. 실제로 목록에서 log_bin_trust_function_creators를 찾았습니다. 하지만 내 문제는 AWS 지원에 문의하여 해결되었습니다
Pawan Developers

33

덤프 파일의 트리거 및 저장 프로 시저의 문제점은 이러한 정의에 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

1
sed를 사용하여 정의자를 정리할 수도 있습니다. sed -i 's / DEFINER = OldDefiner@ localhost/ DEFINER = NewDefiner@ localhost/ g'./TargetSqlFile.sql
siliconrockstar

16

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

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

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

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

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

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


1
그래, 그거야. 내 덤프 파일은 상대적으로 작기 때문에이 두 명령을 모두 제거했습니다.
Zolbayar

6

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

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

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



1

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 으로 %

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.