Estou executando o MySQL 8.0.23 e tento fazer backup/restaurar procedimentos. Por isso criei um usuário "dump@localhost" com os seguintes direitos:
> Grants for dump@localhost
> GRANT PROCESS ON *.* TO `dump`@`localhost`
> GRANT SELECT, LOCK TABLES, SHOW VIEW, TRIGGER ON `mydb`.* TO `dump`@`localhost`
Criando um backup assim:
mysqldump -u dump -p -n -d -t -R mydb > test.sql
O comando é executado, mas nenhum procedimento está dentro do arquivo sql.
--
-- Dumping routines for database 'mydb'
--
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2021-12-25 17:21:39
No entanto, se eu usar minha própria conta de usuário em vez de "dump" ou também usando root, ele despejará os procedimentos.
De acordo com o documento do MySQL 8, os direitos fornecidos devem ser suficientes: https://dev.mysql.com/doc/refman/8.0/en/mysqldump.html
mysqldump requer pelo menos o privilégio SELECT para tabelas despejadas, SHOW VIEW para visualizações despejadas, TRIGGER para gatilhos despejados, LOCK TABLES se a opção --single-transaction não for usada e (a partir do MySQL 8.0.21) PROCESS se a -- A opção no-tablespaces não é usada. Certas opções podem exigir outros privilégios, conforme observado nas descrições das opções.
Um procedimento típico meu se parece com isso:
create
definer = root@localhost procedure SUM_prices_d()
INSERT IGNORE INTO SUM_prices_d
...
Que direitos estou perdendo?
Há uma forte probabilidade de você precisar de mais uma concessão:
MOTIVO : Dumping Stored Procedures requer leitura de
mysql.proc
ATUALIZAÇÃO 2021-12-25 12:20
De acordo com a documentação do MySQL, você precisa de privilégios SELECT globais
Pode ser necessário ajustar as concessões da seguinte forma
ou criar um usuário separado com o único propósito de despejar procedimentos armazenados