MySQL 5.7 参考手册  /  第22章分区

第22章分区

本章讨论MySQL对 用户自定义分区的实现。

笔记

从 MySQL 5.7.17 开始,MySQL 服务器中的通用分区处理程序已弃用,并在 MySQL 8.0 中删除,当用于给定表的存储引擎需要提供其自己的(本机)分区处理程序时。目前,只有InnoDBNDB存储引擎可以做到这一点。

使用具有非本机分区的表会导致 ER_WARN_DEPRECATED_SYNTAX警告。在 MySQL 5.7.17 到 5.7.20 中,服务器在启动时自动执行检查以识别使用非本机分区的表;对于找到的任何内容,服务器都会将消息写入其错误日志。要禁用此检查,请使用该 --disable-partition-engine-check 选项。在 MySQL 5.7.21 及更高版本中, 执行此检查;--disable-partition-engine-check=false在这些版本中,如果您希望服务器使用通用分区处理程序检查表(Bug #85830,Bug #25846957),则 必须启动服务器 。

为了准备迁移到 MySQL 8.0,任何具有非本机分区的表都应更改为使用提供本机分区的引擎,或者使其成为非分区的。例如,要将表更改为InnoDB,请执行以下语句:

ALTER TABLE table_name ENGINE = INNODB;

SHOW PLUGINS您可以通过检查语句 的输出来确定您的 MySQL 服务器是否支持分区,如下所示:

mysql> SHOW PLUGINS;
+------------+----------+----------------+---------+---------+
| Name       | Status   | Type           | Library | License |
+------------+----------+----------------+---------+---------+
| binlog     | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
| partition  | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
| ARCHIVE    | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
| BLACKHOLE  | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
| CSV        | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
| FEDERATED  | DISABLED | STORAGE ENGINE | NULL    | GPL     |
| MEMORY     | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
| InnoDB     | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
| MRG_MYISAM | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
| MyISAM     | ACTIVE   | STORAGE ENGINE | NULL    | GPL     |
| ndbcluster | DISABLED | STORAGE ENGINE | NULL    | GPL     |
+------------+----------+----------------+---------+---------+
11 rows in set (0.00 sec)

您还可以 INFORMATION_SCHEMA.PLUGINS使用与此类似的查询来检查表:

mysql> SELECT
    ->     PLUGIN_NAME as Name,
    ->     PLUGIN_VERSION as Version,
    ->     PLUGIN_STATUS as Status
    -> FROM INFORMATION_SCHEMA.PLUGINS
    -> WHERE PLUGIN_TYPE='STORAGE ENGINE';
+--------------------+---------+--------+
| Name               | Version | Status |
+--------------------+---------+--------+
| binlog             | 1.0     | ACTIVE |
| CSV                | 1.0     | ACTIVE |
| MEMORY             | 1.0     | ACTIVE |
| MRG_MYISAM         | 1.0     | ACTIVE |
| MyISAM             | 1.0     | ACTIVE |
| PERFORMANCE_SCHEMA | 0.1     | ACTIVE |
| BLACKHOLE          | 1.0     | ACTIVE |
| ARCHIVE            | 3.0     | ACTIVE |
| InnoDB             | 5.7     | ACTIVE |
| partition          | 1.0     | ACTIVE |
+--------------------+---------+--------+
10 rows in set (0.00 sec)

在任何一种情况下,如果您没有看到在输出中列出带有列值的插件 partition (在刚刚给出的每个示例中以粗体文本显示),那么您的 MySQL 版本没有构建分区支持。 ACTIVEStatus

Oracle 提供的 MySQL 5.7 社区二进制文件包括分区支持。有关 MySQL Enterprise Edition 二进制文件中提供的分区支持的信息,请参阅第 28 章,MySQL Enterprise Edition

如果您从源代码编译 MySQL 5.7,要启用分区,必须使用该 -DWITH_PARTITION_STORAGE_ENGINE 选项配置构建。有关详细信息,请参阅 第 2.9 节,“从源代码安装 MySQL”

my.cnf如果你的 MySQL 二进制文件是用分区支持构建的,那么不需要做任何进一步的事情来启用它(例如,你的文件 中不需要特殊条目)。

如果要禁用分区支持,可以使用该--skip-partition 选项启动 MySQL 服务器。当禁用分区支持时,您可以看到任何现有的分区表并删除它们(尽管不建议这样做),但您不能以其他方式操作它们或访问它们的数据。

有关分区和分区概念的介绍, 请参阅第 22.1 节,“MySQL 分区概述” 。

MySQL 支持多种类型的分区和子分区;参见第 22.2 节,“分区类型”第 22.2.6 节,“子分区”

第 22.3 节,“分区管理”,涵盖了在现有分区表中添加、删除和更改分区的方法。

第 22.3.4 节,“分区的维护”,讨论了用于分区表的表维护命令。

数据库中的PARTITIONSINFORMATION_SCHEMA提供有关分区和分区表的信息。有关更多信息,请参阅 第 24.3.16 节,“INFORMATION_SCHEMA PARTITIONS 表”;有关针对此表的查询的一些示例,请参阅 第 22.2.7 节,“MySQL 分区如何处理 NULL”

对于 MySQL 5.7 中分区的已知问题,请参阅 第 22.6 节,“分区的限制和限制”

在使用分区表时,您可能还会发现以下资源很有用。

其他资源。  有关 MySQL 中用户定义分区的其他信息来源包括:

  • MySQL分区论坛

    这是为那些对 MySQL 分区技术感兴趣或尝试使用 MySQL 分区技术的人提供的官方论坛。它包含来自 MySQL 开发人员和其他人的公告和更新。它由分区开发和文档团队的成员监控。

  • Mikael Ronström 的博客

    MySQL 分区架构师和首席开发人员 Mikael Ronström 经常在这里发布有关他在 MySQL 分区和 NDB 集群方面的工作的文章。

  • 星球MySQL

    一个 MySQL 新闻站点,提供与 MySQL 相关的博客,任何使用我的 MySQL 的人都应该感兴趣。我们鼓励您在此处查看由使用 MySQL 分区的人员保存的博客链接,或者将您自己的博客添加到所涵盖的内容中。

MySQL 5.7 二进制文件可从 https://mysql.net.cn/downloads/mysql/5.7.html获得。但是,对于最新的分区错误修复和功能添加,您可以从我们的 GitHub 存储库中获取源代码。要启用分区,必须使用该 -DWITH_PARTITION_STORAGE_ENGINE 选项配置构建。有关构建 MySQL 的更多信息,请参阅 第 2.9 节,“从源代码安装 MySQL”。如果您在编译启用分区的 MySQL 5.7 版本时遇到问题,请查看MySQL 分区论坛,如果您没有找到已发布的问题的解决方案,请在那里寻求帮助。