¿Cómo soltar todas las tablas en una base de datos MySQL sin soltar la base de datos?
12
Necesito soltar todas las tablas en una base de datos sin saber sus nombres de antemano. El procedimiento típico es colocar y volver a crear la base de datos, pero esta no es una opción. ¿Cuál es la mejor manera de hacerlo?
Por cierto, ¿por qué escribes '$' antes del valor de IFS? ¿Por qué no se ve como "IFS = '\ n'"?
kolypto
@o_OTync El uso $''hace que bash interprete secuencias con barra invertida en lugar de tomarlas literalmente. '\n'contendría exactamente \ n, así como así, lo $IFSque entendería es dividir en \ y n caracteres. $'\n'contendría un carácter de nueva línea, 0x0D. Eche un vistazo aquí para obtener más información: gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting .
Jeff Snider el
Creo que esto es más simple que usar el INFORMATION_SCHEMA.
Si tiene acceso al sistema de archivos, entonces solo rm -rf databasename/*:).
La declaración de la base de datos Drop hace lo mismo ... Extracto del manual de MySQL:
La instrucción DROP DATABASE elimina del directorio de base de datos dado aquellos archivos y directorios que MySQL puede crear durante el funcionamiento normal:
Muy mala idea para cualquier configuración no trivial como MySQL no está esperando estos archivos a desaparecer repentinamente y podría estar en el medio de cualquier número de operaciones, transacciones, replicación, cerraduras ...
bot403
¿Consideraría revisar su respuesta para incluir los comandos y el procedimiento adecuados?
Respuestas:
Hay un bash one-liner más simple usando mysqldump (del blog Thingy Ma Jig ).
Si recibes este error:
Intenta lo siguiente:
Ahora ignora las restricciones.
fuente
Debe usar las tablas de información_esquema para obtener los metadatos sobre la base de datos y luego soltar las tablas que se enumeran allí.
fuente
También puedes probar un script de shell rápido para hacerlo:
Elimine
echo
después de haber comprobado que va a hacer lo que espera.fuente
$''
hace que bash interprete secuencias con barra invertida en lugar de tomarlas literalmente.'\n'
contendría exactamente \ n, así como así, lo$IFS
que entendería es dividir en \ y n caracteres.$'\n'
contendría un carácter de nueva línea, 0x0D. Eche un vistazo aquí para obtener más información: gnu.org/software/bash/manual/bashref.html#ANSI_002dC-Quoting .Hubo una entrada en el blog de Xaprb recientemente que cubre esto muy bien.
Incluye por qué usar
INFORMATION_SCHEMA
no siempre es algo bueno y hace referencia a una herramienta de esas personas encantadoras en Maatkit .Pruebe lo siguiente con
mk-find
:Si está satisfecho con los resultados, entonces:
fuente
Si tiene acceso al sistema de archivos, entonces solo
rm -rf databasename/*
:).La declaración de la base de datos Drop hace lo mismo ... Extracto del manual de MySQL:
La instrucción DROP DATABASE elimina del directorio de base de datos dado aquellos archivos y directorios que MySQL puede crear durante el funcionamiento normal:
fuente