dr_ Asked: 2015-08-15 07:24:42 +0800 CST2015-08-15 07:24:42 +0800 CST 2015-08-15 07:24:42 +0800 CST “mysqldump --all-databases”备份了哪些数据库? 772 生成的转储中包含哪些数据库mysqldump --all-databases? 根据我的经验,这应该是所有用户创建的数据库,加上mysql数据库。information_schema仅当明确提及时才会备份数据库,并且performance_schema永远不会备份。这个对吗? mysql backup 1 个回答 Voted Best Answer RolandoMySQLDBA 2015-08-15T09:49:04+08:002015-08-15T09:49:04+08:00 我刚刚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”数据库,了解为什么不应该这样做。
我刚刚
mysqldump --all-databases
在 MySQL 5.6.22 for Windows 中做了。performance_schema 和 information_schema 都不在转储中。
它是这样说的MySQL 文档
这是好事。为什么 ?
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”数据库,了解为什么不应该这样做。