MySql - Trasformare ROW_FORMAT da Compact a Dynamic in Tabelle InnoDB
Quanto segue vale solo per tabelle basate su ENGINE InnoDB e non MyISAM o altro.
La procedura può essere facilmente adeguata per altri formati ROW_FORMAT e/o per altri ENGINE .
VERIFICHE PRELIMINARI
----------------------------
Listare le tabelle InnoDB presenti nell'intero DataBase che hanno ROW_FORMAT settato a Compact:
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE ROW_FORMAT='compact';
Listare le tabelle InnoDB presenti nell'intero DataBase che hanno ROW_FORMAT diverso da Compact:
SELECT * FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE ROW_FORMAT!='compact';
Listare TUTTE le tabelle (i.e. anche NON InnoDB) presenti nell'intero DataBase che hanno ROW_FORMAT diverso da Compact:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE ROW_FORMAT!='compact';
Listare TUTTE le tabelle (i.e. anche NON InnoDB) presenti nell'intero DataBase che hanno ROW_FORMAT diverso da Dynamic:
SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE ROW_FORMAT!='dynamic';
----------------------------------------------------------------------------------------------------------------
PRODURRE UNA LISTA DI QUERY PER AGGIORNARE LE TABELLE
-----------------------------------------------------------------------
SELECT CONCAT("ALTER TABLE ", NAME,' ROW_FORMAT=DYNAMIC;')
FROM INFORMATION_SCHEMA.INNODB_SYS_TABLES WHERE ROW_FORMAT='compact';
Questa produrrà una lista di query differenziabile per DataBase così da poter scegliere i singoli DB su cui eseguire o meno la migrazione.
Le sing
ALTER TABLE MySite1DB/gtr8D_modules_menu ROW_FORMAT=DYNAMIC;
ALTER TABLE MySite1DB/gtr8D_newsfeeds ROW_FORMAT=DYNAMIC;
ALTER TABLE MySite1DB/gtr8D_overrider ROW_FORMAT=DYNAMIC;
ALTER TABLE MySite1DB/gtr8D_redirect_links ROW_FORMAT=DYNAMIC;
ALTER TABLE MySite1DB/gtr8D_schemas ROW_FORMAT=DYNAMIC;
ALTER TABLE MyDB2/fdtrr4_modules_menu ROW_FORMAT=DYNAMIC;
ALTER TABLE MyDB2/fdtrr4_newsfeeds ROW_FORMAT=DYNAMIC;
ALTER TABLE MyDB2/fdtrr4_overrider ROW_FORMAT=DYNAMIC;
ALTER TABLE MyDB2/fdtrr4_redirect_links ROW_FORMAT=DYNAMIC;
ALTER TABLE MyDB2/fdtrr4_schemas ROW_FORMAT=DYNAMIC;
....
Per ogni singolo DataBase che si vuole trasformare, ripetere la seguente procedura:
1. Eliminare, con un editor di testo, le stringhe "<nomeDB>/" da tutte le query:
ALTER TABLE fdtrr4_modules_menu ROW_FORMAT=DYNAMIC;
ALTER TABLE fdtrr4_newsfeeds ROW_FORMAT=DYNAMIC;
ALTER TABLE fdtrr4_overrider ROW_FORMAT=DYNAMIC;
ALTER TABLE fdtrr4_redirect_links ROW_FORMAT=DYNAMIC;
ALTER TABLE fdtrr4_schemas ROW_FORMAT=DYNAMIC;
2. Entrare nel DB desiderato: (con phpMyAdmin, anziché usare il comando, selezionare il DB)
USE MyDB2
3. Eseguire in blocco le query del punto 1