Quindi ho un server db di prova che è stato installato su un flusso di replica. Sopra il nome è emersa un'ottimizzazione che ha riempito rapidamente lo spazio sul datadir degli slave. Mysql stava aspettando diligentemente un po 'più di spazio.
Questo datadir è un file system usato SOLO come datadir di mysql, quindi non c'era nient'altro da liberare.
Avevo una tabella di test innodb da 4 concerti che non faceva parte del flusso di replica, quindi ho pensato di provare qualcosa per vedere se funzionava, ed essendo un ambiente di test non ero troppo preoccupato se le cose fossero andate terribilmente male.
Ecco i passi che ho preso
- Svuotato il tavolo che stavo per spostare
- Posizionato un blocco di lettura su di esso (anche se non c'era nulla di scritto e non era nel flusso di replica)
- Copiato .frm e .ibd su un filesystem con spazio libero
- Sbloccato il tavolo
- Ha troncato quella tabella: questo ha liberato abbastanza spazio perché l'ottimizzazione finisse, facendo ricominciare a replicare la replica.
- Smettere di schiavizzare / spegnere mysql
- Copia il file da tmp alla directory dei dati
- Riavvia mysql
Nulla viene visualizzato nel registro .err, le cose sembrano buone. Mi collego e utilizzo mydb; e vedere la tabella con cui stavo scherzando nelle tabelle degli spettacoli. Ma se ci provo
select * from testtable limit 10;
Ottengo l'errore
ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist
Da quello che posso dire finora posso leggere bene da tutte le altre tabelle e la replica è stata avviata senza alcun reclamo.
C'è qualcosa che posso fare per recuperare da questo punto? Posso ricostruirlo da zero, se necessario, ma ero curioso di ciò che gli altri pensavano di questa impresa in generale. C'era qualcosa nella serie di passi che avrei fatto con risultati più impeccabili?
E se questo non fosse un server di prova non potrei semplicemente 'farlo dal vivo' e vedere cosa succede? Quale sarebbe il modo migliore per liberare temporaneamente spazio su uno slave di produzione se dovessi farlo?
Table 'X' doesn't exist in engine
. Devo fare il metodo sopra per ogni tabella o ci sono modi migliori per risolverlo?