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

时间:2017-08-30 16:38:57

标签: mysql sql

我有一个相当繁重的数据库 我必须更改服务器,因此我使用转储导出数据库,然后在新服务器上检索它

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

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

差异很大,我不得不担心? (你认为有缺失的东西吗?) 导出然后手动导入是不是更好?

1 个答案:

答案 0 :(得分:3)

您没有提及文件系统(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;

检查使用的总磁盘数和总可用空间: 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表会碎片化,所以这是正常情况。创建表时,假设使用带数据的转储导入,所有行都存储在许多固定大小的页面中没有碎片。更新可变长度行时,包含此行的页面将分为两个或更多页面以存储更改,这些新的两个(或更多)页面包含填充未使用空间的空格。