溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

mysql重建表如何實現(xiàn)分區(qū)并保留數(shù)據(jù)

發(fā)布時間:2020-05-07 11:43:21 來源:億速云 閱讀:483 作者:三月 欄目:MySQL數(shù)據(jù)庫

下文主要給大家?guī)?a title="mysql" target="_blank" href="http://www.kemok4.com/mysql/">mysql重建表如何實現(xiàn)分區(qū)并保留數(shù)據(jù),希望這些文字能夠帶給大家實際用處,這也是我編輯mysql重建表如何實現(xiàn)分區(qū)并保留數(shù)據(jù)這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。

mysql重建表分區(qū)并保留數(shù)據(jù)的方法:

1.創(chuàng)建與原始表一樣結(jié)構(gòu)的新表,新分區(qū)。
2.將原始表中數(shù)據(jù)復(fù)制到新表。
3.刪除原始表。
4.將新表名稱改為原始表名稱。

實例:

日志表原始結(jié)構(gòu)如下,按id分區(qū)。

CREATE DATABASE `test`;use `test`;CREATE TABLE `log` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `content` text NOT NULL COMMENT '內(nèi)容', `status` tinyint(3) unsigned NOT NULL COMMENT '記錄狀態(tài)', `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'));

查看數(shù)據(jù)分區(qū)分布

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 |
+----------------+------------+


日志數(shù)據(jù)需要按時間進行搜尋,因此需要按日志時間重建分區(qū)。

1.創(chuàng)建log2,按時間分區(qū)(每月1個分區(qū))

CREATE TABLE `log2` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `content` text NOT NULL COMMENT '內(nèi)容', `status` tinyint(3) unsigned NOT NULL COMMENT '記錄狀態(tài)', `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的數(shù)據(jù)復(fù)制到log2

insert into `log2` select * from `log`;


3.刪除log表

drop table `log`;


4.將log2表改名為log

rename table `log2` to `log`;


執(zhí)行后查看數(shù)據(jù)分區(qū)分布

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 |
+----------------+------------+

對于以上關(guān)于mysql重建表如何實現(xiàn)分區(qū)并保留數(shù)據(jù),大家是不是覺得非常有幫助。如果需要了解更多內(nèi)容,請繼續(xù)關(guān)注我們的行業(yè)資訊,相信你會喜歡上這些內(nèi)容的。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI