Estou tendo problemas para fazer backup de meus bancos de dados após uma atualização. Eu estive bisbilhotando no meu sistema tentando descobrir o porquê. Uma consulta que executei retornou esse resultado.
Got error: 1449: The user specified as a definer ('cittool'@'%') does not exist when using LOCK TABLES
Após alguma investigação, parece que o definidor dessas visualizações é uma conta de desenvolvedor antiga que foi removida do sistema. Os bancos de dados e visualizações com esse problema são usados com pouca frequência e a maioria é mantida para fins de arquivamento.
Existem cerca de 40 visualizações com um definidor que não existe mais. Existe uma maneira fácil de alterar o definidor para uma conta diferente em tudo de uma só vez? Existe uma maneira de fazer o mysqldump simplesmente despejar todas as visualizações em um arquivo para que eu possa editar esse arquivo e recriar as visualizações?
Você pode usar ALTER VIEW em conjunto com o esquema de informações . Você mencionou despejá-lo em um arquivo de texto, então talvez algo assim:
Misture isso com a linha de comando mysql (assumindo * nix, não familiarizado com o Windows):
Nota lateral: Você não pode alterar as entradas information_schema diretamente . Nota2: Isso funciona para apenas um banco de dados por vez, se você deixar WHERE table_schema você precisa inserir comandos USE entre cada um.
Crie um arquivo de texto com todas as definições de visualização:
Você edita AllMyViews.sql a partir daí. Em seguida, solte as visualizações
Depois de editar AllMyViews.sql, recarregue-os
De uma chance !!!
Automatizando na solução do Derek, isso mudará o DEFINER para
root@localhost
e definiráSQL SECURITY INVOKER
(certifique-se de que deseja isso primeiro!) em todas as visualizações em todos os bancos de dados:AVISO: certifique-se de ter feito um backup completo do mysql (por exemplo, parando o mysqld e fazendo backup de todos os arquivos em /var/lib/mysql) antes de executá-lo - apenas no caso ... Funcionou para mim, mas YMMV .
você também deve verificar todas as suas tabelas/visualizações com:
ele não deve mais reclamar de definidores inválidos nas visualizações.
Exporte todas as visualizações do banco de dados
<DB>
:ou:
Edite
views.sql
(altere o definidor) e recrie-os:Especifique
-u
e-p
alterne se necessário.Eu criei um script python simples que substitui o definidor de banco de dados de produção pelo definidor de banco de dados local. Este script modificará os arquivos de despejo e importará automaticamente os bancos de dados especificados.
Repo GIT: https://github.com/mjakal/db-auto-import
Script de importação automática de banco de dados
Este script resolve o problema do definidor de usuário ao importar bancos de dados de um servidor sql para outro (por exemplo, servidor de produção para servidor de desenvolvimento local). Ele modifica a entrada do definidor do usuário em todas as visualizações/procedimentos armazenados dentro dos arquivos de despejo sql. Depois de modificar o definidor, ele importará automaticamente os bancos de dados especificados.
Requisitos
NOTA - Se você estiver usando Percona, comente a linha 58 e descomente a linha 60
Configuração
Abra o script db_auto_import.py em seu editor de texto favorito e edite as linhas abaixo.
Como executar o script
Primeiro, precisamos copiar/colar todos os arquivos de despejo de produção na pasta /dumps/. Os nomes dos arquivos de despejo devem corresponder aos nomes especificados na lista dump_files. Verifique sua configuração e execute o comando abaixo.
solução: