Eu executei o seguinte comando para criar ummysqldump
mysqldump -ubackup -psomething --single-transaction --quick somedatabase | gzip > 4_19.gz
Recebi o seguinte erro após 60% (estimando o tamanho da verificação do arquivo zip) do dump criado:
mysqldump: Couldn't execute 'show table status like 'customer\_cohort\_paid'': SELECT command denied to user ''@'%' for column 'customer_id' in table 'sales_order' (1143)
Diz sobre problemas de permissão para um usuário em branco user ''@'%'
. Além disso, grants
para backup
o usuário é o seguinte:
mysql> show grants for 'backup'@'%';
+------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for backup@% |
+------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'backup'@'%' IDENTIFIED BY PASSWORD '*SOMETHING' |
+------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
O que estou fazendo errado?
Há um relatório de bug sobre isso: mysqldump: Não foi possível executar 'mostrar status da tabela': comando SELECT negado ao usuário . Surpreendentemente, não é um bug. aqui está o porquê:
customer_cohort_paid might
seja uma vista. Qualquer que seja o usuário criado, a visualização não está mais listada emmysql.user
. O que isso faz é tornar essa visão incapaz de ser descartada.Você poderia fazer uma das duas (2) coisas
SUGESTÃO #1
Forçar o despejo com
-f
Se você pode forçar o dump para fazer as views aparecerem no arquivo dump, você pode querer editá-lo (Veja meu antigo post Modify DEFINER em Many Views ou este outro How do I change the DEFINER of a VIEW in Mysql? )
AVISO : Se algum comando INSERT estendido tiver um problema de sintaxe ou dados encapsulados ou escapados incorretamente, as centenas de linhas nesse INSERT podem não ser carregadas.
SUGESTÃO #2
Descubra o usuário original que criou a visualização e recrie esse usuário
Execute esta consulta:
select * from mysql.tables_priv;
Isso mostrará todas as concessões em nível de tabela e em nível de coluna. Observe as três primeiras colunas e descubra qual comando GRANT para tornar esse usuário novamente.