![](/img/trans.png)
[英]How can i export MS Sql Server Database dump and Import that Into Mysql Database?
[英]Import/export manually or Dump Database
我有一个相当重的数据库,必须更换服务器,所以我通过转储导出数据库,然后在新服务器上检索到它
但是导入后,数据库的大小不同:
差别是巨大的,我要担心吗? (您认为有什么遗漏的东西吗?)进行手动导出而不是手动导入更好吗?
您没有提到这些大小是来自文件系统( du -ch
等)还是来自查询。 我猜它们来自文件系统。 只要没有出现导入错误,您的数据就可以了。
在您的SOURCE表中检查FRAGMENTATION 。 这可能就是您的来源大于目标的原因。 基本上,更新行时,它可能不再适合同一数据块,并且该数据块被分成两部分,在两个块中保留了一些可用空间(磁盘上使用16KB,数据文件中使用9KB)。
检查fragmented tables
: select ENGINE, TABLE_NAME,Round( DATA_LENGTH/1024/1024) as data_length , round(INDEX_LENGTH/1024/1024) as index_length, round(DATA_FREE/ 1024/1024) as data_free from information_schema.tables where DATA_FREE > 0;
fragmented tables
select ENGINE, TABLE_NAME,Round( DATA_LENGTH/1024/1024) as data_length , round(INDEX_LENGTH/1024/1024) as index_length, round(DATA_FREE/ 1024/1024) as data_free from information_schema.tables where DATA_FREE > 0;
检查已使用的磁盘总数和总可用空间: select sum((DATA_LENGTH + INDEX_LENGTH)/1024/1024) as TTL_MB_USED , sum(DATA_FREE)/1024/1024 as TTL_MB_FREE from information_schema.tables where table_schema='<your schema>';
这可能有助于解决源和目标之间的大小差异。
我发现这个答案非常适合描述碎片: https : //serverfault.com/a/265885
首先,您必须了解Mysql表在更新行时会碎片化,所以这是正常情况。 假设创建了一个表(例如,使用带有数据的转储导入),则所有行都没有碎片地存储在许多固定大小的页面中。 更新可变长度行时,包含该行的页面将分为两个或多个页面以存储更改,并且这两个新的(或多个)页面包含填充未使用空间的空白。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.