2017-08-30 80 views
0

我有一個相當沉重的數據庫 我必須要改變服務器,所以我導出數據庫的轉儲,然後我檢索到它在我的新的服務器導入/導出手動或轉儲數據庫

上,但在導入時,後數據庫的大小是不同的:

  • 舊服務器:772莫
  • 新服務器:414莫

的差別是巨大的,我擔心? (你認爲有缺失的東西?) 做一個導出然後手動導入不是更好嗎?

+1

獲取之後你檢查轉儲的一致性(如校驗)? –

+0

謝謝,不用我沒有檢查什麼,我不知道該怎麼做一個數據庫 我會通過文件從手動導出比較.SQL看到的差異和轉儲(如文本DIFF) – Rocstar

+0

也許一個差異是有點重。 'md5sum database_on_server1.sql'和'md5sum database_on_server2.sql'將完成作業 –

回答

3

你沒有提到,如果從文件系統(du -ch等),這些尺寸數字或查詢。我猜他們來自文件系統。只要你沒有導入錯誤,你的數據可能是好的。

檢查你的源表破碎。這可能是你的消息來源比你的目標大的原因。基本上,當行更新時,它可能不再適合同一個數據塊,並且該數據塊被拆分爲兩個,在兩個塊中留下一些空閒空間(磁盤上使用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表得到零散當行被更新,所以這是一個正常的情況。當創建表時,可以說使用帶有數據的轉儲進行導入,所有行都存儲在許多固定大小的頁面中,沒有碎片。當您更新可變長度行時,包含此行的頁面被分成兩個或更多頁面以存儲更改,並且這些新的兩個(或更多)頁面包含填充未使用空間的空白空間。

+0

謝謝!其實尺寸數字來自文件系統,我去檢查我的舊數據庫與您的查詢爲了檢測不一致 – Rocstar