¿El comando mysqldump también respaldará todas las vistas que están presentes en DB o hay un comando especial para ello?

10

Estoy tratando de hacer una copia de seguridad de toda mi base de datos junto con las vistas. Voy a usar el mysqldumpcomando. Me preguntaba si eso copiará todas las vistas o si tendré que usar un comando separado para ello.

Por favor sugiérame una respuesta. Cualquier ayuda es muy apreciada.

vinny
fuente

Respuestas:

9

No hay una opción específica para descargar vistas.

Puedes probar lo siguiente:

mysqldump -h... -u... -p... --all-databases --routines --triggers --no-data > /root/MySQLDBSchema.sql
grep "CREATE ALGORITHM" /root/MySQLDBSchema.sql

Deberías poder ver las vistas. Esto indica que cuando volca bases de datos, la vista viene con ella.

Otro truco que puedes probar, solo para obtener solo las vistas, es este:

mysql -uroot -prootpass AN -e"select concat('SHOW CREATE VIEW ',table_schema,'.',table_name,';') from information_schema.views" | sed 's/;/\\G/g' | mysql --uroot -prootpass > /root/MySQLDBViews.sql

Darle una oportunidad !!!

RolandoMySQLDBA
fuente
Muchas gracias por una respuesta tan explicativa. El problema es que mis bases de datos son muy grandes, así que estoy planeando copiar una a la vez. En todo este lío también necesito copiar 'vistas', así que no puedo usar el comando --todas las bases de datos. Sugiera una forma de copiar vistas desde el servidor Mysql DB Server.
vinny
Entonces, en lugar de usar --all-databases, especifique la base de datos que desea.
Derek Downey
1

La mejor respuesta para esto es probablemente esta de olliiiver que he modificado ligeramente. Exporta específicamente una consulta de caída de tabla y una consulta de vista de creación o reemplazo para cada vista en el sistema, sin necesidad de perder el tiempo con ninguna tabla. La consulta de la tabla desplegable a menudo es importante, ya que a mysqldump aparentemente le gusta recrear vistas como tablas a menos que incluya cada vista en su propio parámetro --ignore-table, lo que sería molesto. Utiliza INFORMATION_SCHEMA.

mysql --skip-column-names --batch \
  -e "SELECT CONCAT('DROP TABLE IF EXISTS ', TABLE_SCHEMA, '.', TABLE_NAME, \
  '; CREATE OR REPLACE VIEW ', TABLE_SCHEMA, '.', TABLE_NAME, ' AS ', \
  VIEW_DEFINITION, '; ') AS q FROM INFORMATION_SCHEMA.VIEWS"

Si desea convertir algo como esto en un script de shell, también le recomiendo usar el parámetro --defaults-extra-file = CREDSFILENAME, para que no necesite especificar usuario / pasar en el script.

El archivo de credenciales se ve así:

[client]
username=YourUsernameHere
password=YourPasswordHere
RedScourge
fuente