Así que tengo un servidor de base de datos de prueba que se configuró en una secuencia de replicación. Sobre el nombre apareció una optimización que rápidamente llenó el espacio en el datadir de esclavos. Mysql obedientemente estaba esperando un poco más de espacio.
Este datadir es un sistema de archivos utilizado SOLO como el datadir de mysql, por lo que no había nada más que liberar.
Tenía una tabla de prueba innodb de 4 gigas que no formaba parte del flujo de replicación, así que pensé en probar algo para ver si funcionaba, y al ser un entorno de prueba, no me preocupaba demasiado si las cosas salían terriblemente mal.
Aquí están los pasos que tomé
- Vacié la mesa que estaba a punto de mover.
- Coloqué un bloqueo de lectura en él (aunque no había nada escrito y no estaba en la secuencia de replicación)
- Copié el .frm y .ibd en un sistema de archivos con alguna habitación libre
- Desbloqueó la mesa
- Truncado esa tabla: esto liberó suficiente espacio para que la optimización finalice y la replicación comience a funcionar nuevamente.
- Dejar de esclavizar / apagar mysql
- Copie el archivo de tmp nuevamente al directorio de datos
- Reiniciar mysql
No aparece nada en el registro .err, las cosas se ven bien. Me conecto y uso mydb; y veo la mesa con la que estaba jugando en las mesas de exhibición. Pero si lo intento
select * from testtable limit 10;
Me sale el error
ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist
Por lo que puedo decir hasta ahora, puedo leer de todas las otras tablas muy bien y la replicación comenzó de nuevo sin ninguna queja.
¿Hay algo que pueda hacer para recuperarme de este punto? Puedo reconstruirlo desde cero si es necesario, pero tenía curiosidad sobre lo que otros pensaban sobre esta empresa en general. ¿Hubo algo en la serie de pasos que tomé que hubiera terminado con resultados más perfectos?
¿Qué pasaría si este no fuera un servidor de prueba que no podría simplemente 'hacerlo en vivo' y ver qué pasa? ¿Cuál sería la mejor manera de liberar espacio temporalmente en un esclavo de producción si me tuviera que gustar?
Table 'X' doesn't exist in engine
. ¿Tengo que hacer el método anterior para cada una de las tablas o hay mejores formas de solucionarlo?