이 글에서는 테이블 파티션을 재구축하고 데이터를 유지하는 MySQL의 방법을 소개합니다. MySQL 테이블 파티션(파티션)은 테이블의 레코드를 여러 영역으로 분리하여 저장할 수 있습니다. 쿼리 시 해당 파티션에서 검색할 수 있습니다. 쿼리 조건 없이 쿼리 효율성을 높이려면 테이블 전체를 쿼리해야 합니다.
파티션된 테이블과 파티션이 없는 테이블을 사용하면 큰 차이가 없지만 테이블을 다시 파티셔닝하려는 경우 파티션을 삭제하고 다시 빌드하면 데이터가 삭제되므로 직접 조작할 수 없으며 일부 특수 처리를 수행해야 합니다. 달성이 필요합니다.
테이블 파티션을 재구축하고 데이터를 유지하는 Mysql 방법:
1. 원본 테이블과 동일한 구조로 새 테이블과 새 파티션을 만듭니다.
2. 원본 테이블의 데이터를 새 테이블에 복사합니다.
3. 원본 테이블을 삭제하세요.
4. 새 테이블 이름을 원래 테이블 이름으로 변경합니다.
예:
로그 테이블의 원래 구조는 id별로 구분되어 있습니다.
1 2 3 4 5 6 7 8 9 10 11 | 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
;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'));
|
로그인 후 복사
데이터 파티션 분포 보기
1 2 3 4 5 6 | 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개 파티션)
1 2 3 4 5 6 7 8 | 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
;
|
로그인 후 복사
2. 로그 데이터를 log2에 복사합니다.
1 | insert into `log2` select * from `log`;
|
로그인 후 복사
3. 로그 테이블 삭제
. log2 테이블의 이름을 log
1 | rename table `log2` to `log`;
|
로그인 후 복사
로 변경합니다.
실행 후 데이터 파티션 분포를 확인합니다
1 2 3 4 5 6 | 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의 관련 방법을 설명합니다. 더 많은 관련 지식을 보려면 PHP 중국어 웹사이트를 참고하세요.
관련 권장사항:
객체 전용 속성을 지원하지 않는 PHP json_encode에 대한 설명
고유한 RequestID 클래스 관련 콘텐츠를 생성하는 PHP에 대한 설명
MySQL 데이터베이스 테이블 용량 크기 보기
위 내용은 테이블 파티션을 재구축하고 데이터를 유지하는 mysql 관련 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!