我正在运行 MySQL 8.0.23 并尝试备份/恢复程序。因此,我创建了一个具有以下权限的用户“dump@localhost”:
> Grants for dump@localhost
> GRANT PROCESS ON *.* TO `dump`@`localhost`
> GRANT SELECT, LOCK TABLES, SHOW VIEW, TRIGGER ON `mydb`.* TO `dump`@`localhost`
像这样创建备份:
mysqldump -u dump -p -n -d -t -R mydb > test.sql
命令执行,但 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
但是,如果我使用自己的用户帐户而不是“转储”或同时使用 root,它将转储程序。
根据 MySQL 8 文档,提供的权限应该足够了: https ://dev.mysql.com/doc/refman/8.0/en/mysqldump.html
mysqldump 至少需要转储表的 SELECT 权限,转储视图的 SHOW VIEW ,转储触发器的 TRIGGER ,如果不使用 --single-transaction 选项,则需要 LOCK TABLES ,并且(从 MySQL 8.0.21 开始)PROCESS 如果 --不使用 no-tablespaces 选项。如选项描述中所述,某些选项可能需要其他权限。
我的一个典型程序如下所示:
create
definer = root@localhost procedure SUM_prices_d()
INSERT IGNORE INTO SUM_prices_d
...
我缺少什么权利?
您很有可能需要再获得一笔资助:
原因:转储存储过程需要读取
mysql.proc
更新 2021-12-25 12:20
根据MySQL 文档,您需要全局 SELECT 权限
您可能需要按以下方式调整赠款
或仅出于转储存储过程的目的创建单独的用户