Mysql

從一台伺服器導出並導入另一台伺服器後,我看到表數據不一致,這是為什麼呢?

  • June 8, 2016

我對導入/導出數據庫的過程很陌生。我正在使用 Maria DB 和 HeidiSQL 來執行查詢等。

我從我們的開發伺服器導出了整個數據庫,並將其載入到我們的實時伺服器中。腳本執行順利。沒有錯誤,一切似乎都按計劃進行。

但是,當我打開 HeidiSQL 的兩個實例並並排比較表的詳細資訊時,會發現一些看起來很奇怪的差異。

例如,在某些情況下,新遷移版本上的表表示它們的數據比導出它們的數據庫多。這怎麼可能?HeidiSQL 只是“估計”行數嗎?

例如,根據開發伺服器上的 HeidiSQL 表 1 包含 177 行數據,總大小為 64.0 KiB。

而實時數據庫上的同一張表 1 包含 219 行數據,總大小為 64.0 KiB。

更奇怪的是,表 2 包含 2,254,576 行數據,總計 232.9 MiB,而實時數據庫中的同一張表包含 2,334,922 行,總計 224.0 MiB。還有一些表格顯示實時數據庫版本上的數據少於開發數據庫版本上的數據。

為什麼是這樣?

SQL 文件在實時數據庫伺服器上從頭開始創建數據庫副本,它沒有刪除或覆蓋舊版本或任何東西,完成時也沒有錯誤。

編輯:

如果我同時執行SELECT COUNT(*) FROM table_2兩個數據庫,則返回 2,326,087 行。因此,在 HeidiSQL 中顯示正確計數似乎是一個問題。

從症狀來看,您似乎正在為您的表使用 InnoDB 引擎。如果是這樣,客戶端(如 HeidiSQL 或 PHPMyAdmin)顯示的行數不准確是正常的。

值得一提的是,SHOW TABLE STATUS LIKE 'table_name'它沒有為 InnoDB 表提供準確的行數。

InnoDB 估計表中的行數。如果你想要準確的計數,你應該SELECT COUNT(*)像剛才那樣執行。

另一方面,MyISAM 具有保存的行數資訊,並且“始終”是最新的。

關於物理文件大小,有許多因素導致具有相同日期的表在磁碟上具有不同的文件大小。有的與作業系統本身、使用的文件系統有關;有些與 MySQL 的配置有關;有些與刪除和更新時數據的碎片有關。總之,這種差異是很正常的。

引用自:https://dba.stackexchange.com/questions/140696