mysqldump:刷新权限选项

cod*_*gle 4 mysql mysqldump backup permissions

我想澄清一下--flush-privilegesmysqldump的选项。

以下是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. 
Run Code Online (Sandbox Code Playgroud)

当它说它在转储数据库发送刷新语句时,我读到这意味着数据、模式等被转储到备份文件中,然后刷新语句被发送到刚刚转储的数据库(之后抛弃)。

我想知道什么转储数据等需要刷新特权,所以我开始寻找解释以确定何时以及为什么使用它。

当我阅读各种答案时,我想到如果将flush 语句包含在转储文件中是有意义的。然后在将文件内容加载到数据库中后,运行刷新权限语句以在导入新信息后更新设置。

那么它是怎样工作的?
A)将数据转储到文件刷新源数据库?如果是这样,为什么这是必要的?
B) 在导入转储文件的内容后刷新目标数据库?
C) 除了我所描述的可能性之外的其他东西?

Mic*_*bot 8

该文档具有误导性。我阅读它的方式与您完全相同,这不是实用程序所做的。

添加--flush-privileges会导致 mysqldump在备份文件中包含以下内容在转储 mysql 架构后...

--
-- Flush Grant Tables
--

/*! FLUSH PRIVILEGES */;
Run Code Online (Sandbox Code Playgroud)

...这当然会导致正在恢复转储的服务器重新读取可能已更改的授权表。

而且,这就是它所做的一切。

可以在 mysqldump “10.13”(与 MySQL Server 5.5.30 捆绑的版本)的源代码中找到对此的确认:

if (flush_privileges && using_mysql_db == 0)
{
  fprintf(md_result_file,"\n--\n-- Flush Grant Tables \n--\n");
  fprintf(md_result_file,"\n/*! FLUSH PRIVILEGES */;\n");
}
Run Code Online (Sandbox Code Playgroud)

using_mysql_db == 0比较是在第一混淆,但它原来是从字符串比较函数,其中“0”表示的返回值“相同的”。


Rol*_*DBA 5

根据Michael-sqlbot 的回答,请尝试多看一件事。

唯一--flush-privileges适合使用 mysqldump 的时间是

  • 你转储--all-databases(包括mysql模式)
  • mysql您仅转储架构。

mysqldump选项更表面的是--flush-privileges,您可以自己将命令附加到输出中,如下所示:

mysqldump --all-databases --routines --triggers > MySQLData.sql
echo "FLUSH PRIVILEGES;" >> MySQLData.sql
Run Code Online (Sandbox Code Playgroud)

这假设您愿意记住这一点。这就是为什么该--flush-privileges选项被添加到 mysqldump 作为提醒。