
Accidentalmente dejé caer todas las mesas. ¿Puedo restaurar de nuevo? No tengo la copia de seguridad.
Respuesta1
Si literalmente no tienes respaldo, estoy 99% seguro de que no tendrás suerte.
Si tiene algún tipo de copia de seguridad, por antigua que sea, ¿tiene activado el registro binario mediante la opción log-bin en el archivo de configuración de MySQL (my.ini)? Si es así, es posible que puedas recuperarlos desde la última copia de seguridad.
Mala manera de empezar la semana amigo, lo siento.
Respuesta2
La pregunta es bastante antigua, pero no hay una única respuesta positiva, así que agregaré una.
Después de que MySQL elimina una tabla, los datos todavía permanecen en el medio por un tiempo. Para que pueda recuperar registros y reconstruir una tabla. Más adelante escribiré un blog sobre esto, pero por ahora es un boceto rápido.
Necesitaría tener la estructura de su tabla (declaración CREATE TABLE).
Si innodb_file_per_table está activado, la tabla eliminada está en la partición del disco. Detenga MySQL y vuelva a montarlo como de solo lectura lo antes posible. Si MySQL estaba en una partición raíz (lo cual no es una buena idea, por cierto), tome una imagen o saque el disco y conéctelo a otro servidor. En otras palabras, detenga todas las escrituras.
Si innodb_file_per_table está APAGADO, simplemente detenga MySQL.
Luego descargue y compile la herramienta de desinstalación para InnoDB desdehttps://github.com/twindb/undrop-for-innodb/. Consulte la publicación "[Compilación del kit de herramientas de recuperación de TwinDB][1]" para obtener más detalles.
Luego analice la partición del disco o ibdata1 (dependiendo de la configuración de innodb_file_per_table) con stream_parser:
./stream_parser -f /path/to/diskimage_or_ibdata1
Luego recupere el diccionario InnoDB para saber en qué index_id estaba la tabla eliminada.
Luego tome la estructura de la tabla y busque los registros.
./c_parser -f pages-diskimage_or_ibdata1/FIL_PAGE_INDEX/00000<index_id>.page
Enviará registros a stdout y el comando LOAD DATA a stderr. [1]:https://twindb.com/how-to-recover-innodb-dictionary/
Videotutorial de PS sobre Undrop para InnoDB: descripción general de Undrop para InnoDBhttps://youtu.be/-1LeLhGjAWM
Respuesta3
Esto es lo que hice. En el directorio mysql (para Ubuntu es /var/lib/mysql, para Mac que usa Homebrew es /usr/local/var/mysql), encontré algunos archivos. Primero copié el directorio myapp_development/ que contiene el esquema particular en mi directorio mysql local. Luego hice una copia de seguridad de mi ibdata1 local y copié el ibdata1 del servidor en el directorio mysql. Mató a mysqld. ( ps aux
para encontrar el PID, entonces kill PID
). Reinicié mysql, se inició en modo de recuperación de fallos. Luego encendí mi cliente MySQL local y generé un volcado completo de las tablas que necesitaba.
¡Y se guardan 15.000 filas que representan semanas de trabajo ingresando metadatos que pensábamos que habían desaparecido para siempre!
Espero que esto ayude a alguien.
Respuesta4
No se puede "deshacer" un archivo DROP TABLE
.
Puedes mirar y ver si ese MySQL teníaregistro binariohabilitado, tal vez puedas extraer algunos datos de allí.
Aparte de eso, puedes olvidarte de MySQL y estar en la misma clase de problemas de "Eliminé accidentalmente algunos archivos de mi sistema de archivos". Existen algunas herramientas que intentan recuperar archivos y también hay empresas que lo hacen de forma profesional.