本章讨论MySQL对 用户自定义分区的实现。
从 MySQL 5.7.17 开始,MySQL 服务器中的通用分区处理程序已弃用,并在 MySQL 8.0 中删除,当用于给定表的存储引擎需要提供其自己的(“本机”)分区处理程序时。目前,只有InnoDB
和
NDB
存储引擎可以做到这一点。
使用具有非本机分区的表会导致
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 版本没有构建分区支持。
ACTIVE
Status
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 节,“分区的维护”,讨论了用于分区表的表维护命令。
数据库中的PARTITIONS
表
INFORMATION_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 分区和 NDB 集群方面的工作的文章。
一个 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 分区论坛,如果您没有找到已发布的问题的解决方案,请在那里寻求帮助。