Que*_*low 4 mysql innodb migration permissions read-only-database
我计划将数据库迁移到新服务器。在过渡阶段,我不希望 Apache 用户能够向数据库写入任何内容。我有两个选择。
撤销写入权限:
REVOKE INSERT, UPDATE ON `mydb`.* FROM 'apache'@'localhost';
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)将数据库设置为只读模式:
FLUSH TABLES WITH READ LOCK;
SET GLOBAL read_only = 1;
Run Code Online (Sandbox Code Playgroud)选择其中之一是否有任何实际考虑?
我会选择选项 2
选项2也可以写成
FLUSH TABLES;
SET GLOBAL read_only = 1;
Run Code Online (Sandbox Code Playgroud)
这样,您只需运行SET GLOBAL read_only = 0;
即可再次进行写入。FLUSH TABLES WITH READ LOCK 不会停止 InnoDB 写入事务日志、重做日志和撤消日志。这就是为什么SET GLOBAL read_only = 1;
是你的朋友。
在我担任 DBA 的早期,我曾经这样做过:
CREATE TABLE mysql.usercopy LIKE mysql.user;
CREATE TABLE mysql.root LIKE mysql.user;
INSERT INTO mysql.usercopy SELECT * FROM mysql.user;
INSERT INTO mysql.root SELECT * FROM mysql.user WHERE user='root';
TRUNCATE TABLE mysql.user;
INSERT INTO mysql.user SELECT * FROM mysql.root;
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
当我完成后,我做了这个
TRUNCATE TABLE mysql.user;
INSERT INTO mysql.user SELECT * FROM mysql.usercopy;
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
然后,我发现了SUPER。
按原样使用选项 2,或更改FLUSH TABLES WITH READ LOCK;
为FLUSH TABLES;