【发布时间】:2014-04-01 13:54:22
【问题描述】:
我尝试使用带有 innodb 默认存储引擎的系统 A 中的 mysqldump 将大约 40gb 的数据库 db1 转储到 sql 文件中,并尝试在另一个系统 B 上恢复它。两者都具有默认存储引擎作为 innodb 和相同的 mysql 版本。我使用检查表状态检查了系统 A 上的任何表损坏,但无法在其上找到任何表损坏。我使用下面的查询来计算系统 A 和系统 B 上两个数据库 (db1) 上的表大小和每个表的行数,发现系统 B 的 db1 上大约有 6GB 的数据丢失。
SELECT table_schema,
-> SUM(data_length+index_length)/1024/1024 AS total_mb,
-> SUM(data_length)/1024/1024 AS data_mb,
-> SUM(index_length)/1024/1024 AS index_mb,
-> COUNT(*) AS tables,
-> CURDATE() AS today
-> FROM information_schema.tables
-> GROUP BY table_schema
-> ORDER BY 2 DESC
当 Innodb 是默认存储引擎时,我们可以依靠信息模式来计算确切的行数、确切的表大小(数据长度 + 索引长度)吗?为什么使用 mysql dump 的转储会导致在系统 B 上恢复时出现大量数据丢失?
【问题讨论】:
-
能否请您分解每个表/索引的 6GB 差异?
-
@bpgergo 6GB 数据差异是在几个表中观察到的总数据丢失