如何通过命令行将MySQL临时设置为只读模式?

46

我正在创建一个bash脚本,其中包括从MySQL数据库中收集一些数据。我的MySQL用户具有写入权限,但出于安全考虑,我想暂时将其设置为只读状态。是否可以通过命令行做到这一点?

我正在创建一个bash脚本,其中包括从MySQL数据库中收集一些数据。我的MySQL用户具有写入权限,但出于安全考虑,我想暂时将其设置为只读状态。请问是否可以通过命令行实现?

换个用户,也许? - Strawberry
在dba.stackexchange.com上有一个类似的问题(带答案):http://dba.stackexchange.com/questions/74670/revoke-write-privileges-vs-setting-database-to-readonly - Bass
3个回答

84

回答您最初的问题,您可以通过以下命令将整个数据库设置为只读模式:

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

并通过以下方式返回正常模式:

SET GLOBAL read_only = 0;
UNLOCK TABLES;

请注意,此操作会对数据库的行为产生深远影响。因此,在执行此操作之前,请阅读可用的有关上述命令的文档。一种更常见的方法是撤销特定用户的DML权限,然后再将其授予回来。


最佳答案,如果OP真的想将整个数据库设置为只读模式。标题和实际问题在这里有些混淆。无论如何,对于最简单的解决方案+1。 - fancyPants
1
为了帮助其他人节省一些搜索时间,这是我在使用这些之前阅读的内容:只读全局(包括FLUSH TABLES WITH READ LOCK;的提及)和将其用于备份 - sage
1
我执行了上述方法后,我的数据库仍然只处于读写模式。 - Phoenix

26

2
这应该是这个问题的被接受的答案。 - David Rissato Cruz

4
好的,如果用户现在拥有所有权限,您需要撤销它。
$>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;"

“就是这样,伙计们。”
注意:请检查引号是否正确,可能我漏掉了什么。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接