共計 4191 個字符,預計需要花費 11 分鐘才能閱讀完成。
這篇文章主要介紹了 mysql 如何刪除分區的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇 mysql 如何刪除分區文章都會有所收獲,下面我們一起來看看吧。
在 mysql 中,可以利用 alter 語句配合“DROP PARTITION”來刪除分區,“DROP PARTITION”的作用就是用于刪除指定的分區,語法為“ALTER TABLE 表名 DROP PARTITION 分區名”。
本教程操作環境:windows10 系統、mysql8.0.22 版本、Dell G3 電腦。
mysql 刪除分區
刪除分區語法為:ALTER TABLE 表名 DROP PARTITION 分區名
清理分區數據為空,保留分區不刪除,僅僅是清理數據,命令如下
alter table bm_scenes_data_reminder truncate partition p20210104;
刪除分區
alter table bm_scenes_data_reminder drop partition p20210104;
刪除后執行查看建表語句,可以看到 p20210104 分區沒有了
增加分區
## 如果希望將剛刪除的 p20210104 分區重新加回去?怎么辦。先嘗試直接執行增加分區命令試試
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210104 VALUES LESS THAN (738159) ENGINE = InnoDB);
結果如下,說明是不可行的。
mysql ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210104 VALUES LESS THAN (738159) ENGINE = InnoDB);
ERROR 1481 (HY000): MAXVALUE can only be used in last partition definition
mysql
##1 步驟中不可行,提示必須是在最后一個分區的后面才可以這樣增加。
因此如果一定要加回 p20210104 這個分區(即需要在中間部分增加分區), 只能將 p20210104 后面的分區先全刪除,再增加 p20210104 分區,再后 p20210104 后面的分區重新加回去。操作如下:
## 先刪除 p20210104 分區后面的所有分區
ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210105;
ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210106;
ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210107;
ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210108;
ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210109;
ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210110;
ALTER TABLE bm_scenes_data_reminder drop PARTITION future;
## 增加 p20210104 分區
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210104 VALUES LESS THAN (738159) ENGINE = InnoDB);
## 把 p20210104 分區后面的所有分區重新加回去
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210105 VALUES LESS THAN (738160) ENGINE = InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210106 VALUES LESS THAN (738161) ENGINE = InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210107 VALUES LESS THAN (738162) ENGINE = InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210108 VALUES LESS THAN (738163) ENGINE = InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210109 VALUES LESS THAN (738164) ENGINE = InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210110 VALUES LESS THAN (738165) ENGINE = InnoDB);
ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION future VALUES LESS THAN MAXVALUE ENGINE = InnoDB);
最后再查看一下 ddl 發現分區加回去了,但這種操作方式會把 p20210104 分區后面的所有分區數據刪除,在正式線上環境中請慎
案例
系統有操作系統表 sys_log,實現每天刪除 90 天前的分區并同時建一個 4 天后的分區(即每天將 4 天后的分區創建表),步驟如下:
## 新建普通表,只執行一次
CREATE TABLE `sys_log` ( `id` bigint(20) NOT NULL AUTO_INCREMENT,
`begin_time` datetime DEFAULT NULL COMMENT 開始時間 ,
`end_time` datetime DEFAULT NULL COMMENT 結束時間 ,
`spend_mills` int(11) DEFAULT NULL COMMENT 運行時長, 單位 ms ,
`username` varchar(100) DEFAULT NULL COMMENT 用戶 id ,
`log_status` int(11) NOT NULL DEFAULT 0 COMMENT 運行狀態,[0]成功 [1] 失敗 ,
`code` int(11) NOT NULL DEFAULT 0 COMMENT 錯誤碼 ,
`remote_addr` varchar(50) DEFAULT COMMENT 遠程地址 ,
`request_uri` varchar(255) DEFAULT NULL COMMENT 請求路徑 ,
`user_agent` text COMMENT 用戶代理 ,
`req_data` text NOT NULL COMMENT 請求參數 ,
`resp_data` longtext NOT NULL COMMENT 返回結果 ,
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_log_begintime` (`begin_time`) USING BTREE COMMENT 系統日志的 beginTime 字段索引
) ENGINE=Innodb DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
## 修改成分區表,只執行一次,留一個當前時間的分區和將來的 future 分區
ALTER TABLE `sys_log` DROP PRIMARY KEY, ADD PRIMARY KEY(`id`,`begin_time`);
alter table sys_log partition by RANGE (to_days(begin_time)) ( PARTITION p20210816 VALUES LESS THAN (738383),
PARTITION future VALUES LESS THAN MAXVALUE
);
## 每天執行以下的分區操作,進行增加一天的分區, 如
ALTER TABLE sys_log drop PARTITION future;
ALTER TABLE sys_log ADD PARTITION (PARTITION p20210817 VALUES LESS THAN (738384) ENGINE = InnoDB);
ALTER TABLE sys_log ADD PARTITION (PARTITION p20210818 VALUES LESS THAN (738385) ENGINE = InnoDB);
ALTER TABLE sys_log ADD PARTITION (PARTITION p20210819 VALUES LESS THAN (738386) ENGINE = InnoDB);
ALTER TABLE sys_log ADD PARTITION (PARTITION future VALUES LESS THAN MAXVALUE ENGINE = InnoDB);
## 定時任務配置,每天執行一次分區的清理與創建
30 4 * * * /bin/python /home/testuser/SyslogPartitionClear.py /dev/null 2 1
關于“mysql 如何刪除分區”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“mysql 如何刪除分區”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道。