본문 바로가기
Dev/DataBase

MariaDB 덤프 생성 definer 제거

by nakanara 2022. 3. 21.
반응형

마리아 DB/MySQL 덤프를 생성하면 사용자 객체에 DEFINER가 함께 붙어서 덤프 파일이 생성됩니다.
DEFINER이 없다면 접속한 사용자의 객체로 생성이 되지만,
덤프를 통한 다른 계정으로 생성이 필요한 경우에는 오라클처럼 remap과 같은 새로 매핑하는 것이 없다 보니 데이터 덤프 파일을 입력할 때 많은 오류가 발생합니다.

파이프라인을 통한 제거

덤프 파일을 만들 때 파이프라인을 이용하여 DEFINER문장을 제거하여 덤프 파일을 생성,
계정에 신경 쓰지 않고 범용적으로 사용이 가능합니다.

./mysqldump \
    -u user \
    -ppassword \
    --single-transaction \
    --routines \
    --triggers \
    --databases  database \
    --compress  \    
    | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/' > dump.sql
  • single-transaction: 단일 트랜잭션으로 덤프 생성, 데이터 일괄성
  • routines: 사용자 객체(프로시저, 함수) 덤프
  • triggers: 트리거 포함
  • databases: 덤프 대상 database
  • compress: 압축 여부

계정을 이미 알고 있는 상태라면 다음의 방식으로도 가능합니다.

  • DEFINER 제거
    DEFINER을 제거할 경우 접속한 계정으로 객체가 생성됩니다.
$ sed -i -e 's/DEFINER=`root`@`localhost`//g' dump.sql
  • DEFINER 변경
    다른 사용자 계정으로 만들기 위해 객체 명 변경
$ sed -i -e 's/DEFINER=`root`@`localhost`/DEFINER=`user`@`%`/g' dump.sql

참고

#mysql #mariadb #datadump #dump #definer

반응형