Tidb 设置数据分离放置策略报错

【 TiDB 使用环境】生产环境 /测试/ Poc
【 TiDB 版本】
TIDB 6.5.2
【复现路径】做过哪些操作出现的问题
执行语句
alter table employees_test partition p1 placement policy storeonhdd;
建表语句
CREATE TABLE employees_test (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT ‘1970-01-01’,
separated DATE DEFAULT ‘9999-12-31’,
job_code INT,
store_id INT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin /*T![placement] PLACEMENT POLICY=storeonssd */
PARTITION BY RANGE ( YEAR(separated) ) (
PARTITION p0 VALUES LESS THAN (1991),
PARTITION p1 VALUES LESS THAN (1996),
PARTITION p2 VALUES LESS THAN (2001),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
【遇到的问题:问题现象及影响】
【资源配置】进入到 TiDB Dashboard -集群信息 (Cluster Info) -主机(Hosts) 截图此页面

【附件:截图/日志/监控】

https://docs.pingcap.com/zh/tidb/stable/schedule-replicas-by-topology-labels#设置-tikv-和-tiflash-的-labels
https://docs.pingcap.com/zh/tidb/stable/placement-rules-in-sql#放置选项参考

给分区绑定放置策略后,你可以更改指定分区的放置策略。示例如下:

ALTER TABLE t1 PARTITION pEurope PLACEMENT POLICY=p1;

是不是应该写成
alter table employees_test partition p1 placement policy=stroeonhdd;

https://docs.pingcap.com/zh/tidb/stable/sql-statement-alter-table#语法图
从语法图看,PlacementPolicyOption
这里也是通过EqOpt来连接的。

SHOW placement labels;----执行下看看,有对应的标签吗?没有的话绑定的时候会报错。

  • 使用 CREATE PLACEMENT POLICY 创建放置规则时,TiDB 不会检查标签是否存在,而是在绑定表的时候进行检查。

看下有没有创建对应的label标签(show placement labels;)和策略( 创建策略:
指定数据只存储在 SSD: CREATE PLACEMENT POLICY storeonfastssd
CONSTRAINTS=“[+disk=ssd]”;
指定数据只存储在 HDD: CREATE PLACEMENT POLICY storeonfastssd
CONSTRAINTS=“[+disk=hdd]”;)

指定更改策略出现报错,看样子是PD的label修改有问题

1 个赞

image
是的 我在绑定的时候就会报错


ERROR 8243 (HY000): “[PD:placement:ErrRuleContent]invalid rule content, rule ‘partition_rule_102_0’ from rule group ‘TiDB_DDL_102’ can not match any store”

按照你给的绑定方式 我这边是成功的

那你之前是绑定成功过么,绑定成功了再试试你那个alter语句呢

规则的问题吗

是的 规则有问题导致创建失败 CREATE PLACEMENT POLICY storeonfastssd
CONSTRAINTS=“[+disk=ssd]”; 改成这种就可以了