phpMyAdmin 导出不包含 PARTITION 定义,因其仅查询 information_schema.TABLES 而非 PARTITIONS 表;正确做法是用 SQL 标签页执行 SHOW CREATE TABLE 获取完整 DDL,或使用 mysqldump 加 --include-partition 参数(MySQL 5.7+)。
phpmyadmin 无法直接导出 mysql 分区表的 partition 定义——它生成的 create table 语句里会完全丢失 partition by 及后续分区逻辑,哪怕你在 show create table 中能清楚看到这部分内容。
为什么 phpMyAdmin 导出的 SQL 没有 PARTITION 语句
phpMyAdmin 的“导出”功能底层调用的是 MySQL 的元数据查询(如 information_schema.TABLES),但它**不查 information_schema.PARTITIONS 表**,也不拼接分区定义。这和 mysqldump 默认行为一致:分区信息是独立元数据,需要显式启用支持。
- 你手动执行
SHOW CREATE TABLE mytable能看到完整分区语句,是因为 MySQL Server 实时解析并返回了完整 DDL - phpMyAdmin 不走这个路径,它只取基础表结构,跳过分区、子分区、
DATA DIRECTORY等扩展属性 - 即使你勾选了“添加 DROP TABLE”“包含结构”等所有选项,
PARTITION BY依然不会出现
正确备份分区表结构的实操路径
必须绕过 phpMyAdmin 的导出界面,改用其内置的 SQL 查询窗口 + 手动提取方式:
- 在 phpMyAdmin 中选中目标数据库,点击顶部“SQL”标签页
- 执行:
SHOW CREATE TABLE `mytable`;(注意反引号包裹表名,避免关键字冲突) - 结果框中点“浏览”或直接复制输出的完整建表语句,里面就含
PARTITION BY和所有PARTITION子句 - 把这条语句单独保存为
mytable_partitioned.sql,这就是可恢复的完整结构 - 若要同时备份数据,再执行:
SELECT * INTO OUTFILE '/tmp/mytable_data.csv' FIELDS TERMINATED BY ',' FROM mytable;(需 MySQL 有FILE权限且路径可写)
用 mysqldump 替代 phpMyAdmin 导出分区表
如果你有服务器命令行权限,这是更可靠的选择——但要注意版本匹配:
- MySQL 5.7+ 客户端 + 5.7+ 服务端:加
--include-partition参数mysqldump -u root -p --no-data --skip-triggers --skip-routines --set-gtid-purged=OFF --include-partition mydb mytable > mytable_struct.sql - MySQL 5.6 服务端:该参数不存在,会报错
Unknown argument: --include-partition;只能退回上一节的手动SHOW CREATE TABLE方式 - 验证分区是否可见:
SELECT PARTITION_NAME FROM information_schema.PARTITIONS WHERE TABLE_SCHEMA='mydb' AND TABLE_NAME='mytable';—— 查不到结果,说明服务端没暴露分区元数据,任何工具都导不出
分区表备份最易被忽略的一点:SHOW CREATE TABLE 返回的语句虽完整,但若含 DATA DIRECTORY 或 INDEX DIRECTORY 路径,恢复时目标服务器可能无对应目录权限或路径不可写——这类路径需人工校验并替换为本地可用路径。
立即学习“PHP免费学习笔记(深入)”;



















