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 ?4 answers
ALTER TABLE tbl REMOVE PARTITIONING;
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.
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
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