2013-08-23 51 views
23

我創建了一個bash腳本,其中包括從MySQL數據庫收集一些數據。我的MySQL用戶具有寫權限,但出於安全原因,我想暫時將其設置爲只讀狀態。是否可以從命令行執行此操作?如何通過命令行將MySQL臨時設置爲只讀?

+0

更改用戶,也許? – Strawberry

+0

在dba.sc有一個類似的問題(與答案):http://dba.stackexchange.com/questions/74670/revoke-write-privileges-vs-setting-database-to-readonly – Bass

回答

40

要回答你原來的問題,你可以把你的整個數據庫爲只讀模式這個命令:

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

,並回到正常模式與:

SET GLOBAL read_only = 0; 
UNLOCK TABLES; 

請注意,這是一個對數據庫行爲有深遠影響的操作。因此在執行此操作之前,請閱讀上述命令的可用文檔。更常見的方法是撤銷特定用戶的DML權限,然後授予他們。

+0

最佳答案,如果OP真的希望將整個數據庫設置爲只讀模式。標題和實際問題令人困惑。無論如何,+1是最簡單的解決方案。 – fancyPants

+1

爲了節省其他人的一些搜索,以下是我在玩這些之前閱讀的內容:[read_only global](https://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html#sysvar_read_only)(包括提及'FLUSH TABLES WITH READ LOCK;')和[使用它們進行備份](http://docs.oracle.com/cd/E17952_01/refman-5.5-en/replication-solutions-backups-read-only。 HTML)。 – sage

+0

我做了上述方法後,我的數據庫只保持在讀寫模式。 – Phoenix

3

好吧,如果用戶現在擁有的一切特權首先,你需要撤銷這個

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

之後,你給他,選擇的權限

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

做你的東西,之後再次授予用戶特權

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

而這就是所有人

注意:評論的報價,也許我忘了件事