sql >> Base de Datos >  >> RDS >> Mysql

¿Puede MySQL restaurar de manera confiable las copias de seguridad que contienen vistas o no?

Esta pregunta es un poco antigua, pero acabo de perder un par de horas tratando de resolver exactamente el mismo problema, así que supongo que una explicación clara podría ser útil para alguien en el futuro...

Para ir al grano:el problema está en el campo DEFINER en su volcado mysql. Se ve algo como:

/*!50013 DEFINER=`some_user`@`localhost` SQL SECURITY DEFINER */

El problema es que este *[email protected] * siempre estará codificado en la cuenta de usuario que se usó para crear la vista en la base de datos original y NO el usuario que ha utilizado para exportar o importar la base de datos como era de esperar (o al menos lo hice). Y luego, durante la importación, este usuario se usará para volver a crear la vista.

Por lo tanto, puede exportar/importar como raíz, pero si la base de datos original se ejecuta con otro usuario y no tiene derechos de CREAR VISTA en la nueva base de datos, la importación fallará.

Tienes dos soluciones simples:

  1. Buscar y reemplazar todas las referencias a some_user @localhost en su archivo de volcado con su nuevo usuario (el que usa para importar el volcado, por ejemplo, example@ sqldat.com )
  2. O puede otorgar a *some_user* los derechos apropiados en la nueva base de datos para que se puedan crear vistas en su cuenta

Cualquiera de las formas solucionará el problema, pero creo que el primer enfoque es mucho mejor y más limpio, ya que no tiene que preocuparse por múltiples usuarios en el futuro.