O comando mysqldump também fará backup de todas as visualizações presentes no DB ou existe um comando especial para ele?

10

Estou tentando fazer backup de meu banco de dados inteiro junto com os modos de exibição. Eu vou usar o mysqldumpcomando Eu queria saber se isso copiará todas as visualizações ou terei que usar um comando separado para isso.

Por favor, sugira-me uma resposta. Qualquer ajuda é muito apreciada.

vinny
fonte

Respostas:

9

Não há opção específica para despejar visualizações.

Você pode tentar o seguinte:

mysqldump -h... -u... -p... --all-databases --routines --triggers --no-data > /root/MySQLDBSchema.sql
grep "CREATE ALGORITHM" /root/MySQLDBSchema.sql

Você deve poder ver as visualizações. Isso indica que, quando você despeja bancos de dados, a exibição vem com ele.

Outro truque que você pode tentar, apenas para obter apenas as visualizações, é o seguinte:

mysql -uroot -prootpass AN -e"select concat('SHOW CREATE VIEW ',table_schema,'.',table_name,';') from information_schema.views" | sed 's/;/\\G/g' | mysql --uroot -prootpass > /root/MySQLDBViews.sql

De uma chance !!!

RolandoMySQLDBA
fonte
Muito obrigado por uma resposta tão explicativa. O problema é que meus bancos de dados são muito grandes, por isso estou planejando copiar um de cada vez. Em toda essa bagunça, eu também preciso copiar 'views' para não usar o comando --all-database. Por favor, sugira uma maneira de copiar as visualizações do Mysql DB Server.
vinny
Portanto, em vez de usar --all-databases, especifique o banco de dados que você deseja.
Derek Downey
1

A melhor resposta para isso é, provavelmente, este pelo olliiiver que eu ligeiramente modificado. Exporta especificamente uma consulta de tabela suspensa e uma consulta de criação ou substituição de visualização para todas as visualizações no sistema, sem precisar mexer em nenhuma tabela. A consulta da tabela suspensa geralmente é importante, pois o mysqldump aparentemente gosta de recriar visualizações como tabelas, a menos que você inclua todas as visualizações em seu próprio parâmetro --ignore-table, o que seria irritante. Ele usa o Information_SCHEMA.

mysql --skip-column-names --batch \
  -e "SELECT CONCAT('DROP TABLE IF EXISTS ', TABLE_SCHEMA, '.', TABLE_NAME, \
  '; CREATE OR REPLACE VIEW ', TABLE_SCHEMA, '.', TABLE_NAME, ' AS ', \
  VIEW_DEFINITION, '; ') AS q FROM INFORMATION_SCHEMA.VIEWS"

Se você deseja transformar algo assim em um script de shell, também recomendo usar o parâmetro --defaults-extra-file = CREDSFILENAME, para que você não precise especificar user / pass no script.

O arquivo de credenciais fica assim:

[client]
username=YourUsernameHere
password=YourPasswordHere
RedScourge
fonte