2013-08-23 53 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;" 

而这就是所有人

注意:评论的报价,也许我忘了件事