导读
昨天风(上海)贼大. 愉快的周末从加班开始就不那么愉快了. 这里简单记录一下(不含实际信息, 均为测试模拟的信息).
案例过程
起初应用跑DDL (alter table table_name add partition (partition xx);
) 成功. 此时业务正常的. 于是应用就像把后面的分区提前建好. 使用了如下的SQL
alter table table_name partition (partition xx);
复制
因为不含add
关键词, 就导致重建了该表, 之前的分区信息都没了. 好巧不巧, 应用的DML语句是指定了分区的, 比如insert into db1.employees partition (p0) values(1,1,1,1,1,1,1);
于是就会收到如下报错(影响业务使用):
ERROR 1735 (HY000): Unknown partition 'p0' in table 'employees'
复制
分区不存在, 那就加呗. 比如:
(root@127.0.0.1) [(none)]> alter table db1.employees add partition (partition p0 values less than (4));
ERROR 1493 (HY000): VALUES LESS THAN value must be strictly increasing for each partition
(root@127.0.0.1) [(none)]>
复制
根据描述来看, 分区应该是只能往后加 (strictly increasing). 也就是只能重建表了.
CREATE TABLE employees (
id int,
store_id int
)
PARTITION BY RANGE (store_id) (
PARTITION p0 VALUES LESS THAN (4),
PARTITION p1 VALUES LESS THAN (11),
PARTITION p2 VALUES LESS THAN (16),
PARTITION p3 VALUES LESS THAN (21)
);
复制
重建后业务恢复正常.
总结
敲命令的时候一定要看仔细. 这次虽然没有丢数据, 但还是影响了业务使用. 不只是是数据库, linux上也是. 写脚本也是. 再进行一些修改(非只读)命令时, 记得做好备份和检查, 比如: 删除文件 就先 test -f filename 看下是否存在. 尤其是有变量的时候, 尽量进到目录里面去再删除. (关于文件名字处理的相关shell之前有发过, 感兴趣的自己去翻翻).
扯远了, 这次只是个修改分区的,而且是周末, 所以影响还算比较小. 但还是要多检查下. 最好是先在测试环境测试下, 不能光看是否报错, 还得看结果是否符合预期.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
目录