繁体   English   中英

手动导入/导出或转储数据库

[英]Import/export manually or Dump Database

我有一个相当重的数据库,必须更换服务器,所以我通过转储导出数据库,然后在新服务器上检索到它

但是导入后,数据库的大小不同:

  • 旧服务器:772莫
  • 新服务器:414 Mo

差别是巨大的,我要担心吗? (您认为有什么遗漏的东西吗?)进行手动导出而不是手动导入更好吗?

您没有提到这些大小是来自文件系统( du -ch等)还是来自查询。 我猜它们来自文件系统。 只要没有出现导入错误,您的数据就可以了。

在您的SOURCE表中检查FRAGMENTATION 这可能就是您的来源大于目标的原因。 基本上,更新行时,它可能不再适合同一数据块,并且该数据块被分成两部分,在两个块中保留了一些可用空间(磁盘上使用16KB,数据文件中使用9KB)。

检查fragmented tablesselect 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM