2011-12-28 23 views
60

Tôi có một người sử dụng MySQL gọi bãi với perms sau:Các GRANT tối thiểu cần thiết bởi mysqldump để bán một lược đồ đầy đủ? (Trigger đang thiếu !!)

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

Tôi muốn đổ tất cả các dữ liệu (bao gồm trigger và thủ tục) bằng cách sử dụng bãi người dùng. Tôi gọi mysqldump theo cách sau:

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

Mọi thứ đều OK với các tập tin đổ trừ các gây nên, họ đang thiếu !!

Các trigger có bán phá giá một cách chính xác nếu tôi cố gắng mysqldump với gốc sử dụng MySQL:

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

Vì vậy, tôi đoán nó là một vấn đề perms ... các tài trợ thêm là những gì tôi bãi MySQL nhu cầu của người dùng cho việc đổ đầy đủ một cách chính xác?

Trả lời

83

Giả sử bằng cách bãi đầy đủ, bạn cũng có nghĩa là VIEW s và EVENT s, bạn sẽ cần:

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'@'%'; 

và nếu bạn có VIEW s mà thực hiện một chức năng, sau đó không may bạn cũng cần EXECUTE.

Vấn đề của riêng tôi là: tại sao tôi cần SELECT nếu tôi chỉ muốn tạo một kết xuất không có dữ liệu?

+1

Đối với 5.5 trở lên, bạn thực sự không cần đặc quyền TRIGGER để kết xuất mã kích hoạt. – bluecollarcoder

+1

Tôi đang sử dụng 5.5 và cần đặc quyền TRIGGER để kết xuất mã kích hoạt. – heuri

+0

Trong trường hợp của tôi có vẻ như tôi cũng cần 'LOCK TABLES' trên cơ sở dữ liệu mà tôi đang cố gắng tự kết xuất ... bằng cách sử dụng '5.5.49-MariaDB' – 0xC0000022L

7

Tôi đã tìm thấy GRANT bổ sung mà tôi cần !!

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

Ở đây bạn có tài liệu tham khảo trên doc chính thức: http://dev.mysql.com/doc/refman/5.5/en/privileges-provided.html#priv_trigger

Đặc quyền TRIGGER phép hoạt động kích hoạt. Bạn phải có đặc quyền này cho một bảng để tạo, thả hoặc thực hiện các trình kích hoạt cho bảng đó.

+3

Tên là thực sự TRIGGER, không gây – thenickdude

+0

Mặc dù điều này có thể là một câu trả lời cho vấn đề tác giả, nó không trả lời câu hỏi: "các yêu cầu CẤP tối thiểu để làm một là gì đổ đầy ". Đối với một: EVENT và SHOW VIEW bị thiếu. – Jannes

+0

Đối với 5.5 trở lên, bạn thực sự không cần đặc quyền 'TRIGGER' để kết xuất mã kích hoạt. – bluecollarcoder

1

Tôi đã tìm thấy, đôi khi nếu người dùng VIEW DEFINER không tồn tại, hãy đổ không thành công.

Thay đổi nó, như mô tả there

+0

Không chắc chắn tại sao điều này lại bị bỏ phiếu, giải quyết được vấn đề của tôi. Tôi đã chỉ định definer là 'person' thay vì' person @ localhost'. Cảm ơn! – stianlik