MySQL/Amazon RDS 오류: "SUPER 권한이 없습니다.."
mysql 데이터베이스를 Amazon EC2에서 RDS로 복사하려고 합니다.
해냈다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 초보자라서 너무 쉬운 질문이라서 죄송합니다.생각?
- RDS Web 콘솔을 엽니다.
- "파라미터 그룹" 탭을 엽니다.
- 새 매개 변수 그룹을 만듭니다.대화상자에서 MySQL 데이터베이스 버전과 호환되는 MySQL 패밀리를 선택하고 이름을 지정하고 확인합니다.방금 작성한 파라미터 그룹을 선택하고 "Edit Parameters"를 발행합니다.
- 이 요?
log_bin_trust_function_creators
을 「」로 합니다.1
. - 변경 내용을 저장합니다.
- 인스턴스 탭을 엽니다.MySQL 인스턴스를 확장하고 "Modify"라는 이름의 "Instance Action"을 실행합니다.
- 방금 작성한 파라미터 그룹을 선택하고 "Apply Immediate(즉시적용)"을 활성화합니다.
- [ Continue ](속행)을 클릭하여 변경을 확인합니다.
- "수정" 작업이 완료될 때까지 기다립니다.
- 다시 "Instance" 탭을 엽니다.MySQL 인스턴스를 확장하고 "Instance Action" 탭을 확장한 후 "Reboot"을 선택합니다.
다음부터는 재부팅할 필요가 없습니다.log_bin_trust_function_creators
있다apply type = dynamic
적어도 이것은 RDS에 이미 파라미터 그룹이 연결되어 있고 새로운 파라미터 그룹을 작성하는 것이 아니라 RDS를 편집하는 경우에 해당됩니다.파라미터 편집만 저장하면 됩니다.
http://getasysadmin.com/2011/06/amazon-rds-super-privileges/,에 따라 설정할 필요가 있습니다.log_bin_trust_function_creators
AWS 콘솔에서 1로 이동하여 오류 없이 덤프 파일을 로드합니다.
에러를 덤프 하려면 , 「」를 합니다.-f
★★★★
mysql -f my_database -u my_username -p -h
my_new_database.xxxxxxxxx.us-east-1.rds.amazonaws.com < my_database.sql
-f
는 오류를 보고하지만 덤프 파일의 나머지 처리를 계속합니다.
덤프 파일의 트리거 및 스토어드 프로시저의 문제는 이러한 정의에는 스토어드 프로시저를 작성할 필요가 있는 사용자(DEFINCEER)가 포함되어 있다는 것입니다.사용자가 RDS에 존재하지 않을 가능성이 높기 때문에 오류가 발생합니다.덤프 파일을 로드하려면 sed 또는 Perl을 사용하여 DEFINEER를 제거하고 Import를 수행하는 사용자와 함께 저장 프로시저/트리거를 작성합니다.
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 권한이 필요한 명령어가 2개밖에 없었습니다.
SET @@GLOBAL.gtid_purged
SET @@SESSION.SQL_LOG_BIN
mysqldump documents에 따르면 이 문서를 비활성화 시킬 수 있습니다.--set-gtid-purged=OFF
.
덤프된 서버의 일부 데이터만 사용하여 새 복제 슬레이브를 배포하려는 경우 ON을 사용하십시오.테이블을 토폴로지 내에 복사하여 복구하려는 경우 OFF를 사용합니다.절단되어 있는 레플리케이션토폴로지간에 테이블을 카피하는 경우는, OFF 를 사용합니다.
그래서 나는 추가하기로 했다.--set-gtid-purged=OFF
나의 것mysqldump
명령어를 실행하면 결과 덤프 파일을 정상적으로 Import할 수 있습니다.
AWS 설명서 트리거, 절차 및 기능은 이진 로깅이 기본적으로 사용되도록 설정되어 있으므로 기본적으로 사용하지 않도록 설정됩니다.디세블로 하면 기본적으로 DB의 보안이 강화되지만 네트워크를 통해 적절하게 보호되어 있으면 문제가 되지 않습니다.
다음 절차를 따르면 문제가 해결됩니다.https://aws.amazon.com/premiumsupport/knowledge-center/rds-mysql-functions/
또한 프로시저를 작성할 때 정의자를 사용하면 안 됩니다.간단한 sed 명령으로 제거할 수 있습니다.
편집과 더불어
log_bin_trust_function_function= 1
덤프 파일에서 모든 DEFINEER를 제거해야 합니다.SED 명령에 대한 다음 링크를 체크하여 sql 덤프 파일을 청소할 수 있습니다.
@arun-r의 응답을 완료하려면 새 파라미터 그룹을 작성할 때 재부팅해야 합니다.
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
타고%
왜 그랬는지 모르겠지만 이 속임수는 나에게 통했다.간단한 텍스트 편집기로 충분합니다.
언급URL : https://stackoverflow.com/questions/11601692/mysql-amazon-rds-error-you-do-not-have-super-privileges
'itsource' 카테고리의 다른 글
문자열에 배열에 값이 포함되어 있는지 확인합니다. (0) | 2022.09.21 |
---|---|
명령줄의 소스를 사용하여 Maven 아티팩트를 설치하는 방법은 무엇입니까? (0) | 2022.09.21 |
innerText와 inner의 차이HTML과 가치? (0) | 2022.09.21 |
업그레이드가 필요한 경우에만 서비스를 중지하는 적절한 방법 (0) | 2022.09.21 |
JS는 PHP 함수 number_format에 해당하는 것은 무엇입니까? (0) | 2022.09.21 |