14

Tôi có một bảng như:làm thế nào để thả phân vùng mà không làm rơi dữ liệu trong MySQL?

create table registrations( 
id int not null auto_increment primary key, 
name varchar(50), 
mobile_number varchar(13)) 
engine=innodb 
partition by range(id) (
partition p0 values less than (10000), 
partition p0 values less than (20000), 
partition p0 values less than max value); 

Không chính xác như trên nhưng tương tự như ....

Bây giờ giả sử rằng bàn của tôi có 200000 hàng và bây giờ tôi muốn loại bỏ các phân vùng trên bàn và tổ chức lại chúng theo yêu cầu mà không có MAX VALUE trong đó.

Có thể bất kỳ ai giúp tôi sắp xếp lại phân vùng mà không làm rơi dữ liệu hoặc thả bảng và tạo lại không?

Trả lời

1

Nếu bạn muốn sắp xếp lại các dữ liệu trong khi vẫn giữ các phân vùng,
bạn có thể có một cái nhìn tại tổ chức lại PARTITION và COLALESCE khoản PARTITION của ALTER TABLE
lệnh.
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

7

Bạn có thể sắp xếp lại phân vùng p0 bằng lệnh ALTER TABLE .. REORGANIZE PARTITION.

http://dev.mysql.com/doc/refman/5.5/en/partitioning-management-range-list.html

Nếu bạn có ý định thay đổi phân vùng của một bảng mà không làm mất dữ liệu, sử dụng ALTER TABLE ... Tổ chức lại PARTITION

ALTER TABLE registrations 
REORGANIZE PARTITION p0 INTO (
    PARTITION p0 VALUES LESS THAN (10000), 
    PARTITION p0 VALUES LESS THAN (20000) 
); 

Lưu ý rằng điều này sẽ không có ý nghĩa cho đến khi bạn thực sự tạo ra một số phân vùng ví dụ

ALTER TABLE registrations 
REORGANIZE PARTITION p0 INTO (
    PARTITION p0 VALUES LESS THAN (10000), 
    PARTITION p1 VALUES LESS THAN (20000), 
    PARTITION p2 VALUES LESS THAN MAXVALUE 
); 

Có một cái nhìn tại RANGE partitioning in MySQL

Nếu phân vùng bạn p2 đang trở thành quá lớn bạn có thể chia nó theo cùng một cách.

60
ALTER TABLE tbl REMOVE PARTITIONING; 
+0

Đây là câu trả lời đúng, vui lòng đánh dấu điều này. –

+0

Đây phải là câu trả lời đúng cho câu hỏi. – Sugan

1

Sắp xếp lại phân vùng không yêu cầu thả tất cả phân vùng hiện có. Bạn có thể chỉ định phân đoạn mới trong cú pháp trực tiếp ALTER TABLE và không có dữ liệu nào bị mất.

ALTER TABLE registrations 
PARTITION by RANGE(id) (
PARTITION p1 VALUES LESS THAN (10000), 
PARTITION p2 VALUES LESS THAN (20000), 
PARTITION p3 VALUES LESS THAN (30000), 
PARTITION p4 VALUES LESS THAN (40000), 
PARTITION p5 VALUES LESS THAN (MAXVALUE); 

P.S. Được thử nghiệm với MySQL 5.7.11

Các vấn đề liên quan