web-dev-qa-db-fra.com

comment supprimer une partition sans perdre de données dans MySQL?

J'ai une table comme:

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

Pas exactement comme ci-dessus mais similaire à cela ....

Supposons maintenant que ma table comporte 200 000 lignes et que je souhaite maintenant supprimer les partitions de la table et les réorganiser conformément aux exigences sans valeur maximale.

Quelqu'un peut-il m'aider à réorganiser la partition sans perdre de données ou de table et la recréer?

22
vidyadhar
ALTER TABLE tbl REMOVE PARTITIONING;
102
user2643317

Vous pouvez réorganiser la partition p0 en utilisant le ALTER TABLE .. REORGANIZE PARTITION commande.

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

Si vous avez l'intention de modifier le partitionnement d'une table sans perdre de données, utilisez ALTER TABLE ... REORGANIZE PARTITION

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

Notez que cela n'aura de sens que si vous créez réellement plusieurs partitions, par exemple.

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

Jetez un oeil à partitionnement RANGE dans MySQL

Si votre partition p2 devient trop grand, vous pouvez le diviser de la même manière.

7
Michel Feldheim

Si vous souhaitez réorganiser les données tout en conservant les partitions,
vous pouvez consulter les clauses REORGANIZE PARTITION et COALESCE PARTITION de ALTER TABLE
commander.
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html

1
Rahul Bisht

Réorganiser les partitions ne nécessite pas de supprimer toutes les partitions existantes. Vous pouvez spécifier le nouveau partitionnement dans le ALTER TABLE directement la syntaxe, et aucune donnée ne sera perdue.

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. Testé avec MySQL 5.7.11

1
Tse Kit Yam