14

Ho una tabella del tipo:come rilasciare la partizione senza perdere dati in 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); 

Non esattamente come sopra, ma simile a quello ....

Supponiamo ora che la mia tabella ha 200.000 righe e ora voglio rimuovere le partizioni sul tavolo e riorganizzarli in base al requisito senza MAX VALORE in esso.

Qualcuno può aiutarmi a riordinare la partizione senza perdere dati o rilasciare la tabella e ricrearla?

risposta

7

È possibile riorganizzare la partizione p0 usando il comando ALTER TABLE .. REORGANIZE PARTITION.

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

Se avete intenzione di cambiare il partizionamento di una tabella senza perdere i dati, utilizzare ALTER TABLE ... RIORGANIZZARE PARTITION

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

Nota che questo non avrà senso fino in effetti crei diverse partizioni, ad es

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

Dai un'occhiata alla RANGE partitioning in MySQL

Se la partizione p2 sta diventando troppo grande è possibile dividere allo stesso modo.

60
ALTER TABLE tbl REMOVE PARTITIONING; 
+0

Questa è la risposta corretta, contrassegnare gentilmente questo. –

+0

Questa dovrebbe essere la risposta corretta alla domanda. – Sugan

1

partizioni Riorganizzare non richiede cadere tutte le partizioni esistenti. È possibile specificare direttamente il nuovo partizionamento nella sintassi ALTER TABLE e nessun dato andrà perso.

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. Testato con MySQL 5.7.11