Estou com problemas para fazer backup dos meus bancos de dados após uma atualização. Eu ando bisbilhotando no meu sistema tentando descobrir o porquê. Uma consulta que eu 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 para essas 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 mudar o definidor para uma conta diferente em tudo de uma só vez? Existe uma maneira de o mysqldump simplesmente despejar todas as visualizações em um arquivo para que eu possa editar esse arquivo e recriar as visualizações?
Respostas:
Crie um arquivo de texto com todas as definições de exibição:
Você edita AllMyViews.sql a partir daí. Em seguida, solte as visualizações
Após editar o AllMyViews.sql, recarregue-os
De uma chance !!!
fonte
The user specified as a definer ('abc'@'1.2.3.4') does not exist
CREATE USER 'abc'@'1.2.3.4';
. Em seguida, tente novamente.Você pode usar o ALTER VIEW em conjunto com o esquema de informações . Você mencionou despejá-lo em um arquivo de texto, então talvez algo como isto:
Misture isso com a linha de comando do mysql (assumindo * nix, não familiarizado com o windows):
Nota: Você não pode alterar as entradas information_schema diretamente . Nota2: Isso funciona apenas para um banco de dados por vez, se você deixar WHERE table_schema, precisará inserir comandos USE entre cada um.
fonte
SELECT table_name,view_definition FROM information_schema.views WHERE table_schema='cittmp';
retorna| Staff | |
echo "SELECT CONCAT("ALTER DEFINER=\`youruser\`@\`host\` VIEW...
Ao automatizar a solução da Derek, isso mudará DEFINER para
root@localhost
e definidoSQL SECURITY INVOKER
(verifique se você deseja isso primeiro!) Em todas as visualizações em todos os bancos de dados:AVISO: verifique se você fez 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 por precaução ... Funcionou para mim, mas o YMMV .
você também deve verificar todas as suas tabelas / visualizações com:
não deve mais reclamar de definidores inválidos nas visualizações.
fonte
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.fonte
views.sql
ser editadas? Além disso, como recriá-los?DEFINER = olduser@oldhost
paraDEFINER = newuser@newhost
,cat views.sql | mysql <DB>
recria as visualizações.