db/mysql

Access denied; you need (at least one of) the SUPER privilege(s) for this operation

C/H 2018. 4. 2. 13:59

RDS 인스턴스를 생성시 Master Username 을 개별 사용자(root 가 아닌)로 생성하면 백업파일중 SET DEIFNER=`root`부분에서 에러가 발생한다.

gunzip < backup.sql.gz | mysql -uusername -p databasename 
ERROR 1227 (42000) at line 271: Access denied; you need (at least one of) the SUPER privilege(s) for this operation 
# SUPER 권한이 필요하다.  

sed 's/\sDEFINER=`[^`]*`@`[^`]*`//g' -i backup.sql 
# DEFINER=.. 문을 제거하거나 CURRENT_USER 문 값을 바꿔라.  

# 혹은 동일안 사용자 이더라도 호스트에 따라서 같은 문제가 발생할 수 있다. 
# 271 /*!50003 CREATE*/ /*!50017 DEFINER=`uasername`@`%`*/ /*!50003 TRIGGER `databasename`.`tablename_changeslog` AFTER UPDATE O        N `tablename` FOR EACH ROW 
# 271 /*!50003 CREATE*/ /*!50017 DEFINER=`uasername`@`localhost`*/ /*!50003 TRIGGER `databasename`.`tablename_changeslog` AFTER UPDATE O        N `tablename` FOR EACH ROW 

# username@% > username@localhost 로 변경해서 문제 해결 
# 백업서버에서 원격지 마스터 DB서버의 자료를 백업해서 백업서버의 DB에 이전(mig)시 발생할 수 있다.  

# sql 파일을 수정할 수 없거나 수정하기 싫다면 username@% 가 동작할 수 있도록 -h옵션으로 이전한다. 
gunzip < backup.sql.gz | mysql -hdev.domain.com -uusername -p databasename  

# 전체 권한이 있는 root로 하면 정상동작한다.  
gunzip < backup.sql.gz | mysql -uroot -p databasename 

# 이래저래 복원시 에러가 걸리다면 -f 옵션(force) 으로 에러가 나는 부분은 무시하고 계속 진행한다. 
gunzip < backup.sql.gz | mysql -uusername -p -f databasename
반응형