Mysqldump 从 mysql 到 mariadb - 数据库大小差异

Mysqldump from mysql to mariadb - database size diffrence

我想从 mysql 切换到 mariadb,为此,我导出了旧数据库并将它们导入到新的 mariadb 服务器,现在我遇到了问题,新导入的数据库小于原来的。

我做了以下事情:

  1. 使用 mysqldump from mysql 创建了备份(mysqldump --all-databases --user=root --password --master-数据 > backupdatabase.sql)

  2. 将其导入到新的 maridb-server (mysql -u root -p < backupdatabase.sql)

如果想知道数据库有多大,我看下面的:

在原始 mysql-服务器上:

mysql> SELECT table_schema "database", 总和(data_length + index_length)/1024/1024 "size in MB"从 information_schema.TABLES 分组 table_schema;

|数据库 |大小(MB)|

| DB-1 | 0.40625000

| DB-2 | 4.09375000 |

| DB-3 | 506.60937500 |

一组 6 行(0.90 秒)

如果我现在在 maraidb 主机上做同样的事情:

MariaDB [(none)]> SELECT table_schema "database", sum(data_length + index_length)/1024/1024 "size in MB" 来自 information_schema.TABLES 分组 table_schema;

|数据库 |大小(MB)|

| DB-1 | 0.39062500 |

| DB-2 | 3.03125000 |

| DB-3 | 416.39062500 |

一组 6 行(0.09 秒)

差异从何而来?这是我的失败吗?

您的 Table 未在 MySQL 服务器上优化。所以 MySQL 免费从未使用过的光盘 Space。释放它的唯一方法是删除并创建一个 Table。这就是优化所做的。另一件事是选项 "One File per Table"。如果它设置 MySQL 每个 Table 在文件上使用,并且可以使用 Optimize 释放磁盘 space 否则你只有一个大文件。

MySQL InnoDB 和 MySIAM(您可能使用的引擎之一)的 MariaDB 存储是相同的。此外,您可以通过在 MySQL 之上安装 MariaDB 来安装 MariaDB,它将使用相同的文件数据库。

您的问题很可能是因为当您从头开始创建 table 并插入所有行时,没有碎片或 space 浪费或任何东西。当你有一个实时服务器时,当你删除行时,数据会变得有些碎片化,有时它甚至会存储 "empty" space 并且不会将其返回给 OS (InnoDB)。

试试这个,在 MySQL 中创建一个新数据库作为 DB1-test 并将转储导入其中,然后比较 DB1-test 大小与 MariaDB-DB1 的大小,它们应该一致。