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

时间:2013-08-23 10:55:34

标签: mysql shell command-line readonly

我正在创建一个bash脚本,除其他外,它从MySQL数据库中收集一些数据。我的MySQL用户具有写权限,但出于安全考虑,我想暂时将其设置为只读状态。是否可以从命令行执行此操作?

3 个答案:

答案 0 :(得分:48)

要回答原始问题,可以通过以下命令将整个数据库置于只读模式:

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

并返回正常模式:

SET GLOBAL read_only = 0;
UNLOCK TABLES;

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

答案 1 :(得分:4)

如果你正在使用MySQL 5.6或更新版本和InnoDB,你可以将会话设为只读。

SET SESSION TRANSACTION READ ONLY;

https://dev.mysql.com/doc/refman/5.6/en/set-transaction.html

"只读"还提供适度的performance benefit

答案 2 :(得分:2)

好吧,如果用户现在拥有所有权限,则需要撤销

$>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;"

这就是所有人

注意:检查报价,也许我忘了一些