Backup e restauração do MySQL com visualizações

3

Estou tendo problemas para fazer com que os backups do mysql sejam executados corretamente quando eles são vistos no banco de dados. Eu acho que isso pode ter algo a ver com a necessidade de um objeto de espaço reservado para isso. De qualquer forma eu executo este comando:

mysqldump -u myuser -pmypassword mydatabase | mysql -u myuser -pmypassword -C mydatabase_Beta

O usuário tem privilégios totais e eu recebo isto:

View mydatabase_beta.yadayada references invalid tables or columns or functions or definer/invoker or view lack rights to use them.

Como posso fazer o backup para restaurar todos os meus bancos de dados corretamente?

No exemplo, estou restaurando-o para um nome diferente, mas preciso restaurar uma cópia de trabalho. Eu acho que é provavelmente um parâmetro adicional mysqldump ou talvez uma cópia quente funcionaria melhor. Pensamentos?

    
por Codezy 18.12.2009 / 21:02

3 respostas

2

Tente fazer isso primeiro em duas etapas:

mysqldump -uroot -ppassword --skip-extended-insert database.sql > database.sql

Por isso, faz o backup em um arquivo e, em seguida, canaliza isso para o segundo comando:

mysql -u myuser -pmypassword -C mydatabase_Beta < database.sql

Se o erro de referência estiver na etapa mysqldump, corrija as exibições ou solte-as do banco de dados. Eu não posso imaginar eles ainda são usados se eles referenciam uma tabela não existente.

    
por 05.01.2011 / 20:53
1

Acho que a resposta pode ser adicionar -f :

--force, -f

Continue even if an SQL error occurs during a table dump.

Um uso para esta opção é fazer com que o mysqldump continue executando mesmo quando encontra uma view que se tornou inválida porque a definição se refere a uma tabela que foi descartada. Sem --force , mysqldump sai com uma mensagem de erro. Com --force , o mysqldump imprime a mensagem de erro, mas também grava um comentário SQL contendo a definição da view na saída de dump e continua a execução.

    
por 19.12.2009 / 07:40
0

Filmado no escuro aqui, mas não acho que você precise do -C na segunda metade dessa declaração. De acordo com minha cópia do mysql -C define o caminho do arquivo de configuração a ser usado.

    
por 18.12.2009 / 22:29