第 22 章分区

目录

本章讨论 MySQL 的 user-defined 分区的 implementation。

注意
从 MySQL 5.7.17 开始,MySQL 服务器中的通用分区处理程序已被弃用,并且在 MySQL 8.0 中被删除,当用于给定 table 的存储引擎预期提供其自己的(“本机”)分区处理程序时。目前,只有InnoDB导航台存储引擎才能执行此操作。

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

要准备迁移到 MySQL 8.0,应该更改任何带有非本地分区的 table,以使用提供本机分区的引擎,或者将其设置为非分区。对于 example,要将 table 更改为InnoDB,请执行以下语句:

ALTER TABLE table_name ENGINE = INNODB;

您可以通过检查显示插件语句的输出来确定您的 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)

您还可以使用与此类似的查询检查INFORMATIONSCHEMA.PLUGINS table:

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插件列出输出中Status列的 value ACTIVE(在刚给出的每个例子中以粗体显示),那么 MySQL 的 version 不是用分区支持构建的。

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

要在从源代码编译 MySQL 5.7 时启用分区,必须使用-DWITH_PARTITION_STORAGE_ENGINE选项配置 build。有关更多信息,请参阅第 2.9 节,“从源安装 MySQL”

如果您的 MySQL 二进制文件是使用分区支持构建的,则不需要进一步启用它(例如,my.cnf文件中不需要特殊条目)。

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

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

MySQL 支持几种类型的分区以及子分区;见第 22.2 节,“分区类型”第 22.2.6 节,“分区”

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

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

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

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

在使用分区表时,您还可以找到以下资源。

其他资源. MySQL 中 user-defined 分区的其他信息来源包括:

对于那些对 MySQL Partitioning 技术感兴趣或正在尝试的人来说,这是一个官方讨论论坛。它具有来自 MySQL 开发人员和其他人的公告和更新。它由分区开发和文档团队的成员监控。

MySQL Partitioning Architect 和首席开发人员 MikaelRonström 经常在这里发表关于他使用 MySQL Partitioning 和 NDB Cluster 的文章。

一个 MySQL 新闻网站,其中包含 MySQL-related 博客,任何人使用我的 MySQL 都应该感兴趣。我们建议您在此处查看使用 MySQL Partitioning 的人员保存的博客链接,或者将自己的博客添加到所涵盖的博客中。

MySQL 5.7 二进制文件可从https://dev.mysql.com/downloads/mysql/5.7.html获得。但是,对于最新的分区错误修正和 feature 添加,您可以从我们的 GitHub repository 获取源代码。要启用分区,必须使用-DWITH_PARTITION_STORAGE_ENGINE选项配置 build。有关 building MySQL 的更多信息,请参阅第 2.9 节,“从源安装 MySQL”。如果您在编译 partitioning-enabled MySQL 5.7 build 时遇到问题,请检查MySQL 分区论坛并在找不到已发布问题的解决方案时寻求帮助。

Updated at: 9 months ago
NDB Cluster 发行说明Table of contentMySQL 中的分区概述