前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >[MYSQL] mysql添加分区忘记写add会怎么样?

[MYSQL] mysql添加分区忘记写add会怎么样?

原创
作者头像
大大刺猬
发布2024-07-28 16:20:23
发布2024-07-28 16:20:23
1570
举报
文章被收录于专栏:大大刺猬大大刺猬

导读

昨天风(上海)贼大. 愉快的周末从加班开始就不那么愉快了. 这里简单记录一下(不含实际信息, 均为测试模拟的信息).

案例过程

起初应用跑DDL (alter table table_name add partition (partition xx);) 成功. 此时业务正常的. 于是应用就像把后面的分区提前建好. 使用了如下的SQL

代码语言:sql
复制
alter table table_name partition (partition xx);

因为不含add关键词, 就导致重建了该表, 之前的分区信息都没了. 好巧不巧, 应用的DML语句是指定了分区的, 比如insert into db1.employees partition (p0) values(1,1,1,1,1,1,1); 于是就会收到如下报错(影响业务使用):

代码语言:txt
复制
ERROR 1735 (HY000): Unknown partition 'p0' in table 'employees'

分区不存在, 那就加呗. 比如:

代码语言:sql
复制
(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). 也就是只能重建表了.

代码语言:sql
复制
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之前有发过, 感兴趣的自己去翻翻).

扯远了, 这次只是个修改分区的,而且是周末, 所以影响还算比较小. 但还是要多检查下. 最好是先在测试环境测试下, 不能光看是否报错, 还得看结果是否符合预期.

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 导读
  • 案例过程
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档