我对导入/导出数据库的过程很陌生。我正在使用 Maria DB 和 HeidiSQL 来运行查询等。
我从我们的开发服务器导出了整个数据库,并将其加载到我们的实时服务器中。脚本运行顺利。没有错误,一切似乎都按计划进行。
但是,当我打开 HeidiSQL 的两个实例并并排比较表的详细信息时,会发现一些看起来很奇怪的差异。
例如,在某些情况下,新迁移版本上的表表示它们的数据多于它们从中导出的数据库。这怎么可能?HeidiSQL 只是“估计”行数吗?
例如,根据 HeidiSQL,开发服务器上的表 1 包含 177 行数据,总大小为 64.0 KiB。
其中,实时数据库中的同一个表 1 包含 219 行数据,总大小为 64.0 KiB。
更奇怪的是,表 2 包含 2,254,576 行数据,总计 232.9 MiB,而实时数据库中的同一张表包含 2,334,922 行,总计 224.0 MiB。还有一些表格显示实时数据库版本的数据少于开发数据库版本。
为什么是这样?
SQL 文件在实时数据库服务器上从头开始创建数据库的副本,它没有删除或覆盖旧版本或任何东西,并且完成时没有错误。
编辑:
如果我同时运行SELECT COUNT(*) FROM table_2
这两个数据库,则返回 2,326,087 行。所以在 HeidiSQL 中显示正确的计数似乎是一个问题。
从症状来看,您似乎正在为表使用 InnoDB 引擎。如果是这样,客户端(如 HeidiSQL 或 PHPMyAdmin)显示的行数不准确是正常的。
还值得一提的是,
SHOW TABLE STATUS LIKE 'table_name'
它没有为 InnoDB 表提供准确的行数。InnoDB 估计表中的行数。如果你想要准确的计数,你应该
SELECT COUNT(*)
像刚才那样运行。另一方面,MyISAM 保存了行数信息,并且“始终”是最新的。
关于物理文件大小,有很多因素导致具有相同日期的表在磁盘上具有不同的文件大小。有些与操作系统本身以及使用的文件系统有关;有些与MySQL的配置有关;还有一些与做删除和更新时数据的碎片有关。总之,这种差异是很正常的。