Mysql
導出的 MariaDB 轉儲大小不同
我正在嘗試從另一個 MariaDB 伺服器上複製數據庫。我在伺服器 A 上轉儲了數據庫:
sudo mysqldump -u root -p --databases database1 > /var/tmp/database1.sql
我在伺服器 B 上創建了新數據庫:
create database database1;
然後我使用 scp 將 .sql 轉儲文件從伺服器 A 複製到伺服器 B,並使用以下命令將其導入伺服器 B:
sudo mysql -u root -p database1 < database1.sql
但是,這兩個數據庫的大小似乎不同:
伺服器甲:
MariaDB [(none)]> SELECT table_schema "database1", ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" FROM information_schema.tables GROUP BY table_schema; +--------------------+---------------+ | database1 | DB Size in MB | +--------------------+---------------+ | information_schema | 0.2 | | mysql | 2.5 | | performance_schema | 0.0 | | database1 | 516.7 | +--------------------+---------------+
伺服器 B:
MariaDB [(none)]> SELECT table_schema "database1",ROUND(SUM(data_length + index_length) / 1024 / 1024, 1) "DB Size in MB" FROM information_schema.tables GROUP BY table_schema; +--------------------+---------------+ | database1 | DB Size in MB | +--------------------+---------------+ | information_schema | 0.2 | | mysql | 0.7 | | performance_schema | 0.0 | | database1 | 456.8 | +--------------------+---------------+
另外,如果我查看兩個數據庫上的同一張表,它們的行數似乎不同。我嘗試多次複製數據庫,但總是有所不同。有什麼我想念的嗎?我不是 MariaDB 的專家。兩台伺服器都在 Debian 9 下。
這是正常的。這是發生的事情:
mysqldump``INSERT
從 BTree 結構化數據生成語句。- 重新載入執行這些語句,用數據填充 BTree。
- BTrees 是為靈活性而設計的——你可以在表格中間添加一條記錄;
- BTree 由“塊”組成(對於 InnoDB,每個塊為 16KB)
- 如果插入進入“完整”塊,則該塊被“拆分”——16KB 突然變成 32KB。其中很多可能會導致表增長。
- 另一方面,轉儲可能是按“順序”完成的。在這種情況下,重新載入可能會比隨機插入/刪除更好地打包塊。
- 這種重新載入可能會更小,但不一定。
同時…
SHOW TABLE STATUS
僅給出行數的估計值。如果您想要確切的行數,請使用SELECT COUNT(*) FROM tablename
. (一次一張)由於STATUS
是“估計”,它可能比實際計數多或少;有時數量很大。這又是“正常的”。