Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

O MySQL pode restaurar de forma confiável backups que contêm visualizações ou não?


Esta pergunta é um pouco antiga, mas acabei de perder algumas horas tentando resolver exatamente o mesmo problema, então acho que uma explicação clara pode ser útil para alguém no futuro ...

Para ir direto ao assunto:O problema está no campo DEFINER no seu dump do mysql. Parece algo como:
/*!50013 DEFINER=`some_user`@`localhost` SQL SECURITY DEFINER */

O problema é que este *[email protected] * sempre será codificado para a conta de usuário que foi usada para criar a visualização no banco de dados original e NÃO o usuário que você usou para exportar ou importar o banco de dados como seria de esperar (ou pelo menos eu fiz). E posteriormente, durante a importação, esse usuário será usado para recriar a visualização.

Portanto, você pode exportar/importar como root, mas se o banco de dados original estiver sendo executado em outro usuário e não tiver direitos CREATE VIEW no novo banco de dados, a importação falhará.

Você tem duas soluções simples:
  1. Pesquise e substitua todas as referências a some_user @localhost em seu arquivo de despejo com seu novo usuário (o que você usa para importar o despejo, por exemplo, example@ sqldat. com )
  2. Ou você pode conceder a *some_user* os direitos apropriados no novo banco de dados para que as visualizações possam ser criadas na conta dele

De qualquer forma, resolverá o problema, mas acho que a primeira abordagem é muito melhor e mais limpa, pois você não precisa se preocupar com vários usuários no futuro.