2013-08-23 29 views
23

Tôi đang tạo tập lệnh bash, trong số những thứ khác, tập hợp một số dữ liệu từ cơ sở dữ liệu MySQL. Người dùng MySQL của tôi có quyền ghi, nhưng vì lý do an toàn, tôi muốn tạm thời đặt nó vào trạng thái chỉ đọc. Có thể làm điều này từ một dòng lệnh?Làm cách nào để đặt MySQL tạm thời thành chỉ đọc thông qua dòng lệnh?

+0

Thay đổi người dùng, có lẽ? – Strawberry

+0

Có một câu hỏi tương tự (với câu trả lời) tại dba.sc: http://dba.stackexchange.com/questions/74670/revoke-write-privileges-vs-setting-database-to-readonly – Bass

Trả lời

40

Để trả lời câu hỏi ban đầu của bạn, bạn có thể đặt toàn bộ cơ sở dữ liệu của bạn để chế độ chỉ đọc của thành viên này lệnh:

FLUSH TABLES WITH READ LOCK; 
SET GLOBAL read_only = 1; 

và trở lại chế độ bình thường với:

SET GLOBAL read_only = 0; 
UNLOCK TABLES; 

Hãy coi chừng đây là thao tác có tác động sâu sắc đến hành vi của cơ sở dữ liệu. Vì vậy, trước khi thực hiện điều này, hãy đọc tài liệu có sẵn cho các lệnh ở trên. Một cách phổ biến hơn nhiều là thu hồi đặc quyền DML từ người dùng cụ thể và sau đó cấp lại cho họ.

+0

Câu trả lời hay nhất, nếu OP thực sự muốn đặt toàn bộ cơ sở dữ liệu ở chế độ chỉ đọc. Tiêu đề và câu hỏi thực tế gây nhầm lẫn ở đây. Dù sao, 1 cho giải pháp đơn giản nhất. – fancyPants

+1

Để lưu những người khác một số tìm kiếm, đây là những gì tôi đọc trước khi chơi với những điều này: [read_only global] (https://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_read_only) (bao gồm đề cập đến 'BẢNG FLUSH VỚI READ LOCK;') và [sử dụng các bản sao lưu này] (http://docs.oracle.com/cd/E17952_01/refman-5.5-en/replication-solutions-backups-read-only. html). – sage

+0

Sau khi tôi đã làm phương pháp trên, cơ sở dữ liệu của tôi vẫn ở chế độ Đọc + Ghi. – Phoenix

3

Vâng, nếu người sử dụng ngay bây giờ có tất cả đặc quyền đầu tiên, bạn cần phải hủy bỏ nó

$>mysql -u DB_USER -pDB_PASS --execute="REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'YOUR_USER';" 

Sau đó bạn cho anh ta, sau đó chọn phép

$>mysql -u DB_USER -pDB_PASS --execute="GRANT SELECT ON 'YOUR_DATABASE'@.* TO 'YOUR_USER'@'%';FLUSH PRIVILEGES;" 

Do các công cụ và sau đó cấp lại đặc quyền cho người dùng

$>mysql -u DB_USER -pDB_PASS --execute="GRANT ALL ON 'YOUR_DATABASE'@.* TO 'YOUR_USER'@'%';FLUSH PRIVILEGES;" 

Và đó là tất cả mọi người

LƯU Ý: Xem xét cho báo giá, có lẽ tôi đã quên một cái gì đó

Các vấn đề liên quan