Mysql
 sql >> Database >  >> RDS >> Mysql

Errore:esiste un tablespace per la tabella xxx. Per favore SCARTA lo spazio tabella prima dell'IMPORTAZIONE

Un po' tardi qui, ma in genere ho visto che questo problema si verifica quando si riceve un errore "spazio tabella pieno" durante l'esecuzione in modalità "innodb_file_per_table". Senza entrare troppo nei dettagli (maggiori informazioni qui ), lo spazio tabella del server del database è definito dall'impostazione innodb_data_file_path e per impostazione predefinita è piuttosto piccolo. Anche ingrandito, il "tablespace pieno" può ancora verificarsi con query più grandi e simili (molte "cose" non di tabella sono archiviate lì, registri di annullamento, cache, ecc.).

Ad ogni modo, ho scoperto che se guardi nella directory del sistema operativo in cui sono archiviati i file per tabella, /var/lib/mysql per impostazione predefinita su OSX, /usr/local/var/mysql con homebrew iirc, troverai un nometabella.ibd orfano senza il normale file nometabella.frm associato. Se sposti il ​​file .ibd in una posizione temporanea sicura (solo per sicurezza), questo dovrebbe risolvere il problema.

$ ls /var/lib/mysql

table1.frm
table1.idb
table2.frm
table2.idb
table3.idb <- problem table, no table3.frm
table4.frm
table4.idb

$ mkdir /tmp/mysql_orphans
$ mv /var/lib/mysql/table3.ibd /tmp/mysql_orphans/

Un avvertimento però, assicurati che cosa stia causando il problema originariamente, ad es. la query di lunga durata, la tabella bloccata, ecc... è stata cancellata. Altrimenti ti ritroverai con un altro file .ibd orfano quando provi una seconda volta.