Mysql

導出的 MariaDB 轉儲大小不同

  • April 14, 2020

我正在嘗試從另一個 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是“估計”,它可能比實際計數多或少;有時數量很大。這又是“正常的”。

引用自:https://serverfault.com/questions/1012278