分片表 #
| 语法 | 描述 | 类型 |
|---|---|---|
| CREATE SHARDING TABLE RULE shardingTableRuleDefinition [, shardingTableRuleDefinition] … | 创建分片规则 | RDL |
| ALTER SHARDING TABLE RULE shardingTableRuleDefinition [, shardingTableRuleDefinition] … | 修改分片规则 | RDL |
| DROP SHARDING TABLE RULE tableName [, tableName] … | 删除分片规则 | RDL |
| SHOW SHARDING TABLE tableRule | RULES [FROM databaseName] | 查看分片规则 |
| SHOW SHARDING TABLE NODES | 查看逻辑库中分片表所在的分片规则 | RQL |
| COUNT SHARDING RULE | 统计分片规则的数量,在后续版本中将废弃此语法 | RQL |
| DROP SHARDING ALGORITHM algorithmName [, algorithmName] … | 单独删除分片算法 无法删除使用中的算法 | RDL |
| SHOW SHARDING ALGORITHMS [FROM databaseName] | 查看分片算法详情 | RQL |
| SHOW UNUSED SHARDING ALGORITHMS [FROM databaseName] | 查看未被使用的分片算法 | RQL |
| SHOW SHARDING TABLE RULES USED ALGORITHM shardingAlgorithmName [FROM databaseName] | 查看使用指定分片算法的表 | RQL |
| DROP SHARDING KEY GENERATOR [IF EXISTS] keyGeneratorName [, keyGeneratorName] … | 删除分布式主键生成算法 | RDL |
| SHOW SHARDING KEY GENERATORS [FROM databaseName] | 查看分布式主键生成算法 | SHOW UNUSED SHARDING KEY GENERATORS [FROM databaseName] |
| SHOW SHARDING TABLE RULES USED KEY GENERATOR keyGeneratorName [FROM databaseName] | 查看使用指定算法的表 | RQL |
| CREATE DEFAULT SHARDING shardingScope STRATEGY (shardingStrategy) | 创建缺省的分库分表策略 | RDL |
| ALTER DEFAULT SHARDING shardingScope STRATEGY (shardingStrategy) | 修改缺省的分库分表策略 | RDL |
| DROP DEFAULT SHARDING shardingScope STRATEGY; | 删除缺省的分库分表策略 | RDL |
| SHOW DEFAULT SHARDING STRATEGY | 查看缺省的分库分表策略的详情 | RQL |
1. 创建分片规则 #
CREATE SHARDING TABLE RULE shardingTableRuleDefinition [, shardingTableRuleDefinition] ...
shardingTableRuleDefinition:
shardingAutoTableRule | shardingTableRule
shardingAutoTableRule:
tableName(storageUnits, shardingColumn, algorithmDefinition [, keyGenerateDefinition] [, auditDeclaration])
shardingTableRule:
tableName(dataNodes [, databaseStrategy] [, tableStrategy] [, keyGenerateDefinition] [, auditDeclaration])
storageUnits:
STORAGE_UNITS(storageUnit [, storageUnit] ...)
dataNodes:
DATANODES(dataNode [, dataNode] ...)
storageUnit:
storageUnitName | inlineExpression
dataNode:
dataNodeName | inlineExpression
shardingColumn:
SHARDING_COLUMN=columnName
algorithmDefinition:
TYPE(NAME=shardingAlgorithmType [, PROPERTIES([algorithmProperties])])
keyGenerateDefinition:
KEY_GENERATE_STRATEGY(COLUMN=columnName, strategyDefinition)
auditDeclaration:
auditDefinition | auditStrategy
auditDefinition:
AUDIT_STRATEGY([(singleAuditDefinition),(singleAuditDefinition)], ALLOW_HINT_DISABLE=true)
singleAuditDefinition:
NAME=auditor1, algorithmDefinition
auditStrategy:
AUDIT_STRATEGY(AUDITORS=[auditor1,auditor2], ALLOW_HINT_DISABLE=true)
参数说明
STORAGE_UNITS需使用 RDL 管理的数据源资源;shardingAlgorithmType指定自动分片算法类型,请参考 自动分片算法;keyGenerateStrategyType指定分布式主键生成策略,请参考 分布式主键;auditorAlgorithmType指定分片审计策略,请参考 分片审计;- 重复的
tableName将无法被创建; shardingAlgorithm能够被不同的Sharding Table Rule复用,因此在执行DROP SHARDING TABLE RULE时,对应的shardingAlgorithm不会被移除;- 如需移除
shardingAlgorithm,请执行DROP SHARDING ALGORITHM; strategyType指定分片策略,请参考 分片策略;Sharding Table Rule同时支持Auto Table和Table两种类型,两者在语法上有所差异,对应配置文件请参考 数据分片 ;- 执行
CREATE SHARDING TABLE RULE时,将会自动创建新的分片算法,算法命名规则为tableName_scope_shardingAlgorithmType,如t_order_database_inline。
示例
CREATE SHARDING TABLE RULE t_order (
STORAGE_UNITS(ds_0,ds_1),
SHARDING_COLUMN=order_id,TYPE(NAME="hash_mod",PROPERTIES("sharding-count"="4")),
KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME="snowflake"))
);
2. 修改分片规则 #
ALTER SHARDING TABLE RULE shardingTableRuleDefinition [, shardingTableRuleDefinition] ...
shardingTableRuleDefinition:
shardingAutoTableRule | shardingTableRule
shardingAutoTableRule:
tableName(storageUnits, shardingColumn, algorithmDefinition [, keyGenerateDefinition] [, auditDeclaration])
shardingTableRule:
tableName(dataNodes [, databaseStrategy] [, tableStrategy] [, keyGenerateDefinition] [, auditDeclaration])
storageUnits:
STORAGE_UNITS(storageUnit [, storageUnit] ...)
dataNodes:
DATANODES(dataNode [, dataNode] ...)
storageUnit:
storageUnitName | inlineExpression
dataNode:
dataNodeName | inlineExpression
shardingColumn:
SHARDING_COLUMN=columnName
algorithmDefinition:
TYPE(NAME=shardingAlgorithmType [, PROPERTIES([algorithmProperties])])
keyGenerateDefinition:
KEY_GENERATE_STRATEGY(COLUMN=columnName, strategyDefinition)
auditDeclaration:
auditDefinition | auditStrategy
auditDefinition:
AUDIT_STRATEGY([(singleAuditDefinition),(singleAuditDefinition)], ALLOW_HINT_DISABLE=true)
singleAuditDefinition:
NAME=auditor1, algorithmDefinition
auditStrategy:
AUDIT_STRATEGY(AUDITORS=[auditor1,auditor2], ALLOW_HINT_DISABLE=true)
参数说明
STORAGE_UNITS需使用 RDL 管理的数据源资源;shardingAlgorithmType指定自动分片算法类型,请参考 自动分片算法;keyGenerateStrategyType指定分布式主键生成策略,请参考 分布式主键;auditorAlgorithmType指定分片审计策略,请参考 分片审计;- 重复的
tableName将无法被创建; shardingAlgorithm能够被不同的Sharding Table Rule复用,因此在执行DROP SHARDING TABLE RULE时,对应的shardingAlgorithm不会被移除;- 如需移除
shardingAlgorithm,请执行DROP SHARDING ALGORITHM; strategyType指定分片策略,请参考 分片策略;Sharding Table Rule同时支持Auto Table和 Table 两种类型,两者在语法上有所差异,对应配置文件请参考 数据分片 ;ALTER SHARDING TABLE RULE不会触发数据重分片。
示例
ALTER SHARDING TABLE RULE t_order (
STORAGE_UNITS(ds_0,ds_1,ds_2,ds_3),
SHARDING_COLUMN=order_id,TYPE(NAME="hash_mod",PROPERTIES("sharding-count"="16")),
KEY_GENERATE_STRATEGY(COLUMN=another_id,TYPE(NAME="snowflake"))
);
3. 删除分片规则 #
DROP SHARDING TABLE RULE t_order_item;
示例
删除规则名为 t_order_item 的分片规则
DROP SHARDING TABLE RULE t_order_item;
4. 查看分片规则 #
SHOW SHARDING TABLE tableRule | RULES [FROM databaseName]
示例
查看逻辑库中所有表的分片规则
mysql> SHOW SHARDING TABLE RULES;
+--------------+---------------------------------+-------------------+----------------------+------------------------+-------------------------------+----------------------------------------+-------------------+---------------------+----------------------------+---------------------------------------------------+-------------------+------------------+-------------------+
| table | actual_data_nodes | actual_data_sources | database_strategy_type | database_sharding_column | database_sharding_algorithm_type | database_sharding_algorithm_props | table_strategy_type | table_sharding_column | table_sharding_algorithm_type | table_sharding_algorithm_props | key_generate_column | key_generator_type | key_generator_props | auditor_types | allow_hint_disable |+--------------+---------------------------------+-------------------+----------------------+------------------------+-------------------------------+----------------------------------------+-------------------+---------------------+----------------------------+---------------------------------------------------+-------------------+------------------+-------------------+
| t_order | ds_${0..1}.t_order_${0..1} | | INLINE | user_id | INLINE | algorithm-expression:ds_${user_id % 2} | INLINE | order_id | INLINE | algorithm-expression:t_order_${order_id % 2} | order_id | SNOWFLAKE | | DML_SHARDING_CONDITIONS |true || t_order_item | ds_${0..1}.t_order_item_${0..1} | | INLINE | user_id | INLINE | algorithm-expression:ds_${user_id % 2} | INLINE | order_id | INLINE | algorithm-expression:t_order_item_${order_id % 2} | order_item_id | SNOWFLAKE | | | || t2 | | ds_0,ds_1 | | | | | mod | id | mod | sharding-count:10 | | | | | |+--------------+---------------------------------+-------------------+----------------------+------------------------+-------------------------------+----------------------------------------+-------------------+---------------------+----------------------------+---------------------------------------------------+-------------------+------------------+-------------------+
3 rows in set (0.02 sec)
查看逻辑库中制定表的分片规则
mysql> SHOW SHARDING TABLE RULE t_order;
+---------+----------------------------+-------------------+----------------------+------------------------+-------------------------------+----------------------------------------+-------------------+---------------------+----------------------------+----------------------------------------------+-------------------+------------------+-------------------+
| table | actual_data_nodes | actual_data_sources | database_strategy_type | database_sharding_column | database_sharding_algorithm_type | database_sharding_algorithm_props | table_strategy_type | table_sharding_column | table_sharding_algorithm_type | table_sharding_algorithm_props | key_generate_column | key_generator_type | key_generator_props | auditor_types | allow_hint_disable |+---------+----------------------------+-------------------+----------------------+------------------------+-------------------------------+----------------------------------------+-------------------+---------------------+----------------------------+----------------------------------------------+-------------------+------------------+-------------------+
| t_order | ds_${0..1}.t_order_${0..1} | | INLINE | user_id | INLINE | algorithm-expression:ds_${user_id % 2} | INLINE | order_id | INLINE | algorithm-expression:t_order_${order_id % 2} | order_id | SNOWFLAKE | | DML_SHARDING_CONDITIONS |true |
+---------+----------------------------+-------------------+----------------------+------------------------+-------------------------------+----------------------------------------+-------------------+---------------------+----------------------------+----------------------------------------------+-------------------+------------------+-------------------+
1 row in set (0.01 sec)
输出说明
| 列 | 说明 |
|---|---|
| table | 逻辑表名 |
| actual_data_nodes | 实际的数据节点 |
| actual_data_sources | 实际的数据源(通过 RDL 创建的规则时显示) |
| database_strategy_type | 数据库分片策略类型 |
| database_sharding_column | 数据库分片键 |
| database_sharding_algorithm_type | 数据库分片算法类型 |
| database_sharding_algorithm_props | 数据库分片算法参数 |
| table_strategy_type | 表分片策略类型 |
| table_sharding_column | 表分片键 |
| table_sharding_algorithm_type | 表分片算法类型 |
| table_sharding_algorithm_props | 表分片算法参数 |
| key_generate_column | 分布式主键生成列 |
| key_generator_type | 分布式主键生成器类型 |
| key_generator_props | 分布式主键生成器参数 |
| auditor_types | 分片审计生成器参数 |
| allow_hint_disable | 是否禁用分片审计hint |
5. 查看逻辑库中分片表所在的分片规则 #
SHOW SHARDING TABLE NODES;
参数说明
无
示例
mysql> SHOW SHARDING TABLE NODES;
+---------+----------------------------------------------------------------+
| name | nodes |+---------+----------------------------------------------------------------+
| t_order | ds_0.t_order_0, ds_1.t_order_1, ds_0.t_order_2, ds_1.t_order_3 |+---------+----------------------------------------------------------------+
1 row in set (0.02 sec)
输出说明:
| 列 | 说明 |
|---|---|
| name | 分片规则名称 |
| nodes | 分片节点 |
6. 单独删除分片算法 #
DROP SHARDING ALGORITHM algorithmName [, algorithmName] ...
示例
删除名称 t_order_hash_mod 的分片算法
DROP SHARDING ALGORITHM t_order_hash_mod;
7. 查看分片算法详情 #
SHOW SHARDING ALGORITHMS;
参数说明
无
示例
mysql> SHOW SHARDING ALGORITHMS;
+-------------------------+--------+-----------------------------------------------------+
| name | type | props |+-------------------------+--------+-----------------------------------------------------+
| t_order_inline | INLINE | algorithm-expression=t_order_${order_id % 2} || t_order_item_inline | INLINE | algorithm-expression=t_order_item_${order_id % 2} |+-------------------------+--------+-----------------------------------------------------+
2 row in set (0.01 sec)
输出说明
| 列 | 说明 |
|---|---|
| name | 分片算法名称 |
| type | 分片算法类型 |
| props | 分片算法参数 |
8. 查看未被使用的分片算法 #
SHOW UNUSED SHARDING ALGORITHMS;
参数说明
无
示例
mysql> SHOW UNUSED SHARDING ALGORITHMS;
+---------------+--------+-----------------------------------------------------+
| name | type | props |+---------------+--------+-----------------------------------------------------+
| t1_inline | INLINE | algorithm-expression=t_order_${order_id % 2} |+---------------+--------+-----------------------------------------------------+
1 row in set (0.01 sec)
输出说明
| 列 | 说明 |
|---|---|
| name | 分片算法名称 |
| type | 分片算法类型 |
| props | 分片算法参数 |
9. 查看使用指定分片算法的表 #
SHOW SHARDING TABLE RULES USED ALGORITHM shardingAlgorithmName [FROM databaseName]
示例
mysql> SHOW SHARDING TABLE RULES USED ALGORITHM t_order_inline;
+-------+---------+
| type | name |
+-------+---------+
| table | t_order |
1 row in set (0.01 sec)
输出说明
| 列 | 说明 |
|---|---|
| type | 分片算法类型 |
| name | 分片算法名称(与表名相同) |
10. 删分布式主键生成算法 #
DROP SHARDING KEY GENERATOR [IF EXISTS] keyGeneratorName [, keyGeneratorName] ...
示例
DROP SHARDING KEY GENERATOR snowflake_key_generator;
11. 查看分布式主键生成算法 #
SHOW SHARDING KEY GENERATORS;
参数说明
无
示例
mysql> SHOW SHARDING KEY GENERATORS;
+------------------------+-----------+-----------------+
| name | type | props |
+------------------------+-----------+-----------------+
| t_order_snowflake | snowflake | |
| t_order_item_snowflake | snowflake | |
| uuid_key_generator | uuid | |
+------------------------+-----------+-----------------+
3 row in set (0.01 sec)
输出说明
| 列 | 说明 |
|---|---|
| name | 主键生成器名称 |
| type | 主键生成器类型 |
| props | 主键生成器参数 |
12. 查看未被使用的分布式主键生成算法 #
SHOW UNUSED SHARDING KEY GENERATORS;
参数说明
无
示例
mysql> SHOW UNUSED SHARDING KEY GENERATORS;
+------------------------+-----------+-----------------+
| name | type | props |
+------------------------+-----------+-----------------+
| dml_audit | uuid | |
+------------------------+-----------+-----------------+
1 row in set (0.01 sec)
输出说明
| 列 | 说明 |
|---|---|
| name | 主键生成器名称 |
| type | 主键生成器类型 |
| props | 主键生成器参数 |
13. 查看使用指定算法的表 #
SHOW SHARDING TABLE RULES USED KEY GENERATOR keyGeneratorName [FROM databaseName]
示例
mysql> SHOW SHARDING TABLE RULES USED KEY GENERATOR t_order_snowflake;
+-------+---------+
| type | name |
+-------+---------+
| table | t_order |
+-------+---------+
1 row in set (0.01 sec)
输出说明
| 列 | 说明 |
|---|---|
| type | 分片算法类型(分库算法或者分表算法) |
| name | 分片规则名称 |
14. 创建缺省的分库分表策略 #
CREATE DEFAULT SHARDING shardingScope STRATEGY (shardingStrategy)
shardingScope:
DATABASE | TABLE
databaseStrategy:
DATABASE_STRATEGY(shardingStrategy)
tableStrategy:
TABLE_STRATEGY(shardingStrategy)
shardingStrategy:
TYPE=strategyType, shardingColumn, shardingAlgorithm
shardingColumn:
SHARDING_COLUMN=columnName
shardingAlgorithm:
SHARDING_ALGORITHM(algorithmDefinition)
strategyDefinition:
TYPE(NAME=keyGenerateStrategyType [, PROPERTIES([algorithmProperties])])
参数说明
strategyType指定分片策略,请参考分片策略;- 执行
CREATE DEFAULT SHARDING STRATEGY时,同样会自动创建新的分片算法,算法命名规则为default_scope_shardingAlgorithmType,如default_database_inline。
示例
CREATE DEFAULT SHARDING DATABASE STRATEGY (
TYPE="standard",SHARDING_COLUMN=order_id,SHARDING_ALGORITHM(TYPE(NAME="inline",PROPERTIES("algorithm-expression"="ds_${order_id % 2}")))
);
15. 修改缺省的分库分表策略 #
ALTER DEFAULT SHARDING shardingScope STRATEGY (shardingStrategy)
shardingScope:
DATABASE | TABLE
databaseStrategy:
DATABASE_STRATEGY(shardingStrategy)
tableStrategy:
TABLE_STRATEGY(shardingStrategy)
shardingStrategy:
TYPE=strategyType, shardingColumn, shardingAlgorithm
shardingColumn:
SHARDING_COLUMN=columnName
shardingAlgorithm:
SHARDING_ALGORITHM(algorithmDefinition)
strategyDefinition:
TYPE(NAME=keyGenerateStrategyType [, PROPERTIES([algorithmProperties])])
参数说明
strategyType指定分片策略,请参考分片策略;- 执行
CREATE DEFAULT SHARDING STRATEGY时,同样会自动创建新的分片算法,算法命名规则为default_scope_shardingAlgorithmType,如default_database_inline。
示例
ALTER DEFAULT SHARDING DATABASE STRATEGY (
TYPE="standard",SHARDING_COLUMN=order_id,SHARDING_ALGORITHM(TYPE(NAME="inline",PROPERTIES("algorithm-expression"="ds_${order_id % 2}")))
);
16. 删除缺省的分库分表策略 #
DROP DEFAULT SHARDING shardingScope STRATEGY
shardingScope:
DATABASE | TABLE
示例
DROP DEFAULT SHARDING DATABASE STRATEGY;
17. 查看缺省的分库分表策略的详情 #
SHOW DEFAULT SHARDING STRATEGY;
参数说明
无
示例
mysql> SHOW DEFAULT SHARDING STRATEGY ;
+----------+---------+--------------------+-------------------------+-------------------------+------------------------------------------+
| name | type | sharding_column | sharding_algorithm_name | sharding_algorithm_type | sharding_algorithm_props |
+----------+---------+--------------------+-------------------------+-------------------------+------------------------------------------+
| TABLE | NONE | | | | |
| DATABASE | STANDARD| order_id | database_inline | INLINE | {algorithm-expression=ds_${user_id % 2}} |
+----------+---------+--------------------+-------------------------+-------------------------+------------------------------------------+
2 rows in set (0.07 sec)
输出说明
| 列 | 说明 |
|---|---|
| name | 策略名称 |
| type | 分片策略类型 |
| sharding_column | 分片键 |
| sharding_algorithm_name | 分片算法名称 |
| ‘\sharding_algorithm_type | 分片算法类型 |
| sharding_algorithm_props | 分片算法参数 |