mysql重建表如何实现分区并保留数据
发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,下文主要给大家带来mysql重建表如何实现分区并保留数据,希望这些文字能够带给大家实际用处,这也是我编辑mysql重建表如何实现分区并保留数据这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。m
千家信息网最后更新 2025年11月12日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安全错误
数据库的锁怎样保障安全
山东企业软件开发机构
湖南大学网络安全学院
公司网络安全心得200字
宿州bim软件开发工程
简述系统数据库及空间数据库特点
怎么看目标站点是数据库
汽车软件开发方向
江苏学生网络技术服务指导
联合式数据库
主成分 面板数据库
网络安全法的主要内容及亮点
intouch服务器历史记录
服务器的安全保密协议
Linux高级服务器管理
车机中控软件开发
服务器断电导致oracle损坏
海南高宇网络技术有限公司梦想花园能赚钱吗
宿迁视频系统服务器
非对话方式数据库
网络安全我们一起努力
厦门市网络安全检察部署会
5g网络技术展开初期谈判
廊坊一触即发网络技术
当前国内国际网络安全
外汇交易ea服务器1g够用吗
高科技网络技术生产厂家
程序员服务器图片
软件开发属于研发费用吗
昆山软件开发开发商
机关网络安全技术防护措施