“mysqldump --all-databases”备份了哪些数据库?

dr_*_*dr_ 4 mysql mysqldump backup information-schema

哪些数据库包含在由生成的转储中mysqldump --all-databases

根据我的经验,这应该是所有用户创建的数据库,加上mysql数据库。information_schema仅在明确提及时才备份数据库,并且performance_schema从不备份。这样对吗?

Rol*_*DBA 6

我刚刚mysqldump --all-databases在 Windows 的 MySQL 5.6.22 中做了。

performance_schema 和 information_schema 都不在转储中。

它是这么说的MySQL 文档

限制

默认情况下,mysqldump 不会转储 INFORMATION_SCHEMA 或 performance_schema 数据库。要转储其中任何一个,请在命令行上明确命名。您也可以使用 --databases 选项命名它。此外,使用 --skip-lock-tables 选项。

这是好事。为什么 ?

PERFORMANCE_SCHEMA

性能模式中的检测表在数据库服务器中是暂时的。从一个时间段到另一个时间段的指标可能不同或相同(因此,尝试以幂等方式使用 PERFORMANCE_SCHEMA 永远不会显示相同的结果)。这样的结果将完全没有意义加载到不同的服务器上,甚至从另一个时间段返回到源中。因此,默认情况下不转储 performance_schema。

如果您只需要从备份中重新创建 performance_schema 数据库,因为您不小心删除了它,那没问题。然后,在使用仪器时,无论如何都会重写内容。

如果您想对检测结果进行快照以便稍后在文本编辑器或应用程序中查看,那也可以。

INFORMATION_SCHEMA

这也是暂时的。此外,自 MySQL 启动以来,所有 information_schema 表都存储在内存中,并简单地保存有关实例中表的元数据。(请参阅我的旧帖子INFORMATION_SCHEMA 如何在 MySQL 中实现?)将其转储并将其重新加载到另一个 MySQL 实例中是完全没有用的,因为 mysqld 会立即拒绝其加载(或者至少,mysqld 将通过重新读取mysql 模式以及所有表文件和表空间(如果必须的话)。

如果您想在不接触表的情况下及时捕获所有表及其文件的状态,那么转储 INFORMATION_SCHEMA 并从编辑器或某些应用程序查看转储就可以了。

结语

可以这样想:如果您有一个 MySQL 实例的慢日志并将其复制到另一个实例,那么作为开发人员或 DBA,如果您的查询未在新服务器上运行,这对您有什么好处?

以类似的方式,从一台服务器获得性能指标和表元数据不会用于任何有用的目的,被转储然后重新加载回原始服务器或另一台服务器。mysqld 需要清楚地了解它当前管理的数据文件,而不是 mysqld 在另一台服务器上或过去某个时间管理的数据文件。

警告

您应该避免备份 mysql 模式,除非您将其恢复到同一台机器或至少另一台具有相同 MySQL 主要版本的机器。

请参阅我的旧帖子备份和恢复“mysql”数据库,了解为什么不应该这样做。