42

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

4

3 回答 3

74

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

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

并返回正常模式:

SET GLOBAL read_only = 0;
UNLOCK TABLES;

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

于 2013-08-23T11:23:53.073 回答
22

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

SET SESSION TRANSACTION READ ONLY;

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

“只读”还提供了适度的性能优势

于 2016-09-28T14:25:11.930 回答
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;"

这就是所有人

注意:查看报价,也许我忘记了什么

于 2013-08-23T11:12:54.663 回答