下文主要給大家?guī)鞰ySQL重建表如何實現(xiàn)分區(qū)并保留數(shù)據(jù),希望這些文字能夠帶給大家實際用處,這也是我編輯mysql重建表如何實現(xiàn)分區(qū)并保留數(shù)據(jù)這篇文章的主要目的。好了,廢話不多說,大家直接看下文吧。
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供夏津網(wǎng)站建設(shè)、夏津做網(wǎng)站、夏津網(wǎng)站設(shè)計、夏津網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、夏津企業(yè)網(wǎng)站模板建站服務(wù),10余年夏津做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
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)容的。
標(biāo)題名稱:mysql重建表如何實現(xiàn)分區(qū)并保留數(shù)據(jù)
文章URL:http://jinyejixie.com/article16/ggipdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機、網(wǎng)頁設(shè)計公司、、動態(tài)網(wǎng)站、全網(wǎng)營銷推廣、網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)