Mysql

mysqldump:刷新權限選項

  • August 16, 2019

我想澄清一下--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. 

當它說它在轉儲數據庫後發送刷新語句時,我讀到這意味著數據、模式等被轉儲到備份文件中,然後將刷新語句發送到剛剛轉儲的數據庫(它之後被甩了)。

我想知道什麼轉儲數據等需要刷新權限,所以我開始尋找解釋以確定何時以及為什麼使用它。

當我閱讀各種答案時,我突然想到,如果將 flush 語句包含在轉儲文件中,那將是有意義的。然後在將文件的內容載入到數據庫後,執行刷新權限語句以在導入新資訊後更新設置。

那麼它是怎樣工作的?A) 將數據轉儲到文件後

刷新源數據庫?如果是這樣,為什麼有必要這樣做?B)導入轉儲文件的內容 後刷新目標數據庫? C) 除了我所描述的可能性之外的其他東西?

該文件具有誤導性。我的閱讀方式與您的閱讀方式完全相同,但這不是該實用程序所做的。

添加--flush-privileges會導致 mysqldump在轉儲 mysql 模式後在備份文件中包含以下內容…

--
-- Flush Grant Tables
--

/*! FLUSH PRIVILEGES */;

…這當然會導致正在恢復轉儲的伺服器重新讀取可能更改的授權表。

而且,僅此而已。

可以在 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");
}

比較using_mysql_db == 0起初令人困惑,但結果是字元串比較函式的返回值,其中“0”表示“相同”。

引用自:https://dba.stackexchange.com/questions/35847