como largar a partição sem largar dados no MySQL?

Tenho uma tabela como:

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);
Não exactamente como em cima, mas semelhante a isso....

agora assume que a minha tabela tem 200000 linhas e agora quero remover partições na tabela e reorganizá-las de acordo com o requisito sem o valor máximo nela.

Alguém me pode ajudar a reorganizar a partição sem deixar cair dados ou deixar cair a tabela e recriá-la ?

Author: JohnGalt, 2013-01-07

4 answers

ALTER TABLE tbl REMOVE PARTITIONING;
 69
Author: user2643317, 2013-08-01 18:59:42

Você pode reorganizar a partição p0 usando o comando ALTER TABLE .. REORGANIZE PARTITION.

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

Se pretende alterar o particionamento de uma tabela sem perder dados, use a tabela ALTER ... REORGANIZAR A PARTIÇÃO

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

Note que isto não fará sentido enquanto não criar várias partições, por exemplo

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
);

Dá uma vista de olhos ao intervalo de separação em MySQL

Se a sua partição p2 está a ficar demasiado grande, pode dividi-la da mesma forma.

 7
Author: Michel Feldheim, 2013-01-07 09:50:14

Se quiser reorganizar os dados mantendo as partições,
você pode dar uma olhada em reorganizar a partição e COALESCE cláusulas de partição de ALTER TABLE
comando.
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

 1
Author: Rahul Bisht, 2013-01-07 08:21:33

Rearranjar as partições não requer largar todas as partições existentes. Poderá indicar directamente o novo particionamento na sintaxe ALTER TABLE, para que não se percam dados.

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. testada com MySQL 5.7.11

 1
Author: Tse Kit Yam, 2016-08-23 02:57:35