我想澄清一下--flush-privileges
mysqldump 的选项。
以下是MySQL 文档中对该选项的描述:
--flush-privileges
Send a FLUSH PRIVILEGES statement to the server after dumping the mysql database.
This option should be used any time the dump contains the mysql database and any other
database that depends on the data in the mysql database for proper restoration.
当它说它在转储数据库后发送刷新语句时,我读到这意味着将数据、模式等转储到备份文件中,然后将刷新语句发送到刚刚转储的数据库(在它之后被甩了)。
我想知道什么转储数据等需要刷新权限,所以我开始寻找解释以确定何时以及为什么使用它。
当我阅读各种答案时,我突然想到,如果将 flush 语句包含在转储文件中,那将是有意义的。然后在将文件的内容加载到数据库后,在导入新信息后运行刷新权限语句以更新设置。
那么它是怎样工作的?A) 将数据转储到文件后
刷新源数据库?如果是这样,为什么有必要这样做?B)导入转储文件的内容
后刷新目标数据库?
C) 除了我所描述的可能性之外的其他东西?
该文档具有误导性。我的阅读方式与您的阅读方式完全相同,但这不是该实用程序所做的。
添加
--flush-privileges
会导致 mysqldump在转储 mysql 模式后在备份文件中包含以下内容......这当然会导致正在恢复转储的服务器重新读取可能更改的授权表。
而且,仅此而已。
可以在 mysqldump "10.13"(与 MySQL Server 5.5.30 捆绑的版本)的源代码中找到对此的确认:
比较
using_mysql_db == 0
起初令人困惑,但结果是字符串比较函数的返回值,其中“0”表示“相同”。根据Michael-sqlbot 的回答,试着再看一件事。
唯一
--flush-privileges
对 mysqldump 有用的时间是--all-databases
(包括mysql
架构)mysql
架构。关于 mysqldump 的选项更肤浅的
--flush-privileges
是,您可以自己将命令附加到输出中,如下所示:这假设您愿意记住这一点。这就是为什么将该
--flush-privileges
选项添加到 mysqldump 以作为提醒的原因。