我正在创建一个bash脚本,除其他外,它从MySQL数据库中收集一些数据。我的MySQL用户具有写权限,但出于安全考虑,我想暂时将其设置为只读状态。是否可以从命令行执行此操作?
答案 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;"
这就是所有人
注意:检查报价,也许我忘了一些