Mysql

“mysqldump –all-databases”備份了哪些數據庫?

  • September 19, 2017

生成的轉儲中包含哪些數據庫mysqldump --all-databases

根據我的經驗,這應該是所有使用者創建的數據庫,加上mysql數據庫。information_schema僅當明確提及時才會備份數據庫,並且performance_schema永遠不會備份。它是否正確?

我剛剛mysqldump --all-databases在 MySQL 5.6.22 for Windows 中做了。

performance_schema 和 information_schema 都不在轉儲中。

它是這樣說的MySQL 文件

限制

預設情況下,mysqldump 不會轉儲 INFORMATION_SCHEMA 或 performance_schema 數據庫。要轉儲其中任何一個,請在命令行上明確命名。您也可以使用 –databases 選項對其進行命名。此外,使用 –skip-lock-tables 選項。

這是好事。為什麼 ?

PERFORMANCE_SCHEMA

性能模式中的檢測表在 DB 伺服器中是瞬態的。從一個時間段到另一個時間段的指標可以不同或相同(因此,嘗試冪等地使用 PERFORMANCE_SCHEMA 永遠不會顯示相同的結果)。這樣的結果將絕對沒有意義載入到不同的伺服器上,甚至從另一個時間段返回到源中。因此,performance_schema 預設不轉儲。

如果您只是需要從備份中重新創建 performance_schema 數據庫,因為您意外刪除了它,那沒關係。然後,在使用儀器時,無論如何都會重寫東西。

如果您想對檢測結果進行快照以便稍後在文本編輯器或應用程序中查看,那也可以。

INFORMATION_SCHEMA

這也是暫時的。此外,自 MySQL 啟動以來,所有 information_schema 表都儲存在記憶體中,並簡單地保存有關實例中表的元數據。(請參閱我的舊文章如何在 MySQL 中實現 INFORMATION_SCHEMA?)將其轉儲並重新載入到另一個 MySQL 實例中是完全沒用的,因為 mysqld 會立即拒絕其載入(或者至少,mysqld 會通過重新讀取mysql 模式以及所有表文件和表空間(如果必須)。

如果您想在不接觸表的情況下同時擷取所有表及其文件的狀態,那麼轉儲 INFORMATION_SCHEMA 並從編輯器或某些應用程序中查看轉儲就可以了。

結語

可以這樣想:如果您從一個 MySQL 實例獲取慢速日誌並將其複製到另一個實例,那麼對於未在新伺服器上執行的查詢,這對您作為開發人員或 DBA 有什麼好處?

以類似的方式,從一台伺服器獲取性能指標和表元數據不會有任何有用的目的,被轉儲然後重新載入回原始伺服器或另一台伺服器。mysqld 需要清楚地了解它目前管理的數據文件,而不是 mysqld 在另一台伺服器上或過去某個時間管理的數據文件。

警告

您應該避免備份 mysql 模式,除非您將其恢復到同一台機器或至少恢復到具有相同 MySQL 主要版本的另一台機器。

請參閱我的舊文章備份和恢復“mysql”數據庫,了解為什麼不應該這樣做。

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