전체 스키마를 덤프하기 위해 mysqldump에 필요한 최소 GRANT? (트리거가 없습니다 !!)


79

다음 perms를 사용하여 dump 라는 MySQL 사용자가 있습니다 .

GRANT USAGE ON *.* TO 'dump'@'%' IDENTIFIED BY ...
GRANT SELECT, LOCK TABLES ON `mysql`.* TO 'dump'@'%'
GRANT SELECT, LOCK TABLES ON `myschema`.* TO 'dump'@'%'

덤프 사용자를 사용하여 모든 데이터 (트리거 및 프로 시저 포함)를 덤프하고 싶습니다 . 다음과 같은 방법으로 mysqldump를 호출합니다.

mysqldump -u dump -p --routines --triggers --quote-names --opt \
    --add-drop-database --databases myschema > myschema.sql

트리거를 제외하고 덤프 된 파일로 모든 것이 정상 이며 누락되었습니다. .

루트 MySQL 사용자로 mysqldump를 시도하면 트리거가 올바르게 덤프됩니다 .

mysqldump -u root -p --routines --triggers --quote-names --opt \
    --add-drop-database --databases myschema > myschema.sql

그래서, 그것은 파마 문제라고 생각합니다 ... 덤프 MySQL 사용자가 전체 덤프를 올바르게 수행하는 데 필요한 추가 권한 은 무엇 입니까?

답변:


111

전체 덤프로 VIEWs 및 s를 의미한다고 가정하면 EVENT다음이 필요합니다.

GRANT USAGE ON *.* TO 'dump'@'%' IDENTIFIED BY ...;
GRANT SELECT, LOCK TABLES ON `mysql`.* TO 'dump'@'%';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON `myschema`.* TO 'dump'@'%';

VIEW함수를 실행하는 s가 있으면 불행히도 다음이 필요합니다.EXECUTE .

내 문제는 다음과 같습니다. SELECT데이터가없는 덤프 만 만들고 싶은데 왜 필요 합니까?


2
5.5 이상에서는 실제로 트리거 코드를 덤프하기 위해 TRIGGER 권한이 필요하지 않습니다.
bluecollarcoder

1
5.5를 사용하고 있으며 트리거 코드를 덤프하려면 TRIGGER 권한이 필요했습니다.
heuri

제 경우 LOCK TABLES에는 데이터베이스 에도 필요 합니다. 자체 덤프를 시도하고 있습니다 ... 사용5.5.49-MariaDB
0xC0000022L

1
, 0xC0000022L의 코멘트 @에 대해서는 테이블 잠금 여부 것은 (당신의 mysqldump는 매개 변수에 따라, mysqldump는 선택 사항입니다 관련 매개 변수입니다 --opt, --lock-tables, --lock-all-tables, --single-transaction및 각각의 --skip-*변종.
토크

8

필요한 여분의 GRANT를 찾았습니다 !!

  GRANT TRIGGER ON `myschema`.* TO 'dump'@'%'

다음은 공식 문서에 대한 참조입니다. http://dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_trigger

TRIGGER 권한은 트리거 작업을 활성화합니다. 테이블이 해당 테이블에 대한 트리거를 생성, 삭제 또는 실행하려면이 권한이 있어야합니다.


3
이름은 실제로 TRIGGER입니다하지 TRIGGERS
thenickdude

이것이 작성자 문제에 대한 답일 수 있지만 "전체 덤프를 수행하기위한 최소 GRANT 요구 사항은 무엇입니까"라는 질문에 답하지 않습니다. 하나의 경우 : EVENT 및 SHOW VIEW가 누락되었습니다.
Jannes 2013-08-21

5.5 이상에서는 실제로 TRIGGER트리거 코드를 덤프하는 권한이 필요하지 않습니다 .
bluecollarcoder

5
5.5를 사용하고 실제로 필요했습니다
Emilio Nicolás 2014 년

1

VIEW DEFINER 사용자가 존재하지 않으면 덤프가 실패하는 것을 발견했습니다.

거기에 설명 된대로 변경


이것이 왜 낙선되었는지 확실하지 않아 내 문제가 해결되었습니다. person 대신 정의자를 지정했습니다 person@localhost. 감사!
stianlik 2017-08-12

1

이외에 Jannes의 대답에 mysqldump를 사용시 --tab 옵션은, 당신의 MySQL 사용자는 (각 덤프 테이블 탭으로 구분 된 텍스트 파일을 생성) 이 부여되어야합니다FILE 권한을뿐만 아니라 :

GRANT FILE ON *.* TO 'dump'@'%';

공식 문서 참조 : https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_tab

이 섹션에서 언급 한 내용 :

이 옵션은 mysqld 서버와 동일한 머신에서 mysqldump를 실행할 때만 사용해야합니다. 서버는 지정한 디렉토리에 * .txt 파일을 생성하므로 서버가 디렉토리에 쓰기 가능해야하며 사용하는 MySQL 계정에 FILE 권한이 있어야합니다. mysqldump는 동일한 디렉토리에 * .sql을 생성하므로 시스템 로그인 계정으로 쓸 수 있어야합니다.

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