本人github
在 MySQL 中,FLUSH PRIVILEGES;
命令用于重新加载授权表(即 user
表),以使权限或账户相关的更改立即生效。通常,在以下几种情况下需要使用 FLUSH PRIVILEGES;
:
1. 直接编辑授权表
如果您直接使用 SQL 命令如 INSERT
、UPDATE
或 DELETE
来更改 MySQL 的授权表(通常是在 mysql
数据库中的 user
表),则需要运行 FLUSH PRIVILEGES;
来重新加载这些更改。例如:
INSERT INTO mysql.user (User,Host,authentication_string,ssl_cipher,x509_issuer,x509_subject) VALUES ('new_user','localhost',PASSWORD('new_password'),'','','');
FLUSH PRIVILEGES;
在这个例子中,直接向 user
表添加了一个新用户,因此需要用 FLUSH PRIVILEGES;
来应用这个更改。
2. 使用 mysqldump --flush-privileges
当通过 mysqldump
命令导出 MySQL 数据并使用 --flush-privileges
选项时,导出的 SQL 脚本包含 FLUSH PRIVILEGES;
。在导入这个脚本时,将执行该命令。
3. 在更改密码文件后
如果您使用了 mysqladmin
命令或其他方法直接修改了密码文件,可能需要运行 FLUSH PRIVILEGES;
。
不需要 FLUSH PRIVILEGES;
的情况
对于使用 CREATE USER
、DROP USER
、GRANT
、REVOKE
和 SET PASSWORD
等高级 SQL 命令更改用户权限或密码的情况,不需要运行 FLUSH PRIVILEGES;
。这些命令会自动重新加载权限,使更改立即生效。
例如,当您使用 ALTER USER
命令更改密码时:
ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';
在这种情况下,就不需要运行 FLUSH PRIVILEGES;
,因为 ALTER USER
命令已经隐式地执行了这个操作。
总结
FLUSH PRIVILEGES;
主要用在直接编辑 MySQL 权限表的场景。在大多数常规操作中,如通过标准的账户和权限管理命令进行的更改,MySQL 会自动处理权限的重新加载,无需手动执行 FLUSH PRIVILEGES;
。