mysql重建表如何实现分区并保留数据
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,下文主要给大家带来mysql重建表如何实现分区并保留数据,希望这些文字能够带给大家实际用处,这也是我编辑mysql重建表如何实现分区并保留数据这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。m
千家信息网最后更新 2026年11月02日mysql重建表如何实现分区并保留数据
下文主要给大家带来mysql重建表如何实现分区并保留数据,希望这些文字能够带给大家实际用处,这也是我编辑mysql重建表如何实现分区并保留数据这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。
mysql重建表分区并保留数据的方法:
1.创建与原始表一样结构的新表,新分区。
2.将原始表中数据复制到新表。
3.删除原始表。
4.将新表名称改为原始表名称。
实例:
日志表原始结构如下,按id分区。
CREATE DATABASE `test`;use `test`;CREATE TABLE `log` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `content` text NOT NULL COMMENT '内容', `status` tinyint(3) unsigned NOT NULL COMMENT '记录状态', `addtime` int(11) unsigned NOT NULL COMMENT '添加时间', `lastmodify` int(11) unsigned NOT NULL COMMENT '最后修改时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8/*!50100 PARTITION BY RANGE (id)(PARTITION p10w VALUES LESS THAN (100000) ENGINE = InnoDB,PARTITION p20w VALUES LESS THAN (200000) ENGINE = InnoDB,PARTITION p50w VALUES LESS THAN (500000) ENGINE = InnoDB,PARTITION p100w VALUES LESS THAN (1000000) ENGINE = InnoDB,PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */;insert into `log`(content,status,addtime,lastmodify) values('content1',1, unix_timestamp('2018-01-11 00:00:00'), unix_timestamp('2018-01-11 00:00:00')),('content2',1, unix_timestamp('2018-02-22 00:00:00'), unix_timestamp('2018-02-22 00:00:00')),('content3',1, unix_timestamp('2018-03-31 00:00:00'), unix_timestamp('2018-03-31 00:00:00'));查看数据分区分布
SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='test' AND TABLE_NAME = 'log';+----------------+------------+| PARTITION_NAME | TABLE_ROWS |+----------------+------------+| p10w | 3 || p20w | 0 || p50w | 0 || p100w | 0 || pmax | 0 |+----------------+------------+
日志数据需要按时间进行搜寻,因此需要按日志时间重建分区。
1.创建log2,按时间分区(每月1个分区)
CREATE TABLE `log2` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `content` text NOT NULL COMMENT '内容', `status` tinyint(3) unsigned NOT NULL COMMENT '记录状态', `addtime` int(11) unsigned NOT NULL COMMENT '添加时间', `lastmodify` int(11) unsigned NOT NULL COMMENT '最后修改时间', PRIMARY KEY (`id`,`addtime`), KEY `id`(`id`), KEY `addtime`(`addtime`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8/*!50100 PARTITION BY RANGE (addtime)(PARTITION p201801 VALUES LESS THAN (unix_timestamp('2018-02-01 00:00:00')) ENGINE = InnoDB,PARTITION p201802 VALUES LESS THAN (unix_timestamp('2018-03-01 00:00:00')) ENGINE = InnoDB,PARTITION p201803 VALUES LESS THAN (unix_timestamp('2018-04-01 00:00:00')) ENGINE = InnoDB,PARTITION p201804 VALUES LESS THAN (unix_timestamp('2018-05-01 00:00:00')) ENGINE = InnoDB,PARTITION pmax VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */;
2.将log的数据复制到log2
insert into `log2` select * from `log`;
3.删除log表
drop table `log`;
4.将log2表改名为log
rename table `log2` to `log`;
执行后查看数据分区分布
SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA='test' AND TABLE_NAME = 'log';+----------------+------------+| PARTITION_NAME | TABLE_ROWS |+----------------+------------+| p201801 | 1 || p201802 | 1 || p201803 | 1 || p201804 | 0 || pmax | 0 |+----------------+------------+
对于以上关于mysql重建表如何实现分区并保留数据,大家是不是觉得非常有帮助。如果需要了解更多内容,请继续关注我们的行业资讯,相信你会喜欢上这些内容的。
数据
时间
原始
内容
日志
下文
名称
状态
结构
实例
实际
废话
文字
方法
更多
用处
目的
篇文章
行业
资讯
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
湖北九亚互联网络科技有限公司
广州淘业互联网络科技
山东特亿宝互联网科技有限公司
广州百单互联网科技有限公司
北京互联网科技公司
有马互联网科技
互联网科技股有哪些
海南购全球互联网科技
创业天下互联网科技有限公司
工业互联网展湾科技股份有限公司
互联网第三次科技革命特征
上海钢联属于互联网科技股吗
互联网安防科技感
东营紫格互联网科技
世界互联网科技成果奖
江苏互联网智能科技产品出厂价
互联网科技新闻
陕西九四连强互联网科技有限公司
兰石爱特工业互联网科技分公司
科技和互联网行业的特点
苏州找大状互联网科技有限公司
厦门中拓互联网络科技有限公司
没上市的科技互联网公司
太原新华互联网科技学校怎么样
济南华为互联网科技产业总部基地
洛阳昕诺飞互联网科技有限公司
广州千川互联网科技有限公司
山东蛋芒互联网科技有限公司
中国主要互联网科技公司
武汉亿视互联网科技有限公司